[华为云在线课程][Linux常用命令及Shell编程][学习笔记][上]
【摘要】 1.Linux简介 1.1.Linux简介Linux是一套免费使用和自由传播的类Unix操作系统,是一个基于POSIX和UNIX的多用户、多任务、支持多线程的多CPU操作系统。Linux能运行主要的UNIX工具软件、应用程序和网络协议。它支持32位和64位硬件。Linux继承了Unix以网络为核心的设计思想,是一个性能稳定的多用户网络操作系统。 1.2.Linux起源与发展Linux内核项...
1.Linux简介
1.1.Linux简介
- Linux是一套免费使用和自由传播的类Unix操作系统,是一个基于POSIX和UNIX的多用户、多任务、支持多线程的多CPU操作系统。
- Linux能运行主要的UNIX工具软件、应用程序和网络协议。它支持32位和64位硬件。Linux继承了Unix以网络为核心的设计思想,是一个性能稳定的多用户网络操作系统。
1.2.Linux起源与发展
- Linux内核项目由芬兰赫尔辛基大学的Linus Torvalds创建的。
- 1991年10月,Linux第一个公开版0.02版发布。
- 1994年3月,Linux 1.0版发布。
- Linus的标志是可爱的企鹅,取自芬兰的吉祥物。
1.3.开源软件的定义及许可协议
- GPL(GNU General Public License)
- GPL许可协议的主要目标是保证软件对所有用户都是自由的。
- OSD(The Open Source Definition)
- 开放源代码软件的定义文本可以从官方网站查询。
- https://www.opensource.org/docs/definiton.php
1.4.Linux内核版本
- 内核版本是由Linux内核社区统一进行发布的。
XX.YY.ZZ YY是次版本号,ZZ是末版本号。 YY是奇数表示该版本为开发版本,ZZ是偶数表示该版本是稳定版本。
1.5.Linux应用领域
- 今天各种场合都有使用各种Linux发行版,从嵌入式设备到超级计算机,并且在服务器领域确定了地位。
- 目前Linux不仅在家庭与企业中使用,并且在政府中也很受欢迎。
1.6.Linux安装
- 安装程序的引导方式
- RHEL支持从光盘和USB存储设备引导安装程序。
- 安装程序包读取软件包的方式
- 从光盘读取软件包进行安装是RHEL提供的缺省安装方式。
- 安装程序可读取硬盘中保存的安装光盘镜像文件(ISO文件)进行安装。
- 安装程序可从NFS、FTP和HTTP网络服务器中读取文件进行安装。
1.7.Linux的系统安装过程
- 启动安装程序
- 设置主机引导设备为光盘驱动器。
- 从安装光盘启动主机
- 检测安装光盘的完整性
- 安装程序的配置过程
- 安装包选择全部安装
- 划分分区,划分一个swap(物理内存两倍),一个/boot(100m)和一个/即可。
- 文件复制过程
- 安装过程结束
2.Linux发行版本
2.1.Linux发行版本
- Linux发行版的名称和版本号是由发行版的维护者决定的
- RHEL是Red Hat公司发布的
- Suse Linux是Novell公司发布的
- Debian是由Debian维护社区发布的
2.2.Red Hat Linux系列发行版
- Red Hat Linux(已停止开发)
- Red Hat Linux企业版(RHEL)
- Fedora Core社区版
2.3.Linux在企业中的应用
- Linux作为Internet网络服务器的应用
- 提供Web、DNS、FTP和Email服务
- Linux作为中小企业内部服务器的应用
- 提供网络代理、网络防火墙、DHCP和文件共享服务
- Linux作为桌面环境的应用
- 可选择使用KDE、GNOME等多种桌面环境
- Linux作为软件开发环境的应用
- 支持C、C++、PERL、PHP、Java和Python语言的开发
3.Linux常用命令介绍
3.1.常用Shell分类
- Shell是系统的用户界面,提供了用户与内核进行交互操作的一种接口。它接收用户输入的命令并把它送入内核去执行。是在Linux内核与用户之间的解析器程序,现在Linux通常指/bin/bash解析器来负责向内核翻译以及传递用户/程序指令,shell相当于操作系统的外壳。
ksh -> .profile bash -> .bash_profile
3.2.Linux常见的命令格式
- 命令名称 [命令参数][命令对象]。注意,命令名称、命令参数、命令对象用空格键分隔开。
- Linux命令及其参数是严格区分大小写。
- Linux文件名严格区分大小写。
- 查看指令用法 man/help 命令。
3.3.查看文件以及文件夹
- ls命令
- ls命令的功能是显示指定目录下的文件目录清单
- 相当于dos下的dir命令,而且其参数更加丰富多样。
- ls示例一 - 不带参数
[root@localhost /]# ls bin boot dev etc home lib lib64 media mnt opt
- 功能:显示指定目录中的文件清单,如果没有指定任何目录,则默认为当前目录。
- ls示例二 - 显示隐含文件
[root@localhost /]# ls -a . .autorelabel boot etc lib media opt root sbin sys usr .. bin dev home lib64 mnt proc run srv tmp var
- 参数-a的功能:显示隐含文件。
- 说明:若文件名以".“开头,则认为是隐含的,进而普通的ls命令不显示以”."开头的文件;所以要完全显示某目录下的文件清单,必须加上-a参数才行。
- ls示例三 - 长格式输出
[root@localhost /]# ls -l total 16 lrwxrwxrwx. 1 root root 7 Apr 14 13:59 bin -> usr/bin dr-xr-xr-x. 5 root root 4096 Apr 14 14:04 boot drwxr-xr-x 20 root root 3240 Aug 14 05:55 dev
- 参数-l的功能是:以长格式列表输出指定目录中的文件清单。
- 解释长格式输出的内容如下:
- 文件类型 文件权限 连接数 属主 属组 大小 日期 时间 文件名
- l,rwxrwxrwx,1,root,root,7,Apr 14,13:59,bin->usr/bin
- ls示例四 - 递归显示
[root@localhost hello]# ls -R .: code h1.txt h2.txt ./code: 99.sh backup.sh chook_rabbit.sh for_99_2.sh for_rename.sh suffix.sh user_for.sh 99_v2.sh b.sh f1.sh for_99.sh for_sum.sh sum.sh vimrc-2022-04-14 arg.sh case_yesorno2.sh f2.sh for_dir1.sh if_bmi.sh systeminfo.sh yesorno2.sh a.sh case_yesorno.sh file.sh for_dir.sh rm.sh test.sh yesorno.sh
- 参数-R的功能是:递归显示指定目录下的文件清单,即会显示指定目录分支内各子目录中的文件清单。
3.4.查看当前路径
- pwd命令
- 功能:显示当前目录
3.5.新建目录
- mkdir命令
- 功能:在当前目录下创建目录
- mkdir创建多级目录
[root@localhost hello]# mkdir -p a/b/c [root@localhost hello]# ls -R a a: b a/b: c a/b/c:
- 功能:参数-p功能是如果要创建的目录的父目录不存在,则先创建其父目录,再创建该目录;
- 如果指定的目录存在,则不影响原目录,也不会报错。在示例中连续创建a目录、a/b目录、a/b/c目录。
3.6.切换工作目录
- cd命令
- cd命令示例一 - 切换工作目录
[root@localhost hello]# cd /var [root@localhost var]# pwd /var
- 功能:将当前的目录切换到/var
- cd命令示例二 - 切换到当前用户的主目录
[root@localhost var]# cd [root@localhost ~]# pwd /root
- 功能:不带参数的cd命令直接将当前的工作目录切换为该用户的主目录。
- 主目录又称为家目录,在RHEL中是在创建用户时,自动在/home下为用户创建一个用其用户名同名的目录,并将该目录的所有权划归给该用户所有。
- 注意:字符"~"代表(当前)用户的主目录。
3.7.创建文件
- touch命令
- touch示例一 - 创建空文件
[root@localhost ~]# touch myfile [root@localhost ~]# ls -l myfile -rw-r--r-- 1 root root 0 Aug 14 08:30 myfile
- 功能:如果myfile不存在,则创建一个大小为0字节,名为myfile的空文件。
- touch示例二 - 改变文件的最后修改时间
- 再执行一次touch myfile
[root@localhost ~]# touch myfile [root@localhost ~]# ls -l myfile -rw-r--r-- 1 root root 0 Aug 14 08:34 myfile
- 功能:如果myfile已存在,则将改变myfile的最后修改时间。
3.8.文件复制
- cp命令
- cp示例一 - 复制文件
[root@localhost hello]# cp *.txt abc
- 功能:将当前目录下以.txt结尾的文件复制到目录abc中。
- 说明:*号是通配符,可以匹配多个字符;?号只能匹配一个字符。
- cp示例二 - 复制目录
[root@localhost hello]# cp -R abc/ abc1
- 功能:增加了参数-R,就能将目录abc下面的所有子目录和文件到复制到目录abc1下面。
3.9.文件移动
- mv命令
- mv示例一 - 将文件移动到目录中
[root@localhost hello]# mv h1.txt h2.txt abc/
- 功能:如果存在abc目录,则将文件h1和h2移动到目录abc中。
3.10.修改文件改名
- mv命令
- mv示例二 - 文件改名
[root@localhost hello]# mv abc/ abcrename
- 功能:将文件(目录)abc改名为abcrename。
3.11.删除空目录
- rmdir命令
[root@localhost hello]# rmdir -p abcrename/ rmdir: failed to remove ‘abcrename/’: Directory not empty
- 功能:删除指定的空目录
- -p 递归删除目录abcrename,当子目录删除后其父目录为空时,也一同删除。如果整个路径被删除或者由于某种原因保留部分路径,则系统在标准输出上显示相应的信息。
3.12.删除
- rm命令
- rm示例一 - 删除文件
[root@localhost hello]# rm myfile.txt rm: remove regular empty file ‘myfile.txt’? y
- 功能:删除指定的文件
- rm示例二 - 删除目录
[root@localhost hello]# rm -rf abcrename/ [root@localhost hello]# mkdir abc [root@localhost hello]# touch abc/test1.c [root@localhost hello]# rm abc/ rm: cannot remove ‘abc/’: Is a directory
- 功能:参数-r是递归的意思,即可以删除非空目录;参数-f是强制的意思。当目录不为空时,直接用rm命令无法删除。
3.13.显示文件内容
- cat命令
- cat示例一 - 显示文件内容
[root@localhost hello]# cat myfile.txt hello world
- 功能:显示指定文件myfile.txt的内容。
- cat示例二 - 创建文件
[root@localhost hello]# cat myfile2.txt hello linux
- 功能:按ctrl+d停止输入,利用输出重定向符号">"来创建简短的文本文件myfile2.txt。
3.14.分屏显示
- more和less命令
[root@localhost hello]# more /etc/httpd/conf/httpd.conf
- 功能:分屏显示指定文件httpd.conf的内容,非常适合显示超过一屏的文本文件。每按一下空格键,向后翻一屏;每按一次回车键,向后翻一行。
- 说明:与more功能相似,只不过less功能更强大,支持PageUp向前翻屏,PageDown向后翻屏。
3.15.显示文件头内容
- head命令
- head示例一 - 显示文件头10行内容
[root@localhost hello]# head /etc/httpd/conf/httpd.conf
- 功能:默认显示指定文件的头10行内容。
- head示例二 - 显示文件头n行内容
[root@localhost hello]# head -n 19 /etc/httpd/conf/httpd.conf
- 功能:参数-n设置显示指定行数,本例会显示文件的头19行的内容。
3.16.显示文件最后内容
- tail命令
- tail示例一 - 显示文件最后10行内容
[root@localhost hello]# tail /etc/httpd/conf/httpd.conf
- 功能:默认显示指定文件的末尾10行内容。
- tail示例二 - 显示文件最后n行内容
[root@localhost hello]# tail -n 12 /etc/httpd/conf/httpd.conf
- 功能:参数-n设置显示指定行数。
- 本例显示文件的末尾12行内容。
3.17.建立硬连接
- ln命令示例 - 建立硬连接
[root@localhost hello]# ln myfile2.txt myfile2.txt.hlink
- 功能:为文件myfile2.txt创建名为myfile2.txt.hlink的硬连接。
[root@localhost hello]# ls -il total 12 33619155 drwxr-xr-x. 2 root root 4096 Apr 16 15:18 code 17605444 -rw-r--r-- 2 root root 13 Aug 14 09:40 myfile2.txt 17605444 -rw-r--r-- 2 root root 13 Aug 14 09:40 myfile2.txt.hlink
- 说明:通过ls -il命令可以看出两个文件的i节点号(最左边的数)是一样的,即硬连接与原文件共用同一个i节点,请注意两个文件的连接数(位于长格式列表中权限位与属主之间的数)都增加了1变成2。
3.18.建立软连接
- ln命令示例 - 建立软连接
[root@localhost hello]# ln -s myfile2.txt myfile2.txt.slink
- 功能:为文件创建软连接。
[root@localhost hello]# ls -il total 12 33619155 drwxr-xr-x. 2 root root 4096 Apr 16 15:18 code 17605444 -rw-r--r-- 2 root root 13 Aug 14 09:40 myfile2.txt 17605444 -rw-r--r-- 2 root root 13 Aug 14 09:40 myfile2.txt.hlink 18305794 lrwxrwxrwx 1 root root 11 Aug 14 10:10 myfile2.txt.slink -> myfile2.txt
- 说明:试试用rm命令删除myfile2.txt文件,注意观察连接数的变化,再分别访问两个连接文件,看看是否能够正常访问?
[root@localhost hello]# rm myfile2.txt rm: remove regular file ‘myfile2.txt’? y [root@localhost hello]# ls code myfile2.txt.hlink myfile2.txt.slink [root@localhost hello]# ll total 8 drwxr-xr-x. 2 root root 4096 Apr 16 15:18 code -rw-r--r-- 1 root root 13 Aug 14 09:40 myfile2.txt.hlink lrwxrwxrwx 1 root root 11 Aug 14 10:10 myfile2.txt.slink -> myfile2.txt
- 说明:可以看到删除原文件后,硬连接的连接数由2变1,软连接没有变化。
[root@localhost hello]# cat myfile2.txt.hlink hello linux [root@localhost hello]# cat myfile2.txt.slink cat: myfile2.txt.slink: No such file or directory
3.19.查找命令
- which命令
[root@localhost hello]# which cp alias cp='cp -i' /usr/bin/cp
- 功能:显示命令的绝对路径。
- 注意:该命令只能在命令搜索路径指定的目录中去查找命令或程序。
- whereis命令
[root@localhost hello]# whereis ln ln: /usr/bin/ln /usr/share/man/man1/ln.1.gz
- 功能:查询指定命令所在目录以及帮助文档所在目录。
3.20.切换用户
- su命令
[root@localhost hello]# su - root Last login: Sun Aug 14 09:35:49 CST 2022 from 10.0.0.1 on pts/0
- 功能:可以切换当前用户身份。
- su命令带有参数"-",其含义是改变身份的同时也改变了工作环境。
3.21.按文件名查找
- find命令
- find示例一 - 按文件名查找
[root@localhost hello]# find -name "*.sh"
- 功能:参数-name指明按文件名进行查找,即从当前目录开始查找以sh结尾的所有文件。
- find示例二 - 按文件大小查找
[root@localhost hello]# find /etc/ -size 15 /etc/selinux/targeted/active/modules/100/container/cil /etc/selinux/targeted/active/modules/100/devicekit/cil /etc/selinux/targeted/active/modules/100/logging/cil /etc/selinux/targeted/active/modules/100/munin/cil /etc/kdump.conf
- 功能:从/etc下开始查找大小为8块的文件,此处默认512字节为1块。若认为块大小为1k,则应该写8k。
- 其他可以使用的单位有c(字节)、w(双字节)、M(兆字节)和G(吉字节)。
- find示例三 - 按文件类型查找
[root@localhost hello]# find /var/ -type d -print
- 功能:从/var目录下开始查找类型为目录的文件,其中参数-print是显示到屏幕上的意思,经常省略。
- find示例四 - 按文件的修改时间查找
[root@localhost hello]# find . -cmin -5
- 功能:从当前目录下查找5分钟内修改过的文件。
- 如果把"-5"改成"+5",表示查找5分钟以前修改过的文件。不带加号减号的话,就是整好5分钟。
- 如果把时间单元改为天,则使用参数"-ctime"
- find示例五 - 按文件的权限查找
find mytmp -perm 755
- 功能:查找mytmp目录下的权限为755的文件。
find mytmp -perm +755
- 功能:查找mytmp目录下的满足755中任何一种权限的文件,即符合任何一个指定的权限位即可。
find mytmp -perm -755
- 功能:查找mytmp目录下的权限至少满足755的文件,即指定的所有权限位必须符合才算满足查询条件。
- find示例六 - 多条件查询
find / -ctime -5 -a -name "*.conf"
- 功能:查找5天以内修改过的所有.conf文件。
- 说明:默认情况下各查询条件之间是and关系,可用-a或者-and表示,-o表示或,!表示非。
3.22.文件内容操作命令
- grep命令
- grep示例一 - 在指定的文件中查找包含特定的字符串的行
grep "bind" host.conf
- 功能:在文件host.conf中查找包含字符串"bind"的行。
grep "network" /etc/*.conf
- 功能:利用通配符可在多个文件中查找包含特定的字符串的行。本例会在/etc下扩展名为.conf文件中查找包含字符串"network"的行。
- grep示例二 - 查找不包含指定字符串的行
grep -v "network" /etc/nsswitch.conf
- 功能:查找/etc/nsswitch.conf文件中不包含字符串"network"的行。
3.23.统计指令
- wc示例 - 统计指定文件的行数、单词数和字符数
[root@localhost test1]# wc /etc/nsswitch.conf 67 303 1949 /etc/nsswitch.conf
- 功能:统计出文件/etc/nsswitch.conf共有67行、303个单词、1949个字符。
- wc示例 - 参数使用
[root@localhost test1]# wc -l /etc/nsswitch.conf 67 /etc/nsswitch.conf
- 功能:参数-l的功能可统计出指定文件的行数。另外,利用参数-w统计单词,利用-c统计字符数。
3.24.按正序输出
- sort命令
- sort示例一 - 正序输出
- sort mytest
- 功能:将指定文件以行为单元按正序输出
- sort示例二 - 逆序输出
- sort -r mytest
- 功能:将指定文件以行为单元按逆序输出
3.25.文件比较
- diff命令
- diff test mytest
- 功能:比较文件test与mytest是否相同,将不同之处输出到屏幕上。
3.26.压缩与打包命令
- tar命令
- tar命令是经典的备份/还原命令,几乎所有最新的软件包都是通过tar包发布的。
- tar命令示例一 - 打包(备份)
tar -cvf myetc.tar /etc
- 功能:参数-c的功能是打包(创建),
- 参数-v是显示处理过程,
- 参数-f是用来指定文档名;
- 本例功能是:将目录/etc打包为一个名为myetc.tar的文档。
- tar命令示例二 - 打包(备份)并压缩
tar -zcvf myetc.tar.gz /etc
- 功能:将目录/etc打包并压缩为一个名为myetc.tar.gz的文档。
- 其中参数-z是调用gzip命令来压缩,拓展名为gz,
- 参数-Z是调用compress命令来压缩,拓展名为Z,
- 参数-j是调用bzip2命令来压缩,拓展名为bz2。
3.27.解压缩还原
- tar命令示例一 - 解压缩还原
tar -zxvf myetc.tar.gz
- 功能:将参数-c换成-x即可实现还原释放的功能。
- 说明:本例没有指明还原的位置,则将会在当前目录下。
- 如果想指明还原位置可用参数-C,命令示例如下
- tar -zxvf myetc.tar.gz -C /tmp
3.28.gzip与gunzip命令
- gzip与gunzip命令
- gzip命令示例
gzip myetc.tar
- 功能:将文件myetc.tar压缩为myetc.tar.gz。
- gunzip命令示例
gunzip myetc.tar.gz
- 功能:将文件myetc.tar.gz解压缩为myetc.tar。
3.29.挂装与卸载命令
- mount命令
- mount命令示例一 - 挂载光盘
mount -t iso9660 /dev/cdrom /mnt/cdrom
- 功能:参数-t指明要挂载的文件系统的类型,接下来是设备文件,最后是挂载点。
- 本例的功能是:将光盘挂载到/mnt/cdrom目录下,其中光盘文件系统的类型是iso9660。
- mount命令示例二 - 挂载优盘
mount -t vfat /dev/sda1 /mnt/myusb
- 功能:将文件系统类型为vfat的优盘挂载到/mnt/myusb目录下。
- 说明:vfat针对的是fat32、fat16文件系统;优盘采用与SCSI硬盘相同的设备文件。
- 注意:一般在挂载优盘前,先执行
- fdisk -l命令
- mount命令示例三 - 挂载软盘
mount -t msdos /dev/fd0 /mnt/floppy
- 功能:将软盘挂载到/mnt/floppy目录下,软盘的文件系统类型一般为msdos。
- 说明:挂载点不一定必须在/mnt下,可以是任意一个空目录。
- unmount命令
mount /mnt/cdrom
- 功能:卸载光盘文件系统。
- 说明:在卸载文件系统时可以使用设备文件或挂载点。
- 切记,一定要在挂载点之外,才能卸载相应的设备(文件系统)。
3.30.网卡配置命令
- ifconfig命令示例一 - 显示接口(网卡)配置参数
ifconfig
- 功能:显示网卡参数的配置情况,包括ip地址、子网掩码、广播地址等。
- ifconfig命令示例二 - 设置接口(网卡)配置参数
ifconfig eth0 10.22.1.103 netmask 255.255.255.0
- 功能:设置网卡eth0的ip地址为10.22.1.103,掩码为255.255.255.0。
- 说明:eth0是系统第一块网卡的名称,eht1是系统第二块网卡的名称,lo是环回测试网卡名称。
3.31.帮助命令
- man命令
- man命令示例一 - 查看指定命令的帮助
man rpm
- 功能:查看rpm命令的帮助手册。
- 说明:按q退出man环境。
- man命令示例二 - 查询指定关键字的所有分类
man -a chroot
- 功能:查看关于chroot的所有分类帮助手册。
- man命令示例三 - 查询特定分类的帮助
man 5 named.conf
3.32.定时任务命令
- crontab命令
- crontab命令示例一 - 查看任务列表
crontab -l
- 功能:查看crontab的任务列表。
- crontab命令示例二 - 编辑任务列表
crontab -e
- 功能:利用参数-e可以进入crontab的编辑环境,可以设置任务列表。
- 说明:下面先看crontab中任务列表的格式
- 分 时 日 月 星期 命令
- 10 2 * * * /root/bin/mybackup.sh
- 含义:这条任务由六个字段组成,含义是每天的凌晨2:10执行/root/bin/mybackup.sh程序
3.33.反引号命令
- 反引号命令 “`”
kill `cat /var/run/xinetd.pid`
- 功能:杀掉xinetd进程。
- 说明:该命令行由两个命令组成,首先要执行的是反引号内的命令,这里解释一下文件/var/run/xinetd.pid中存放的是xinetd的进程号,cat的执行结果就是显示该文件的内容,即进程号;然后,再执行kill命令杀掉相应的进程。
3.34.时间日期
- date命令
- date命令示例一 - 显示时间日期
date
- 功能:显示系统当前的时间日期。
- date命令的参数很多
date +%y
- date命令示例二 - 设置时间日期
date -s"20220815 7:35"
- 功能:将系统日期设置为2022年8月15号,时间设置为7:35。
3.35.显示磁盘空间情况
- df命令
- df命令示例一 - 显示文件系统使用磁盘空间的情况
df
- 功能:显示系统中每个文件系统使用磁盘空间的情况。
- df命令示例二 - 以习惯的阅读方式显示文件系统使用磁盘空间的情况
[root@localhost ~]# df -h Filesystem Size Used Avail Use% Mounted on devtmpfs 898M 0 898M 0% /dev tmpfs 910M 0 910M 0% /dev/shm tmpfs 910M 9.6M 901M 2% /run tmpfs 910M 0 910M 0% /sys/fs/cgroup /dev/mapper/centos-root 17G 2.2G 15G 13% / /dev/sda1 1014M 151M 864M 15% /boot tmpfs 182M 0 182M 0% /run/user/0
- 功能:加上参数-h,可以按照人们习惯的阅读方法来显示系统中每个文件系统使用磁盘空间的情况。
- du命令
- du命令示例一 - 显示指定目录中每个文件占用磁盘空间大小
du /etc
- 功能:显示出/etc目录中每个文件占用磁盘空间的大小。
- du命令示例二 - 显示指定目录共占用磁盘空间大小
du -sh /etc
- 功能:参数-s表示汇总,本例功能是按照人们习惯阅读方法显示/etc目录占用磁盘空间大小。
3.36.管道与重定向
- 管道示例一 - 一级管道
[root@localhost ~]# ls -l | grep "^|"
- 功能:以长格式显示当前目录下的符号连接文件。该命令行首先执行ls -l,并把结果当做grep "^|“命令的输入文件,其中”^|"表示以|开头。
- 管道示例二 - 多级管道
[root@localhost ~]# ls -la | grep "^|" | wc -l
- 功能:首先执行ls -l,并把结果当做grep "^|"命令的输入文件,然后统计行数。
3.37.输出重定向
- 输出重定向示例一 - 覆盖方式
sort -r a.txt > b.txt
- 功能:把a.txt文件按行逆序排序并重定向输出到文件b.txt中;若b.txt已存在,则覆盖掉原内容,不存在就创建。
- 输出重定向示例二 - 追加方式
sort -r a.txt >> b.txt
- 功能:" >> "的功能是按追加方式进行输出重定向;若b.txt存在,在该文件末尾追加新内容,不存在就创建。
3.38.输入重定向
- 输入重定向
- 输入重定向符号有两种,即"<“和”<<"
- 输入重定向示例一 - "<"输入重定向
more < /etc/httpd/conf/httpd.conf
- 功能:上述命令与more /etc/httpd/conf/httpd.conf的结果一样。
- 说明:很多命令与more一样可以使用输入重定向符,也可不用,如cat、wc、less等。
- 输入重定向示例二 - "<<"输入重定向
cat <<! >a.txt
[root@localhost test1]# cat hello.txt [root@localhost test1]# cat <<! >hello.txt > hello > world > ! [root@localhost test1]# cat hello.txt hello world
- 功能:将"!“之间的内容重定向到hello.txt文件中去,不包括”!"。
- 说明:这是一个组合使用输入输出重定向的例子,其中"!"是定界符,其他字符也可以充当定界符。
- 注意:"!“与后面的”>"之间至少要有一个空格。这是一种非常经典的用法,可以用在shell编程环境中。
3.39.vi编辑器使用简介
- vi编辑器是Linux和Unix上最基本的文本编辑器,工作在字符模式下。由于不需要图形界面,vi是效率很高的文本编辑器。尽管在Linux上也有很多图形界面的编辑器可用,但vi在系统和服务器管理中的功能是那些图形编辑器所无法比拟的。
- vi有三种工作方式:命令模式(Command mode),输入模式(Insert mode),底线命令模式(Last line mode)。
3.40.vi编辑器使用命令
- 光标相对移动n行
- 方法:直接敲数字"n"回车,则光标从当前位置下移n行。
- 例如:敲10回车,则光标从当前位置下移10行。
- 敲10-回车,则光标从当前位置上移10行。
- 方法:直接敲数字"n"回车,则光标从当前位置下移n行。
- d命令 - 删除行
- 方法:敲dd删除当前行;敲ndd从当前行开始连续删除n行,即包含当前行。
- 例如:敲3dd,从当前行开始连续删除3行。
- 方法:敲dd删除当前行;敲ndd从当前行开始连续删除n行,即包含当前行。
- y命令 - 复制行
- 方法:敲yy复制当前行;敲nyy从当前行开始连续复制n行,即包含当前行。
- 说明:vi提供了类似Windows中剪贴板暂存区,y命令就是将制定的行复制到暂存区中。
- 例如:敲2yy,则从当前行开始连续复制2行到暂存区。
- 方法:敲yy复制当前行;敲nyy从当前行开始连续复制n行,即包含当前行。
- p命令 - 粘贴
- 方法:敲p在当前行的下方粘贴上暂存区中的内容;敲np在当前行的下方连续粘贴n遍暂存区中的内容。
- 例如:敲2p,则连续粘贴2遍暂存区中的内容。
- 方法:敲p在当前行的下方粘贴上暂存区中的内容;敲np在当前行的下方连续粘贴n遍暂存区中的内容。
- 显示/隐藏行号
- 输入:set number,会在每行前加上行号。
- 输入:set nonumber,隐藏行号。
- 存盘 - w命令
- 按w键,存盘。
- 按ZZ,存盘并退出,该命令与:wq相同。
- 退出 - q命令
- 按:q退出
- 如果已进行编辑,不想存盘退出,按:q!
- 查找
按键 功能 /字符串 向后查找指定的字符串 / 继续向后查找上一次查找的内容 ?字符串 向前查找指定的字符串 ? 继续向前查找上一次查找的内容 n 继续向后查找 N 继续向前查找 - vi光标移动与翻页
光标操作键 功能 h 左移动光标 i 右移动光标 k 上移动光标 j 下移动光标 ctrl+f 向前翻整页 ctrl+b 向后翻整页 ctrl+u 向前翻半页 ctrl+d 向后翻半页 - vi进入输入模式
命令 功能 i 在当前光标处进行插入状态 a 在当前光标后进入插入状态 A 将光标移动到当前行的行末,并进入插入状态 o 在当前行的下面插入新行,光标移动到新行的行首,进入插入状态 O 在当前行的上面插入新行,光标移动到新行的行首,进入插入状态 cw 删除当前光标到所在单词词尾的字符,并进入插入状态 c$ 删除当前光标到行尾的字符,并进入插入状态 c^ 命令删除当前光标之前(不包括光标上的字符)到行首的字符,并进入插入状态 - vi删除操作
命令 功能 x 删除光标处的单个字符 dd 删除光标所在行 dw 删除当前字符到单词尾(包括空格)的所有字符 de 删除当前字符到单词尾(不包括单词尾部的空格)的所有字符 d$ 删除当前字符到行尾的所有字符 d^ 删除当前字符到行首的所有字符 j 删除光标所在行行尾的换行符,相当于合并当前行和下一行的内容
4.Linux文件系统及权限
4.1.文件系统
- 文件系统用来存放和管理所有系统使用的文件和数据,其载体是软件或硬盘分区,一个软盘或硬盘分区在作为文件系统使用时,必须进行初始化,并将如何组织文件的数据结构写到这些介质上,这个过程就是建立文件系统过程。
- Linux的文件系统是树形结构,所有的文件和目录都是树上的节点,树的根就是整个文件系统的最顶层目录,即根目录。文件连接到目录,目录再连接到上一层目录,所有的文件和目录最终都归结到根目录,形成整个文件系统。
- Linux使用一个统一的接口支持多种文件系统,每种文件系统都有各自的格式和特征(如文件名长度,最大文件大小等)。目前,Linux支持的文件系统类型MINIX、EXT、EXT2、EXT3、proc、hpfs、nfs、isofs、msdos fat、vfat、ntfs、umsdos、xiafs即sysv等。RHEL默认文件系统是EXT3。
- 第一个专门为Linux设计的文件系统被称为拓展文件系统(Extended File System)或EXT。出现于1992年4月,性能不太好。1993年拓展文件系统第二版ext2被设计出来并添加Linux中。被认为是当时最成功的Linux文件系统。
4.2.ext3文件系统的特性
- 可用性
- 除非发生硬件故障,即使非法关机,ext3也不需要文件系统校验。
- 数据完整性
- ext3文件系统在非法关机时,数据完整性能得到可靠的保障。
- 速度
- 尽管ext3写入数据的次数多于ext2,但是ext3常常快于ext2。
- 简易转换
- 可以容易地不经格式化而把ext2转换为ext3系统,体现了可靠的日志式文件系统地优越性。
4.3.Linux的文件系统结构
- /bin bin是binary的缩写。这个目录是对UNIX系统习惯的沿袭,存放着使用者最近常使用的命令。例如:cp、ls、cat等。
- /boot 这里存放的是启动Linux时使用的一些核心文件。
- /dev dev是device(设备)的缩写。这个目录下是所有Linux的外部设备,其功能类似DOS下的.sys和Windows下的.vxd。在Linux中设备和文件是用同种方法访问的。例如:/dev/hda代表第一个物理IDE硬盘。
- /etc 这个目录用来存放所有系统管理所需要的配置文件和子目录。
4.4.文件系统结构详述
- /home 用户的主目录,比如说有个用户叫wang,主目录就是/home/wang。
- /lib 这个目录存放系统最基本的动态链接共享库,作用类似于Windows的.dll文件。几乎所有的应用都需要用到这个共享库。
- /mnt 空目录,提供这个目录让用户临时挂在别的文件系统。
- /proc 虚拟目录,是系统内存的映射,可以通过直接访问这个目录来获取系统信息。
- /root 系统管理员,超级权限者的用户主目录。
- /sbin s就是super user的意思,就是说这里存放的是一些系统管理员使用的系统管理程序。
- /tmp 用来存放一些临时文件的地方。
- /usr 最庞大的目录,用到很多应用程序和文件几乎都存放在这个目录下。
- /var 存放着经常变动的文件,为了保持/usr相对稳定,那些经常被修改的目录可以放在这个目录下,系统日志文件就是在/var/log目录中。
4.5.常见文件所在目录
- hosts /etc
- 全局profile /etc
- 日志文件 /var/log/messages
- 用户环境变量 ~/.bash_profile或者~/.profile等
- 用户文件 /etc/passwd
- 组对应文件 /etc/group
4.6.文件名与文件类型
- 文件名是一个文件的标识。Red Hat Linux系统中的文件名的命名规则与Windows系统基本相同。同样由数字、字母、下划线、圆点等组成,最长不能超过255个字符。在Red Hat Linux系统中,没有像Windows系统那样明显的拓展名,但对字母大小写是严格区分的。
- Linux有四种基本文件系统类型:
- 普通文件:如文本文件、C、shell、可执行文件等。
- 目录文件:包括文件名、子目录名及其指针。是Linux存储文件名的唯一地方。
- 链接文件:是一个文件的第二个名字,这是针对多用户共享同一文件而产生的文件。
- 特殊文件:Linux的一些设备如磁盘、终端、打印机等都在文件系统中表现出来,这一类文件就是特殊文件,常放在/dev目录内。
[root@localhost hello]# ls -l
total 4
drwxr-xr-x. 2 root root 4096 Apr 16 15:18 code
-:表示普通文件。
d:表示目录文件,在Linux中目录也是文件,不仅如此,实际上在Linux中任何设备也可以被当作文件处理。
l:表示符号连接文件。
b:表示块设备文件
- 如硬盘的设备文件/dev/hda,其中字母a表示第一块,h表示ide类型的硬盘,scsi类型的硬盘用s表示
- 分区也有相对应的设备文件,如/dev/sdb3,表示第2块SCSI硬盘上的第3个分区。
- 需要说明的是优盘也采用SCSI硬盘额设备文件名来表示。
c:表示字符设备文件,如/dev/tty1
p:表示管道文件。
s:表示套接字文件。
4.7.文件权限的说明
- Linux文件有三种典型的权限,即r读权限、w写权限和x执行权限。
[root@localhost hello]# ls -l total 4 drwxr-xr-x. 2 root root 4096 Apr 16 15:18 code
- 在长格式输出中在文件类型的后面有9列权限位,是针对不同用户设定的。
属主的权限 属组的权限 其他用户的权限
rwx r-x r-x
前三个rwx是文件属主权限 4+2+1=7
中间三个r-x是同组用户权限 4+0+1=5
后面三个r-x是其他用户权限 4+0+1=5
code文件夹的权限就是755
4.8.文件以及文件夹权限
- 权限种类
- 权限分为有三种r(4 读),w(2 写),x(1 执行)
4.9.修改权限
- 修改文件权限使用chmod命令
- chmod [who] operator [permission] filename
- who的含义是:
- u 文件属主权限
- g 同组用户权限
- o 其他用户权限
- a 所有用户(文件属主、同组用户及其他用户)
- operator的含义:
- + 增加权限
- - 取消权限
- = 设定权限(覆盖原权限)
- permission的含义:
- r 读权限
- w 写权限
- x 执行权限
- 修改文件权限 - 字母方式
chmod u+x host.conf
- 功能:为文件host.conf的属主增加执行权限
chmod g-w,o=x host.conf
- 功能:将文件host.conf的属组去掉写权限,其他用户设置只有执行权限,文件属主u的权限不变
- chmod示例一 - 数字方式
- chmod的数字使用方式,关键是一个数制转换的问题。
- 这种方式是先将每个权限位化为二进制数,其中如果某权限位是"-"用0表示,某则用1表示;接着,将这9列权限分为三组(每三位一组),再将每组化成一个八进制数。
- 例如:rwxrw-r–,表示764。
- chmod示例二 - 数字方式
- chmod 764 host.conf
- 功能:将文件host.conf的权限设置为:
- 属主全部权限
- 属组读写权限
- 其他用户只读权限
4.10.文件夹属主
- 查看文件夹属主
code文件夹的属主是root[root@localhost hello]# ls -al code/ total 108 drwxr-xr-x. 2 root root 4096 Apr 16 15:18 . drwx--x--x. 3 hello hello 135 Aug 14 10:27 ..
4.11.修改属主
- 修改文件夹属主
[root@localhost hello]# ls -al test1/ total 0 drwxr-xr-x 2 root root 6 Aug 14 20:13 . drwx--x--x. 4 hello hello 148 Aug 14 20:13 ..
- 如果想把test1文件夹的属主修改为:root:hello,命令如下:
[root@localhost hello]# chown root:hello test1/ [root@localhost hello]# ls -al test1/ total 0 drwxr-xr-x 2 root hello 6 Aug 14 20:13 . drwx--x--x. 4 hello hello 148 Aug 14 20:13 ..
- 如果想把test1文件夹下所有文件及文件夹属主都一起修改,要增加参数-R,表示递归,可以深入到指定目录中的每一层
chown -R root:hello test1/
4.12.修改属组
- chgrp命令
- chgrp示例一 - 改变文件的属组
[root@localhost test1]# ll total 0 -rw-r--r-- 1 root root 0 Aug 14 20:29 hello.txt [root@localhost test1]# chgrp hello hello.txt [root@localhost test1]# ll total 0 -rw-r--r-- 1 root hello 0 Aug 14 20:29 hello.txt
- 功能:将hello.txt的属组由root改为hello
- chgrp示例二 - 递归改变文件的属组
chgrp -R hello mydir
- 功能:参数-R,表示递归,可以深入到指定目录中的每一层,将所有子目录和文件的属组改为指定的组;例子中将mydir目录中所有子目录和文件的属组都设定为hello。
【版权声明】本文为华为云社区用户原创内容,转载时必须标注文章的来源(华为云社区)、文章链接、文章作者等基本信息, 否则作者和本社区有权追究责任。如果您发现本社区中有涉嫌抄袭的内容,欢迎发送邮件进行举报,并提供相关证据,一经查实,本社区将立刻删除涉嫌侵权内容,举报邮箱:
cloudbbs@huaweicloud.com
- 点赞
- 收藏
- 关注作者
评论(0)