Linux 常见命令用法、变量及文件通配符| 学习笔记

简介: 快速学习Linux 常见命令用法、变量及文件通配符

开发者学堂课程【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,该文件包含不同文件后缀应该采用什么颜色的说明,例如下图 :存档或者压缩用明红色

image.png

将.gz   01;31修改为.gz   01;35,先存盘,退出后再进入就会显示变色


三、回顾路径

访问文件时,有两种路径,绝对路径和相对路径。相对路径相对于当前工作目录,用 pwd 查看当前目录,有些特殊情况下相对于其他目录。绝对路径带有/,相对路径带有.(当前目录)或者..(上一级目录)比如现在在 root 下,root 是在根下的一个子文件夹

上节课学到 -a 属性,

输入 ls -a 显示如图

image.png

带有.和..,这就是我们输入.或者..能够切换目录或文件夹的原因

输入 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

image.png

可以看到此处 TIME 是放在[]中,意味着可有可无

在6上输入:shutdown --help

image.png

此处 TIME未加[],意味着必须有。

所以在7上可以直接加 r 而不加时间,r 代表重启的意思,输入 shutdown -r

image.png

就会立刻重启,但是实际上我们看到是一分钟后重启,我们还可以取消它,输入 shutdown -C,就会取消

然而在6上输入 shutdown -r就会显示格式错误

所以不同版本在使用时还是有细微的差别,要注意分辨

 

六、ls 选项用法具体讲解

输入 ls  --help

所以不同版本在使用时还是有细微的差别,要注意分辨

image.png

ls 可以看作是 list,列出信息关于文件,也可以增加默认是当前文件夹的

也可以增加下列选项:

1)-a 相当于 --all,不去忽略以.开头的文件即显示以.开头的文件,而以.开头的文件相当于隐藏文件,即是显示所有。

2)-A  不显示.和..,其它的都显示

两者区别就是是否显示.和..,但是注意 A 也要显示隐藏文件,只是不显示如下图中开头的两个特殊的.和..

image.png

因为.和..一般来讲并不代表着我们真正要操作的文件,我们关心的是里面的其它文件,所以一般用 -A

image.png

3)-R   R 选项也可以选长格式 --recursive 递归的意思,递归主要对文件夹来说,在每个文件夹中可能套着子文件夹或者下下级,而默认 ls命令只显示当前指定的文件夹里的文件名,不会进入到子文件夹里。如果想要进入到每个子文件夹里,加递归操作,输入 ls -R,就会进入到每个子文件夹中访问所有数据

image.png

再来看 etc,输入 ls /etc,etc 目录下只有这些文件

image.png

当然还有很多子文件夹,如果加上 -R,输入  ls -R  /etc,如下图

会进入到更深的子文件夹中

image.png

这就是递归行为。

4)-l 选项显示的是长格式列表,默认只是显示文件名,加上 -l 会显示更详细的内容,比如文件大小、修改时间、创建时间等

image.png

-l 也可以用别名 ll 来实现,效果一样

image.png

输入 alias ll 显示 alias ll= ‘ls -l --color=auto’ 即 ll 就等于 ls -l

ll 后面也可以跟具体的一个文件,比如跟文件 anaconda-ks.cfg,只显示这一个文件的信息

输入 ll anaconda-ks.cfg,显示

image.png

默认显示当前目录全部文件信息,也可以选其中一个文件单独显示。但是如果跟的不是文件,而是一个文件夹呢?


输入 ll /etc/,显示的不是文件夹的属性,而是该文件夹下所有文件的属性。如果想要显示文件夹本身的属性,需要加上 d,比如输入 ll -d /data,显示

image.png

相当于 ls -ld /data

此外,再输入文件夹时末尾加/不加/有什么区别?比如 bin,输入 ll /bin/,显示如图,再输入 ll /bin

image.pngimage.png

之所以有区别是因为 bin 特殊,是个快捷方式,如果是普通文件夹,比如 data 加不加/则无区别。

 

5)-1选项是让显示的文件按照次序分行显示

image.png

思考是按照 ASCII 顺序吗?先来 touch 文件

输入 touch /data/F

touch/data/e

ls /data -1

image.png

如果是按照 ASCII 顺序,则 F 在前,所以不是按照 ASCII 码,就是按照普通字符顺序。以后会接触到在 Linux 配置文件中,会按照排列顺序来顺序执行程序,如果想要一个程序优先执行,需要排列在第一个

输入 touch /data/A,ls /data,显示 A 在第一个,尝试再输入 touch /data/1,ls /data,显示1在第一个,可见数字比字母优先级高。

 

6)-S选项按照大小排序

image.png

输入 ls -S 显示如图,再输入 ls -Sl 以列表形式显示

image.png

如果想从小到大排序,用 r 倒序,输入 ls -Slr 则显示倒序

如果输入 ls /data -r,显示顺序如下:

image.png

7)-t 选项按最新修改时间排序,输入 ll /data -t,可以看到最上面排列的文件是最新修改的文件

image.png

此外 cat 文件不算修改,排序不受影响

除了最新修改时间还有读时间和状态的更改时间,输入 cat /data/file6,再输入ll /data/file6最新修改时间不改变,但是读时间改变,输入 ll --time=atime /data/file6,访问时间为刚才时间。

image.png

状态时间:

每个文件分为两部分,一个是属性信息元数据,一个是文件中存放的文件内容。而属性中描述的作者、文件大小都属于元数据,如果元数据发生了变化,变化的时间就是状态的更改时间。

比如更改 root 账号的所有者,输入 chown wang /data/file6,改为 wang 所有,再输入ll /data/file6,显示文件内容未改动,输入 ll /data/file6 --time=atime 显示修改时间也未变,但是输入 ll /data/file6 --time=ctime 显示状态时间发生改变

image.png

三个时间可以用 stat 命令全部显示,输入 stat /data/file6

image.png

-t 选项按照修改时间排序,配合 lt 使用,输入 ls /data -lt

image.png

也可以加上 u,输入  ls /data -ltu,则按照访问时间来排序

image.png

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

如下图,同一类型的排在一起

image.png

11)ls 还有一个比较常用的组合写法:输入 ls,在当前目录下显示很多文件夹,想要显示文件夹,而不显示文件,输入 ls -d */

image.png

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

image.png

想要表示文件名只有一个字符的,输入ls ?,显示都是一个字符的文件名

image.png

再比如输入 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

image.png

先来删除 file 开头的文件,输入 rm -rf file*

再来输入 ls 观察更清晰

再来表示 ls f[a-d]

image.png

如图也会显示出大写字母 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]

image.png

此外也包括汉字

强调:通配符是用来匹配文件名的而不是匹配文件内容的

 

相关文章
|
2月前
|
Shell Linux C语言
【Shell 命令集合 文档编辑】Linux 在文件中查找指定的字符串 fgrep命令使用指南
【Shell 命令集合 文档编辑】Linux 在文件中查找指定的字符串 fgrep命令使用指南
46 2
|
3月前
|
存储 Shell Linux
Linux的shell命令——变量用法
Linux的shell命令——变量用法
34 0
|
4月前
|
Java Linux Shell
linux下${}、$()、$[]、$(())、[]、[[]]、(())的作用及用法说明
linux下${}、$()、$[]、$(())、[]、[[]]、(())的作用及用法说明
51 1
|
缓存 运维 Linux
Linux 常见命令用法、变量及文件通配符| 学习笔记
快速学习Linux 常见命令用法、变量及文件通配符
116 0
Linux 常见命令用法、变量及文件通配符| 学习笔记
|
Shell Linux
linux shell之替换目录下包含关键字所有文本里面的内容
linux shell之替换目录下包含关键字所有文本里面的内容
116 0
|
Linux
Linux 删除和替换文件中某些行的方法
Linux 删除和替换文件中某些行的方法
98 0
|
Linux Shell 容器
Linux unshare命名的一些例子
Linux unshare命名的一些例子
612 0
Linux unshare命名的一些例子
|
Linux Shell
linux里面的命令:./和. /(这里有空格)的区别
/  ( 直接/ ) 直接 / 表示: 根目录。 ./ ( 点号紧跟/ ) 点号紧跟/ 表示: 当前目录(相对路径的写法)。 . / ( 点号 空格 / ) 有空格的点号等同于source命令,表示在当前shell环境执行后面的命令或脚本(不加点号默认是新开一个shell执行的 例如 . /home/test.sh 等同于 source /home/test.sh。
2155 0