开发者学堂课程【Linux企业运维实战 - 入门及常用命令:Linux 常见命令用法、变量及文件通配符】学习笔记,与课程紧密联系,让用户快速学习知识。
课程地址:https://developer.aliyun.com/learning/course/550/detail/760
Linux 常见命令用法、变量及文件通配符
内容介绍:
一、回顾不同类型命令
二、回顾文件 目录 结构
三、回顾路径
四、更改 目录
五、列出 目录 内容
六、ls 选项用法具体讲解
七、文件通配符
一、回顾不同类型命令
上节内容介绍了 Linux 基本命令、常见小工具、如何查看帮助以及文件管理,在查看帮助时如何查看不同类型命令的帮助,之前介绍过在 linux 中有可能输入的是多种类型的指令,比如别名、内部命令、外部命令。
1)别名有 ls
2)内部命令表现为集成在 shell 程序中,当前系统默认在 bash 程序中, /bin/bash,有 enable 、type 、help、 cd 、history、 . 、source、 echo 、pwd
3)外部命令表现为一个独立文件,在 /bin 下有很多绿色的程序,有自己独立的程序
4)判断内部命令还是外部命令用 type,比如输入 type cd
显示 cd is a shell builtin
5)假设一个 cmd 即是别名,也是内部命令,也是外部命令,那么最终执行的是别名
6)别名要存放在文件中才能保存,在下次重启时相当于在磁盘中所以不会丢失
7)存放若干配置的文件举例:别名 ls 放在文件 .bashrc中,/etc/profile.d/放在 env.sh 中
8)内部命令查看帮助的用法:help+内部命令
外部命令:详细用法可以用 man,也可以用 --help
二、回顾文件目录结构
在 linux 中无论哪种版本在规划根目录下的一级目录时都按照 fhs标准即文件分层标准
1)在根目录下常见的基本的文件夹有:
bin:普通用户使用、sbin:系统管理员使用、boot:放引导程序比如内核、etc:放相关配置文件、lib64、tmp:放临时文件、usr:放安装系统时的部分程序、mnt:挂载点、media:挂载点、dev:放硬件设备比如 zero 逻辑存在的顺序访问的字符设备、sda:真实存在的随机访问的有缓存的块设备(访问磁盘上的一个文件时不是按字节一个个访问,而是快速按照某种规则访问就是随机访问)、var:放可变数据、home:放用户数据、misc:进入该目录实现自动挂载、srv:放服务器数据、proc:反应内存数据、sys:放硬件信息、root:账号家目录、opt:放第三方软件、net:自动挂载、selinux:安全策略相关。
2)文件类型有:
d 开头的目录文件
b 开头的块设备
c 开头的字符设备
l 开头的符号链接文件
p 开头的管道文件
s 开头的套接字文件
这些文件一般不手动创建,而是程序自动生成
此外,文件类型的颜色不是固定不变的,系统可以修改颜色的定义,输入: vim /etc/DIR_COLORS,该文件包含不同文件后缀应该采用什么颜色的说明,例如下图 :存档或者压缩用明红色
将.gz 01;31修改为.gz 01;35,先存盘,退出后再进入就会显示变色
三、回顾路径
访问文件时,有两种路径,绝对路径和相对路径。相对路径相对于当前工作目录,用 pwd 查看当前目录,有些特殊情况下相对于其他目录。绝对路径带有/,相对路径带有.(当前目录)或者..(上一级目录)比如现在在 root 下,root 是在根下的一个子文件夹
上节课学到 -a 属性,
输入 ls -a 显示如图
带有.和..,这就是我们输入.或者..能够切换目录或文件夹的原因
输入 cd..就会回到上级目录,即现在在根目录,那根目录中有.或者..吗?
输入ls -a
显示有.和..,任何文件夹都有.和..
四、更改目录
1)cd 改变目录
使用绝对或相对路径∶
cd /home/wang/
cd home/wang
切换至父目录:cd ..
切换至当前用户主目录:cd
切换至以前的工作目录: cd -
2)选项:-P
3)相关的环境变量:
PWD :当前目录路径
OLDPWD:上一次目录路径
cd 目录在切换目录时有一些方便的用法:
输入 pwd,显示现在在 /data 目录下,如果想回到 root 账号的家目录下,输入 cd ~,就会进入。
另外也可以直接输入 cd,默认就是进到当前目录的家目录下。
~可以指定某个用户的家目录,比如要进到 wang 的家目录,输入 cd ~wang 就会直接进入,输入 pwd 进行查看,显示 /home/wang。再从 wang 的家目录切换到 etc 后想要直接切回到 wang 的家目录,输入 cd /etc/,再输入 cd -,显示/home/wang,-能直接回到刚才的目录,但是再输入 cd -就显示 /etc,所以-只能撤销一次。
这种方法原理是系统有自动存放上一次目录的变量,变量叫 OLDPWD,输入 echo $OLDPWD,显示 /home/wang即离开文件夹后,系统会自动保存离开时所在的文件夹并记录在OLDPWD 变量中。
既然 OLDPWD 是个变量,那么能不能修改变量呢?输入 OLDPWD=/etc/sysconfig,意味着再次输入 cd -时就会切换到该变量指定的文件夹 /etc/sysconfig 中。输入 cd - ,显示结果为/etc/sysconfig
系统还有一个变量 PWD 记录当前目录,PWD 变量存放的是当前所在目录,输入 echo $PWD 显示 /etc,再来修改 PWD 的值,输入PWD=/data,修改之后再来查看显示的结果,输入 pwd,显示 /etc,不变,但是提示符发生变化,由 etc 变为 data ,所以提示符信息来自于 PWD 变量。
什么是变量?
所谓变量就是可变化的数据,例如 PWD=/data,PWD 是变量名字,代表着部分可变化内容,/data 有可能是可变化的内容,=是给变量指定一个值。虽然变量名字固定,但是具体代表的值是变化的,就叫变量。
接触到的变量:PS1、PATH、PWD、OLDPWD、HISTSIZE、SHELL
五、列出目录内容
1)列出当前目录的内容或指定目录
2)用法:ls [options] [files_or_dirs]
3)示例:
ls -a 包含隐藏文件
ls -l 显示额外的信息
ls -R 目录递归通过
ls -ld 目录和符号链接信息
ls -1 文件分行显示
ls -S 按从大到小排序
ls -t 按 mtime 排序
ls -u 配合-t 选项,显示并按 atime 从新到旧排序
ls -U 按目录存放顺序显示
ls-X 按文件后缀排序
注意:注意 CentOS6 和 CentOS7 不同命令用法可能有些区别
比如shutdown 外部命令:在7上输入 shutdown --help
可以看到此处 TIME 是放在[]中,意味着可有可无
在6上输入:shutdown --help
此处 TIME未加[],意味着必须有。
所以在7上可以直接加 r 而不加时间,r 代表重启的意思,输入 shutdown -r
就会立刻重启,但是实际上我们看到是一分钟后重启,我们还可以取消它,输入 shutdown -C,就会取消
然而在6上输入 shutdown -r就会显示格式错误
所以不同版本在使用时还是有细微的差别,要注意分辨
六、ls 选项用法具体讲解
输入 ls --help
所以不同版本在使用时还是有细微的差别,要注意分辨
ls 可以看作是 list,列出信息关于文件,也可以增加默认是当前文件夹的
也可以增加下列选项:
1)-a 相当于 --all,不去忽略以.开头的文件即显示以.开头的文件,而以.开头的文件相当于隐藏文件,即是显示所有。
2)-A 不显示.和..,其它的都显示
两者区别就是是否显示.和..,但是注意 A 也要显示隐藏文件,只是不显示如下图中开头的两个特殊的.和..
因为.和..一般来讲并不代表着我们真正要操作的文件,我们关心的是里面的其它文件,所以一般用 -A
3)-R R 选项也可以选长格式 --recursive 递归的意思,递归主要对文件夹来说,在每个文件夹中可能套着子文件夹或者下下级,而默认 ls命令只显示当前指定的文件夹里的文件名,不会进入到子文件夹里。如果想要进入到每个子文件夹里,加递归操作,输入 ls -R,就会进入到每个子文件夹中访问所有数据
再来看 etc,输入 ls /etc,etc 目录下只有这些文件
当然还有很多子文件夹,如果加上 -R,输入 ls -R /etc,如下图
会进入到更深的子文件夹中
这就是递归行为。
4)-l 选项显示的是长格式列表,默认只是显示文件名,加上 -l 会显示更详细的内容,比如文件大小、修改时间、创建时间等
-l 也可以用别名 ll 来实现,效果一样
输入 alias ll 显示 alias ll= ‘ls -l --color=auto’ 即 ll 就等于 ls -l
ll 后面也可以跟具体的一个文件,比如跟文件 anaconda-ks.cfg,只显示这一个文件的信息
输入 ll anaconda-ks.cfg,显示
默认显示当前目录全部文件信息,也可以选其中一个文件单独显示。但是如果跟的不是文件,而是一个文件夹呢?
输入 ll /etc/,显示的不是文件夹的属性,而是该文件夹下所有文件的属性。如果想要显示文件夹本身的属性,需要加上 d,比如输入 ll -d /data,显示
相当于 ls -ld /data
此外,再输入文件夹时末尾加/不加/有什么区别?比如 bin,输入 ll /bin/,显示如图,再输入 ll /bin
之所以有区别是因为 bin 特殊,是个快捷方式,如果是普通文件夹,比如 data 加不加/则无区别。
5)-1选项是让显示的文件按照次序分行显示
思考是按照 ASCII 顺序吗?先来 touch 文件
输入 touch /data/F
touch/data/e
ls /data -1
如果是按照 ASCII 顺序,则 F 在前,所以不是按照 ASCII 码,就是按照普通字符顺序。以后会接触到在 Linux 配置文件中,会按照排列顺序来顺序执行程序,如果想要一个程序优先执行,需要排列在第一个
输入 touch /data/A,ls /data,显示 A 在第一个,尝试再输入 touch /data/1,ls /data,显示1在第一个,可见数字比字母优先级高。
6)-S选项按照大小排序
输入 ls -S 显示如图,再输入 ls -Sl 以列表形式显示
如果想从小到大排序,用 r 倒序,输入 ls -Slr 则显示倒序
如果输入 ls /data -r,显示顺序如下:
7)-t 选项按最新修改时间排序,输入 ll /data -t,可以看到最上面排列的文件是最新修改的文件
此外 cat 文件不算修改,排序不受影响
除了最新修改时间还有读时间和状态的更改时间,输入 cat /data/file6,再输入ll /data/file6最新修改时间不改变,但是读时间改变,输入 ll --time=atime /data/file6,访问时间为刚才时间。
状态时间:
每个文件分为两部分,一个是属性信息元数据,一个是文件中存放的文件内容。而属性中描述的作者、文件大小都属于元数据,如果元数据发生了变化,变化的时间就是状态的更改时间。
比如更改 root 账号的所有者,输入 chown wang /data/file6,改为 wang 所有,再输入ll /data/file6,显示文件内容未改动,输入 ll /data/file6 --time=atime 显示修改时间也未变,但是输入 ll /data/file6 --time=ctime 显示状态时间发生改变
三个时间可以用 stat 命令全部显示,输入 stat /data/file6
-t 选项按照修改时间排序,配合 lt 使用,输入 ls /data -lt
也可以加上 u,输入 ls /data -ltu,则按照访问时间来排序
8)-c 选项是 ctime 排序
9)-U 选项是按照目录顺序,touch 一个 a 文件后,输入 ls 查看排序 a 在第二位,再输入 ls -U 查看排序,a 在最后一位。即按创建时间排序
10)-X 选项按文件后缀排序,输入 touch {a..d}.txt
touch {a..d}.log
ls
ls -X
如下图,同一类型的排在一起
11)ls 还有一个比较常用的组合写法:输入 ls,在当前目录下显示很多文件夹,想要显示文件夹,而不显示文件,输入 ls -d */
d 是只显示文件夹本身,如果不加 d 会列出文件夹里的内容
七、文件通配符
在 linux 里,为了方便访问,通常会用各种通配符,通配符 glob 就是用特殊的一些字符代表一些文件名中带有的字符串,而不代表文件内容中的字符串
1)*匹配零个或多个字符
2)?匹配任何单个字符
3)~当前用户家目录
4)~mage 用户mage家目录
5)~+当前工作目录
6)~-前一个工作目录
7)[0-9]匹配数字范围
8)[a-z]:字母
9) [A-Z]:字母
10)[wang]匹配列表中的任何的一个字符
11)[^wang]匹配列表中的所有字符以外的字符
12)预定义的字符类:man 7 glob(具体说明通过输入 man 7 glob 查看)
[:digit:]:任意数字,相当于0-9
[:lower:]:任意小写字母
[:upper:]:任意大写字母
[:alpha:]:任意大小写字母
[:alnum:]:任意数字或字母
[:blank:]:水平空白字符
[:space:]∶水平或垂直空白字符
[:punct:]∶标点符号
[:print:]:可打印字符
[:cntrl:]∶控制(非打印)字符
[:graph:]:图形字符
[:xdigit:] : 十六进制字符
具体讲解:
想要显示带 conf 结尾的文件,输入 ls /etc/*.conf,都是文件名中带有 conf
想要表示文件名只有一个字符的,输入ls ?,显示都是一个字符的文件名
再比如输入 touch 我
ls ?
显示a b c我
一般写当前目录不用~+,用.
~-可以直接切换到刚刚离开的目录下,比如输入 cd /etc/
cd /data
现在想要直接切换到 etc 下的 hosts 文件,不能直接输入 ls -/hosts,而是输入 ls ~-/hosts
在 ls 显示出的文件中想要表示 file 开头1到20之间的所有文件,输入 ls file[1..20],显示 file1和 file2,再输入 ls file[1..3],显示 file1和 file3,所以[]中表示的是中间的某一个字符,比如[137]表示的是1或者3或者7一个数字,类似 file[1..7]表示的不是范围而是1或者7
要想表示范围用-,输入 ls file[1-7],显示 file1 file2 file3 file4 file5 file6 file7
..怎么表示呢?用{},比如输入 echo {1..10}显示1 2 3 4 5 6 7 8 9 10
也可以 {a..z} 创建出 fa 到 fz 的文件,输入 touch f{a..z}
ls
也可以 {A..Z},输入 touch f{A..Z}
ls
先来删除 file 开头的文件,输入 rm -rf file*
再来输入 ls 观察更清晰
再来表示 ls f[a-d]
如图也会显示出大写字母 A、C,但是没有 D,因为顺序是小写字母->大写字母,所以截至到小写字母 d,再输入 ls f[A-D],显示结果为fA fb fB fc fC fd fD,如果只想显示大写字母 A 到 D,用到特殊关键字upper,输入 ls f[[:upper:]]显示的为 fA到fZ,[:upper:]表示的是从 A到 Z,再添加一层[],表示其中的一个,[[:upper:]] [A-Z]表示 A-Z 取一个字符。小写字母表示为[:lower:],输入ls f[[:lower:]]则显示的是从fa 到 fz。数字表示为[:digit:],输入 ls [:digit:],显示 f1 f2
[wang]显示 w a n g 四个字母中的某一个,输入 ls f[wang]显示结果fa fg fn fw
也可以排除这四个字母显示其他所有,输入 ls f[^wang]
此外也包括汉字
强调:通配符是用来匹配文件名的而不是匹配文件内容的