命令的基本格式
命令的提示符
[root@localhost ~]#
- []: 这是提示符的分隔符号,没有特殊含义
- root:显示的是当前登录用户
- @:分割符号,没有特殊含义
- localhost:当前系统的简写主机名,完整的主机名是localhost.localdomain
- ~:表示用户当前所在的目录,此例中用户当前所在的目录是家目录。
- "#":命令提示符,超级用户是#,普通用户是$
命令的基本格式
[root@localhost ~]命令 [选项] [参数]
目录操作命令
ls
描述:列出有关文件的信息(默认为当前目录)
用法:ls [选项]... [文件或目录名]...
-a --all 查看所有文件,包括隐藏文件
-A --almost-all 查看所以文件,包括隐藏文件,不打印.(当前目录)和..(上级目录cl)
-i --inode 打印文件及目录的inode
-l 使用长列表格式打印
-h --human-readable 打印文件及目录大小,以"B","K","M"的形式输出
--sl 换算单位使用1000Bytes,不是1024Bytes
-s --size 文件大小排序,以区块为单位
-S 用文件和目录的大小排序
-t 按修改时间排序,最新的优先
-C 按列列出条目
--color=[WHEN] 给输出上色,可以是never或auto
示例:
[root@iZ2zegfpsrzdbzaxddy4myZ test]# ls -l
total 4
-rw-r--r-- 1 root root 35 May 5 09:23 abc
权限 引用计数 所有者所属组 大小 文件修改时间 文件名
我们已经知道“-l”选项用于显示文件的详细信息,那么“-l”选项显示的这 7 列分别是什么含义?
- 第一列:权限。具体权限的含义将在 4.5 节中讲解。
- 第二列:引用计数。文件的引用计数代表该文件的硬链接个数,而目录的引用计数代表该目录
有多少个一级子目录。 - 第三列:所有者,也就是这个文件属于哪个用户。默认所有者是文件的建立用户
- 第四列:所属组。默认所属组是文件建立用户的有效组,一般情况下就是建立用户的所在组。
- 第五列:大小。默认单位是字节。
- 第六列:文件修改时间。文件状态修改时间或文件数据修改时间都会更改这个时间,注意这个
时间不是文件的创建时间。 - 第七列:文件名。
- 选项:是用于调整命令的功能的。
- 参数:是命令的操作对象,如果省略参数,是因为有默认参数
cd
- 命令名称:cd
- 英文愿意:change directory
- 所在路径:Shell内置命令
- 执行权限:所有用户
- 功能描述:切换所在目录
特殊符号 | 作用 |
---|---|
~ | 代表用户的家目录 |
- | 代表上次所在目录 |
. | 代表当前目录 |
.. | 代表上级所在目录 |
- 绝对路径:以根目录为参照物,从根目录开始,一级一级进入目录
- 相对路径:以当前目录作为参照物,进行目录查找
pwd
- 命令名称:pwd
- 英文愿意:print name of current/working directory
- 所在路径:/bin/pwd
- 执行权限:所有用户
- 功能描述:查询所在的工作目录,以绝对路径的形式输出
mkdir
- 命令名称:mkdir。
- 英文原意:make directories。
- 所在路径:/bin/mkdir。
- 执行权限:所有用户。
- 功能描述:创建空目录。
用法:mkdir [选项] 目录名
-p 如果存在没有错误,根据需要创建父目录
rmdir
- 命令名称:rmdir
- 英文原意:remove empty directories
- 所在路径:/bin/rmdir
- 执行权限:所有用户
- 功能描述:删除空目录
- 注意事项:该目录只能删除空目录,若目录中有文件或子目录就会报错。
rmdir [选项] 目录名
-p 递归删除目录
touch
- 命令名称:touch。
- 英文原意:change file timestamps。
- 所在路径:/bin/touch。
- 执行权限:所有用户。
- 功能描述:创建空文件或修改文件时间
用法:touch [目录名]
文件操作命令
stat
stat 是查看文件详细信息的命令,而且可以看到文件的这三个时间,其基本信息如下。
- 命令名称:stat。
- 英文原意:display file or file system status。
- 所在路径:/usr/bin/stat。
- 执行权限:所有用户。
- 功能描述:显示文件或文件系统的详细信息。
cat
- 英文原意:concatenate files and print on the standard output。
- 所在路径:/bin/cat。
- 执行权限:所有用户。
- 功能描述:合并文件并打印输出到标准输出
用法:cat [选项] 文件名
-A 列出所有隐藏符号
-E 列出每行结尾的回车符$
-n 显示行号
-T 把Tab键用^显示出来
-v 列出特殊字符
more
- 命令名称:more。
- 英文原意:file perusal filter for crt viewin。
- 所在路径:/bin/more。
- 执行权限:所有用户。
- 功能描述:分屏显示文件内容。
用法:more [选项] 文件
-d 显示帮助,而不是响铃
-f 统计逻辑行数而不是屏幕行数
-l 抑制换页(form feed)后的暂停
-p 不滚屏,清屏并显示文本
-c 不滚屏,显示文本并清理行尾
-u 抑制下划线
-s 将多个空行压缩为一行
-NUM 指定每屏显示的行数为 NUM
+NUM 从文件第 NUM 行开始显示
+/STRING 从匹配搜索字符串 STRING 的文件位置开始显示
-V 输出版本信息并退出
df
- 命令名称:df
- 所在路径:/user/bin
- 执行权限:所有用户
- 功能描述:查看文件系统信息
用法:df [选项].. [文件]..
-a 显示特殊文件系统,这些文件系统都是保存在内存中的。
-h 以 1024 为基底显示大小(例如:1023M)
-T 显示文件系统类型
du
- 命令名称:du
- 所在路径:/user/bin
- 执行权限:所有用户
- 功能描述:计算每个文件的磁盘用量,目录则取总用量
- 注意事项:du与df的区别:du是用于统计文件大小的,统计的文件大小是准确的,df是用于统计空间大小的,统计的剩余空间是准确的。
用法:du [选项]... [文件]...
-s --summarize 统计总占用量,不列出子目录和子文件占用量。
-h --human-readable 以人类可读的格式输出大小(例如,1K 234M 2G)
-a --all 输出所有文件的磁盘用量,不仅仅是目录
fsck
- 命令名称:fsck
- 所在路径:/user/sbin
- 执行权限:超级用户
- 功能描述:检查并修复 Linux 文件系统
- 注意事项:默认系统卡机自动执行,一般不需要自己执行该命令。
用法:fsck [选项] -- [文件系统选项] [<文件系统> ...]
dumpe2fs
- 命令名称:dumpe2fs
- 所在路径:/user/sbin
- 执行权限:超级用户
- 功能描述:查看磁盘状态
用法:dump2fs选项
-h 只查看超级块信息
示例:
file
- 命令名称:file
- 所在路径:/user/bin
- 执行权限:普通用户
- 功能描述:查看文件类型
用法:file选项
示例:
type
- 命令名称:type
- 所在路径:/user/bin
- 执行权限:普通用户
- 功能描述:查看命令类型
用法:type选项
-a 显示所有包含名称为 NAME 的可执行文件的位置;包括别名、内建和函数。仅当 `-p' 选项没有使用时
-f 抑制 shell 函数查询
-P 为每个 NAME 名称惊醒 PATH 路径搜索,即使它是别名、内建或函数,并且返回将被执行的磁盘上文件的名称。
-p 返回将被执行的磁盘上文件的名称,或者当 `type -t NAME'不返回 `file' 时,不返回任何值。
-t 返回下列词中的任何一个 `alias'、`keyword'、`function'、`builtin'、`file' 或者 `',相应地如果 NAME 是一个别名、shell 保留字、shell 函数、shell 内建、磁盘文件或没有找到。
示例:
less
- 命令名称:less
- 英文原意:opposite of more
- 所在路径:/user/bin/less
- 执行权限:普通用户
- 功能描述:分行显示文件内容
- 注意事项:less和more类似,只是more是分屏显示,而less是分行显示
用法:more[选项]文件...
head
- 命令名称:head
- 英文原意:output the first part of files
- 所在路径:/user/bin/head
- 执行权限:普通用户
- 功能描述:显示文件开头的内容
用法:head[选项]文件...
-n --lines=[行数] 从文件开头开始,显示指定行数。
-v --verbose 显示文件名
tail
- 命令名称:tail
- 英文原意:output the last part of files
- 所在路径:/user/bin/tail
- 执行权限:普通用户
- 功能描述:显示文件结尾的内容
用法:tail[选项]文件...
-n --lines=K 从文件结尾开始, 显示指定行数
-f --follow[={name|descriptor}] 监听文件的新增内容,tail默认跟随文件描述符,这意味着即使重命名了带有tail的文件,
tail也将继续跟踪它的结尾。这种默认行为不是我们想要的,当你真的想跟踪文件的实际名称,
而不是文件描述符(例如,日志旋转)时可以。在这种情况下,使用——follow=name。这将导致
tail以某种方式跟踪指定的文件,它适用于重命名、删除和创建。
-c --bytes=K 从文件结尾开始,输出几个字节的数据。
ln
- 命令名称:ln
- 英文原意:make links between file
- 所在路径:/bin/ln
- 执行权限:普通用户
- 功能描述:在文件之间建立链接
- 注意事项:建立文件之间的链接要使用绝对路径,原因:见以下 "错误示例"
用法:ln选项[目标文件]
-s --symbolic 创建软连接文件
-f --force 若链接文件存在,删除目标文件再创建链接
示例:
- 创建一个文件的硬链接:
- 创建一个文件的软链接:
创建链接错误示例:
- 创建一个123文件,随便写几行数据。
- 在当前目录下创建一个testln目录,用于存放链接文件。
- 创建软链接:
以上是创建软链接的错误示例,当使用相对路径创建软链接后,会发现软链接指向的源文件找不到。
创建链接正确示例:
- 创建一个123文件,随便写几行数据。
- 在当前目录下创建一个testln目录,用于存放链接文件。
- 创建软连接:
硬链接与软链接的特征
硬链接特征:
- 源文件和硬链接文件拥有相同的Inode和Block
- 任意修改一个文件,另一个都改变
- 删除任意一个文件,另一个都可以使用
- 硬链接标记不清,很难确认硬链接文件位置,不建议使用
- 硬链接不能链接目录
- 硬链接不能跨分区
软链接特征:
- 软链接和源文件拥有不同的Inode和Block
- 两个文件修改任意一个,另一个都改变
- 删除软链接文件,源文件不受影响;删除源文件软链接不能使用
- 软链接没有实际数据,只保存源文件的Inode,不论源文件多大,软链接大小不变
- 软链接的权限是最大权限lrwxrwxrwx,但由于没有实际数据,最终访问时需要参考源文件权限
- 软链接可以链接目录
- 软链接可以跨分区
- 软链接特征明显,建议使用软链接
目录和文件都能操作的命令
rm
- 命令名称:rm
- 英文原意:remove files or directories
- 所在路径:/bin/rm
- 执行权限:普通用户
- 功能描述:删除文件或目录
- 注意事项:慎用
用法:rm[选项]文件或目录...
-f --force 删除目录或文件不提示(强制删除)
-i 交互删除
-r --recursive 递归删除目录及其内容
cp
- 命令名称:cp
- 英文原意:copy files and directories
- 所在路径:/bin/cp
- 执行权限:普通用户
- 功能描述:复制文件和目录
用法:cp[选项]源文件 目标文件
-a 相当于-dpr选项的集合
-d 如果源文件为软链接(对硬链接无效),则复制出的目标文件也为软链接
-i 询问,如果文件已经存在,则会询问是否覆盖
-p 复制后目标文件保留源文件的属性(包括所有者、所属组、权限和时间)
-r 递归复制
mv
- 命令名称:mv
- 英文原意:move(rname) files
- 所在路径:/bin/mv
- 执行权限:普通用户
- 功能描述:移动文件或改名
用法:mv [选项] 源文件 目标文件
-f --force 不提示,强制覆盖,若目标文件已经存在
-i --interactive 覆盖文件前,交互提示
-v --verbose 输出详细信息
基本权限管理
权限的介绍
权限位的含义
上面介绍ls命令时,我们已经知道长格式显示的第一列就是文件的权限,例如:
[root@localhost ~]# ls -l install.log
-rw-r--r--. 1 root root 24772 1 月 14 18:17 install.log
第一列的权限位如果不计算最后的“.”(这个点的含义我们在后面解释),则共有 10 位,这 10位权限位的含义如图 4-4 所示。
第 1 位代表文件类型。Linux 不像 Windows 使用扩展名表示文件类型,而是使用权限位的第1位表示文件类型。虽然 Linux 文件的种类不像 Windows 中那么多,但是分类也不少,详细情况可以使用“info ls”命令查看。以下是一些常见的文件类型。
- “-”:普通文件。
- “b”:块设备文件。这是一种特殊设备文件,存储设备都是这种文件,如分区文件/dev/sda1
就是这种文件。 - “c”:字符设备文件。这也是特殊设备文件,输入设备一般都是这种文件,如鼠标、键盘
等。 - “d”:目录文件。Linux 中一切皆文件,所以目录也是文件的一种。
- “l”:软链接文件。
- “p”:管道符文件。这是一种非常少见的特殊设备文件。
- “s”:套接字文件。这也是一种特殊设备文件,一些服务支持 Socket 访问,就会产生这样
的文件。 - 第 2~4 位代表文件所有者的权限。
- r:代表 read,是读取权限。
- w:代表 write,是写权限。
- x:代表 execute,是执行权限。
如果有字母,则代表拥有对应的权限;如果是“-”,则代表没有对应的权限。 - 第 5~7 位代表文件所属组的权限,同样拥有“rwx”权限。
- 第 8~10 位代表其他人的权限,同样拥有“rwx”权限。
基本权限命令
首先来看修改权限的命令 chmod,其基本信息如下。
- 命令名称:chmod
- 英文原意:change file mode bits
- 所在路径:/bin/chmod
- 执行权限:所有用户。
- 功能描述:修改文件的权限模式。
用法:chmod [选项] 权限模式 文件名
权限模式
chmod 命令的权限模式的格式是“ugoa[perms]]”,也就是“用户身份[权限]]”的格式,我们来解释一下。
用户身份。
- u:代表所有者(user)
- g:代表所属组(group)
- o:代表其他人(other)
- a:代表全部身份(all)
赋予方式。
- +:加入权限
- -:减去权限
- =:设置权限
权限
- r:读取权限(read)
- w:写权限(write)
- x:执行权限(execute)
数字权限
数字权限的赋予方式是最简单的,但是不如之前的字母权限好记、直观。我们来看看这些数字权限的含义。
- 4:代表“r”权限。
- 2:代表“w”权限。
- 1:代表“x”权限
常用权限
数字权限的赋予方式更加简单,但是需要用户对这几个数字更加熟悉。其实常用权限也并不多,
只有如下几个。
- 644:这是文件的基本权限,代表所有者拥有读、写权限,而所属组和其他人拥有只读权限。
- 755:这是文件的执行权限和目录的基本权限,代表所有者拥有读、写和执行权限,而所属组和其他人拥有读和执行权限。
- 777:这是最大权限。在实际的生产服务器中,要尽力避免给文件或目录赋予这样的权限,这会造成一定的安全隐患。
基本权限的作用
权限含义的解释
首先,读、写、执行权限对文件和目录的作用是不同的。
权限对文件的作用
- 读(r):对文件有读(r)权限,代表可以读取文件中的数据。如果把权限对应到命令上,那么一旦对文件有读(r)权限,就可以对文件执行 cat、more、less、head、tail 等文件查看命令。
- 写(w):对文件有写(w)权限,代表可以修改文件中的数据。如果把权限对应到命令上,那么一旦对文件有写(w)权限,就可以对文件执行 vim、echo 等修改文件数据的命令。注意:对文件有写权限,是不能删除文件本身的,只能修改文件中的数据。如果要想删除文件,则需要对文件的上级目录拥有写权限。
- 执行(x):对文件有执行(x)权限,代表文件拥有了执行权限,可以运行。在 Linux 中,只要文件有执行(x)权限,这个文件就是执行文件了。只是这个文件到底能不能正确执行,不仅需要执行(x)权限,还要看文件中的代码是不是正确的语言代码。对文件来说,执行(x)权限是最高权限。
权限对目录的作用
- 读(r):对目录有读(r)权限,代表可以查看目录下的内容,也就是可以查看目录下有哪些子文件和子目录。如果把权限对应到命令上,那么一旦对目录拥有了读(r)权限,就可以在目录下执行 ls 命令,查看目录下的内容了。
- 写(w):对目录有写(r)权限,代表可以修改目录下的数据,也就是可以在目录中新建、删除、复制、剪切子文件或子目录。如果把权限对应到命令上,那么一旦对目录拥有了写(w)权限,就可以在目录下执行 touch、rm、cp、mv 命令。对目录来说,写(w)权限是最高权限。
- 执行(x):目录是不能运行的,那么对目录拥有执行(x)权限,代表可以进入目录。如果把权限对应到命令上,那么一旦对目录拥有了执行(x)权限,就可以对目录执行 cd 命令,进入目录。
目录的可用权限
目录的可用权限其实只有以下几个
- 0:任何权限都不赋予。
- 5:基本的目录浏览和进入权限。
- 7:完全权限。
所有者和所属组命令
chown命令
chown是修改文件和目录的所有者和所属组的命令,其基本信息如下。
- 命令名称:chown
- 英文原意:change file owner and group
- 所在路径:/bin/chown
- 执行权限:所有用户
- 功能描述:修改文件和目录的所有者和所属组
用法:chown [选项] 所有者:所属组 文件或目录
-R 递归设置权限,也就是给子目录中的所有文件设置权限
普通用户不能修改文件的所有者,哪怕自己是这个文件的所有者也不行。
普通用户可以修改所有者是自己的文件的权限。
chgrp命令
chgrp 是修改文件和目录的所属组的命令,其基本信息如下
- 命令名称:chgrp
- 英文原意:change group ownership
- 所在路径:/bin/chgrp
- 执行权限:所有用户
- 功能描述:修改文件和目录的所属组
umask 默认权限
查看系统的 umask 权限
[root@localhost ~]# umask
0022
#用八进制数值显示 umask 权限
[root@localhost ~]# umask -S
u=rwx,g=rx,o=rx
#用字母表示文件和目录的初始权限
umask权限的计算方法
我们需要先了解一下新建文件和目录的默认最大权限。
- 对文件来讲,新建文件的默认最大权限是 666,没有执行(x)权限。这是因为执行权限对文件来讲比较危险,不能在新建文件的时候默认赋予,而必须通过用户手工赋予。
- 对目录来讲,新建目录的默认最大权限是 777。这是因为对目录而言,执行(x)权限仅仅代表进入目录,所以即使建立新文件时直接默认赋予,也没有什么危险。按照官方的标准算法,umask 默认权限需要使用二进制进行逻辑与和逻辑非联合运算才可以得到正确的新建文件和目录的默认权限。这种方法既不好计算,也不好理解,所以并不推荐。我们在这里还是按照权限字母来讲解 umask 权限的计算方法。我们就按照默认的 umask 值是 022来分别计算一下新建文件和目录的默认权限吧。
- 文件的默认权限最大只能是 666,而 umask 的值是 022“-rw-rw-rw-”减去 “-----w--w-”等于“-rw-r--r—”
- 目录的默认权限最大可以是 777,而 umask 的值是 022“drwxrwxrwx”减去“d----w--w-”等于“drwx-r-xr-x”
注意:umask 默认权限的计算绝不是数字直接相减。
例如 umask 是 033 呢?
- 文件的默认权限最大只能是 666,而 umask 的值是 033“-rw-rw-rw-”减去“-----wx-wx”等于“-rw-r--r—”
帮助命令
man 命令
man 是最常见的帮助命令,也是 Linux 最主要的帮助命令,其基本信息如下。
- 命令名称:man
- 英文原意:format and display the on-line manual pages
- 所在路径:/usr/bin/man
- 执行权限:所有用户
- 功能描述:显示联机帮助手册
用法:man [选项] 命令
-f 查看命令拥有哪个级别的帮助
-k 查看和命令相关的所有帮助
man命令的快捷键
快 捷 键 | 作 用 |
---|---|
上箭头 | 向上移动一行 |
下箭头 | 向下移动一行 |
PgUp | 向上翻一页 |
PgDn | 向下翻一页 |
g | 移动到第一页 |
G | 移动到最后一页 |
/字符串 | 从当前页向下搜索字符串 |
?字符串 | 从当前页向上搜索字符串 |
n | 当搜索字符串时,可以使用 n 键找到下一个字符串 |
N | 当搜索字符串时,使用 N 键反向查询字符串。也就是说,如果使用“/字符串”方式搜索,则 N 键表示向上搜索字符串;如果使用“?字符串”方式搜索,则 N 键表示向下搜索字符串 |
man 命令的帮助级别
- man -f 命令 或 whatis 命令,查看命令拥有哪个级别的帮助
- man -k 命令 或 apropos 命令,查看和命令相关的所有帮助
info命令
info 命令的帮助信息是一套完整的资料,每个单独命令的帮助信息只是这套完整资料中的某一个小章节。
快 捷 键 | 作 用 |
---|---|
上箭头 | 向上移动一行 |
下箭头 | 向下移动一行 |
PgUp | 向上翻一页 |
PgDn | 向下翻一页 |
Tab | 在有“*”符号的节点间进行切换 |
回车 | 进入有“*”符号的子页面,查看详细帮助信息 |
u | 进入上一层信息(回车是进入下一层信息) |
n | 进入下一小节信息 |
p | 进入上一小节信息 |
? | 查看帮助信息 |
q | 退出 info 信息 |
help 命令
help 只能获取 Shell 内置命令的帮助,help 命令的基本信息如下。
- 命令名称:help。
- 英文原意:help。
- 所在路径:Shell 内置命令。
- 执行权限:所有用户。
- 功能描述:显示 Shell 内置命令的帮助。可以使用 type 命令来区分内置命令与外部命令shell 是 Linux 的命令解释器。
--help 选项
绝大多数命令都可以使用“--help”选项来查看帮助,这也是一种获取帮助的方法。例如:
[root@localhost ~]# ls --help
这种方法非常简单,输出的帮助信息基本上是 man 命令的信息简要版。对于这 4 种常见的获取帮助的方法,大家可以按照自己的习惯任意使用。
搜索命令
whereis 命令
whereis 是搜索系统命令的命令(像绕口令一样),也就是说,whereis 命令不能搜索普通文件,
而只能搜索系统命令。whereis 命令的基本信息如下。
- 命令名称:whereis。
- 英文原意:locate the binary, source, and manual page files for a command。
- 所在路径:/usr/bin/whereis。
- 执行权限:所有用户。
- 功能描述:查找二进制命令、源文件和帮助文档的命令。
用法:whereis [选项]文件(命令)..
-b 只搜索二进制文件
-B 定义二进制查找路径
-m 只搜索手册
-M 定义查找路径
-s 只搜索源代码
-S 定义源查找路径
-f terminate 参数列表
-u 搜索不寻常的条目
-l 输出有效的查找路径
which 命令
which 也是搜索系统命令的命令。和 whereis 命令的区别在于:
- whereis 命令可以在查找到二进制命令的同时,查找到帮助文档的位置;
- 而 which 命令在查找到二进制命令的同时,如果这个命令有别名,则还可以找到别名命令。
which 命令的基本信息如下:
- 命令名称:which
- 英文原意:shows the full path of (shell) commands
- 所在路径:/usr/bin/which
- 执行权限:所有用户
- 功能描述:列出命令的所在路径
locate 命令
基本用法
locate 命令才是可以按照文件名搜索普通文件的命令
- 优点:按照数据库搜索,搜索速度快,消耗资源小。数据库置/var/lib/mlocate/mlocate.db,可以使用 updatedb 命令强制更新数据库。
- 缺点:只能按照文件名来搜索文件,而不能执行更复杂的搜索,比如按照权限、大小、修改时间等搜索文件
locate 命令的基本信息如下。
- 命令名称:locate
- 英文原意:find files by name
- 所在路径:/usr/bin/locate
- 执行权限:所有用户
- 功能描述:按照文件名搜索文件
配置文件相关
[root@localhost ~]# vi /etc/updatedb.conf
PRUNE_BIND_MOUNTS = "yes"
#开启搜索限制,也就是让这个配置文件生效
PRUNEFS = "……"
#在 locate 执行搜索时,禁止搜索这些文件系统类型
PRUNENAMES = "……"
#在 locate 执行搜索时,禁止搜索带有这些扩展名的文件
PRUNEPATHS = "……"
#在 locate 执行搜索时,禁止搜索这些系统目录
find命令
- 命令名称:find
- 英文原意:search for files in a directory hierarchy
- 所在路径:/bin/find
- 执行权限:所有用户
- 功能描述:在目录中搜索文件
按照文件名搜索
[root@localhost ~]# find 搜索路径 [选项] 搜索内容
选项:
-name: 按照文件名搜索
-iname: 按照文件名搜索,不区分文件名大小写
-inum: 按照 inode 号搜索
按照文件大小搜索
[root@localhost ~]# find 搜索路径 [选项] 搜索内容
选项:
-size [+|-]大小: 按照指定大小搜索文件
这里的“+”的意思是搜索比指定大小还要大的文件,“-”的意思是搜索比指定大小还要小的文件
find 命令的单位
[root@localhost ~]# man find
-size n[cwbkMG]
File uses n units of space. The following suffixes can be used:
'b' for 512-byte blocks (this is the default if no suffix is used)
#这是默认单位,如果单位为 b 或不写单位,则按照 512 Byte 搜索
'c' for bytes
#搜索单位是 c,按照字节搜索
'w' for two-byte words
#搜索单位是 w,按照双字节(中文)搜索
'k' for Kilobytes (units of 1024 bytes)
#按照 KB 单位搜索,必须是小写的 k
'M' for Megabytes (units of 1048576 bytes)
#按照 MB 单位搜索,必须是大写的 M
'G' for Gigabytes (units of 1073741824 bytes)
#按照 GB 单位搜索,必须是大写的 G
按照修改时间搜索
Linux 中的文件有访问时间(atime)、数据修改时间(mtime)、状态修改时间(ctime)这三个时间,我们可以按照时间来搜索文件。
[root@localhost ~]# find 搜索路径 [选项] 搜索内容
-atime [+|-]时间 按照文件访问时间搜索
-mtime [+|-]时间 按照文件数据修改时间搜索
-ctime [+|-]时间 按照文件状态修改时间搜索
这三个时间的区别我们在 stat 命令中已经解释过了,这里用 mtime 数据修改时间来举例,重点说说“[+-]”时间的含义。
- -5:代表 5 天内修改的文件
- 5:代表前 5~6 天那一天修改的文件
- +5:代表 6 天前修改的文件
如图所示
按照权限搜索
命令格式
[root@localhost ~]# find 搜索路径 [选项] 搜索内容
选项:
-perm 权限模式: 查找文件权限刚好等于“权限模式”的文件
-perm -权限模式:查找文件权限全部包含“权限模式”的文件
-perm +权限模式:查找文件权限包含“权限模式”的任意一个权限的文件
按照所有者和所属组搜索
[root@localhost ~]# find 搜索路径 [选项] 搜索内容
选项:
-uid 用户ID 按照用户 ID 查找所有者是指定 ID 的文件
-gid 组ID 按照用户组 ID 查找所属组是指定 ID 的文件
-user 用户名 按照用户名查找所有者是指定用户的文件
-group 组名 按照组名查找所属组是指定用户组的文件
-nouser 查找没有所有者的文件
按照所有者和所属组搜索时,“-nouser”选项比较常用,主要用于查找垃圾文件。只有一种情况例外,那就是外来文件。比如光盘和 U 盘中的文件如果是由 Windows 复制的,在Linux 中查看就是没有所有者的文件;再比如手工源码包安装的文件,也有可能没有所有者
按照文件类型搜索
[root@localhost ~]# find 搜索路径 [选项] 搜索内容
选项:
-type d: 查找目录
-type f: 查找普通文件
-type l: 查找软链接文件
逻辑运算符
[root@localhost ~]# find 搜索路径 [选项] 搜索内容
选项:
-a and 逻辑与
-o or 逻辑或
-not not 逻辑非
-a:and 逻辑与
find 命令也支持逻辑运算符选项,其中-a 代表逻辑与运算,也就是-a 的两个条件都成立,find 搜索的结果才成立,示例:
[root@localhost ~]# find . -size +2k -a -type f
#在当前目录下搜索大于 2KB,并且文件类型是普通文件的文件
-o:or 逻辑或
-o 选项代表逻辑或运算,也就是-o 的两个条件只要其中一个成立,find 命令就可以找到结果,示例:
[root@localhost ~]# find . -name cangls -o -name bols
./cangls
./bols
#在当前目录下搜索文件名要么是 cangls 的文件,要么是 bols 的文件
-not:not 逻辑非
-not 是逻辑非,也就是取反的意思,示例:
[root@localhost ~]# find . -not -name cangls
#在当前目录下搜索文件名不是 cangls 的文件
其他选项
-exec选项
[root@localhost ~]# find 搜索路径 [选项] 搜索内容 -exec 命令 2 {} \;
这个选项的作用其实是把 find 命令的结果交给由“-exec”调用的命令 2 来处理。“{}”就代表 find 命令的查找结果
-ok 选项
“-ok”选项和“-exec”选项的作用基本一致,区别在于:“-exec”的命令 2 会直接处理,而不询
问;“-ok”的命令 2 在处理前会先询问用户是否这样处理,在得到确认命令后,才会执行。
grep命令
grep 的作用是在文件中提取和匹配符合条件的字符串行,命令格式如下:
[root@localhost ~]# grep [选项] "搜索内容" 文件名
-i 忽略大小写
-n 输出行号
-v 反向查找
--color=auto 搜索出的关键字用颜色显示
find 也是搜索命令,那么 find 命令和 grep 命令有什么区别呢?
find命令
find 命令用于在系统中搜索符合条件的文件名,如果需要模糊查询,则使用通配符进行匹配,通配符是完全匹配(find 命令可以通过-regex 选项,把匹配规则转为正则表达式规则,但是不建议如此)
grep 命令
grep 命令用于在文件中搜索符合条件的字符串,如果需要模糊查询,则使用正则表达式进行匹配,
正则表达式是包含匹配
通配符与正则表达式的区别
通配符:用于匹配文件名,完全匹配
通 配 符 | 作 用 |
---|---|
? | 匹配一个任意字符 |
* | 匹配 0 个或任意多个任意字符,也就是可以匹配任何内容 |
[] | 匹配中括号中任意一个字符。例如,[abc]代表一定匹配一个字符,或者是 a,或者是 b,或者是 c |
[-] | 匹配中括号中任意一个字符,-代表一个范围。例如,[a-z]代表匹配一个小写字母 |
[^] | 逻辑非,表示匹配不是中括号内的一个字符。例如,1代表匹配一个不是数字的字符 |
正则表达式:用于匹配字符串,包含匹配
正 则 符 | 作 用 |
---|---|
? | 匹配前一个字符重复 0 次,或 1 次(?是扩展正则,需要使用 egrep 命令) |
* | 匹配前一个字符重复 0 次,或任意多次 |
[] | 匹配中括号中任意一个字符。例如,[abc]代表一定匹配一个字符,或者是 a,或者是 b,或者是 c |
[-] | 匹配中括号中任意一个字符,-代表一个范围。例如,[a-z]代表匹配一个小写字母 |
[^] | 逻辑非,表示匹配不是中括号内的一个字符。例如,1代表匹配一个不是数字的字符 |
^ | 匹配行首 |
$ | 匹配行尾 |
管道符:补充命令
命令格式: 命令1 | 命令2
命令 1 的正确输出作为命令 2 的操作对象
示例1:
我们经常需要使用“ll”命令查看文件的长格式,不过在有些目录中文件众多,比如/etc/目录,使用“ll”命令显示的内容就会非常多,只能看到最后的内容,而不能看到前面输出的内容。这时我们马上想到 more 命令可以分屏显示文件内容,可是怎么让 more 命令分屏显示命令的输出呢?我想到了一种笨办法:
[root@localhost ~]# ll -a /etc/ > /root/testfile
#用输出重定向,把 ll 命令的输出保存到/root/testfile 文件中
[root@localhost ~]# more /root/testfile
#既然 testfile 是文件,当然可以用 more 命令分屏显示了
总用量 1784
drwxr-xr-x. 105 root root 12288 10 月 21 12:49 .
dr-xr-xr-x. 26 root root 4096 6 月 5 19:06 ..
…省略部分输出…
-rwxr-xr-x. 1 root root 687 6 月 22 2012 auto.smb
--More--(7%)
可是这样操作实在不方便,这时就可以利用管道符了。命令如下:
[root@localhost ~]# ll -a /etc/ | more
示例2:
我想用命令ll,在/etc/的结果中搜索 yum 的文件名,应该使用 find 命令?还是 grep 命令?
[root@localhost ~]# ll -a /etc/ | grep yum
示例3
netstat 命令(CentOS 7 中,需要安装 net-snmp.x86_64,net-tools.x86_64 两个包才有此命令。7.5
系统中已经自动安装)格式如下
[root@localhost ~]# netstat [选项]
选项:
-a: 列出所有网络状态,包括 Socket 程序
-c: 秒数: 指定每隔几秒刷新一次网络状态
-n: 使用 IP 地址和端口号显示,不使用域名与服务名
-p: 显示 PID 和程序名
-t: 显示使用 TCP 协议端口的连接状况
-u: 显示使用 UDP 协议端口的连接状况
-l: 仅显示监听状态的连接
-r: 显示路由表
[root@localhost ~]# netstat -an | grep "ESTABLISHED" | wc -l
#如果想知道具体的网络连接数量,就可以再使用 wc 命令统计行数
命令的别名
用于给命令起别名
命令格式:alias [-p] [name[=value] ... ]
查询命令别名:
alias
设定命令别名:
alias 别名='原命令'
示例:
alias ll='ls -ail' #用ll别名,替代ls -ail命令
压缩和解压缩命令
在 Linux 中可以识别的常见压缩格式有十几种,比如“.zip”“.gz”“.bz2”“.tar”“.tar.gz”“.tar.bz2”等
zip格式
“.zip”是 Windows 中最常用的压缩格式,Linux 也可以正确识别“.zip”格式,这可以方便地和Windows 系统通用压缩文件
zip格式压缩命令
- 命令名称:zip
- 英文原意:package and compress (archive) files
- 所在路径:/usr/bin/zip
- 执行权限:所有用户
- 功能描述:压缩文件或目录
命令格式:zip [选项] 压缩包名 源文件或源目录
-r 压缩目录
示例:
[root@localhost ~]# zip ana.zip anaconda-ks.cfg
zip格式解压缩命令
- 命令名称:unzip
- 英文原意:list, test and extract compressed files in a ZIP archive
- 所在路径:/usr/bin/unzip
- 执行权限:所有用户
- 功能描述:列表、测试和提取压缩文件中的文件
命令格式:unzip [选项] 压缩包名
-d 指定压缩位置
示例:
[root@localhost ~]# unzip -d /tmp/ ana.zip
#把压缩包解压到指定位置
gz格式
gz格式的压缩命令
- 命令名称:gzip。
- 英文原意:compress or expand files。
- 所在路径:/bin/gzip。
- 执行权限:所有用户。
功能描述:压缩文件或目录。
[root@localhost ~]# gzip [选项] 源文件 选项: -c 将压缩数据输出到标准输出中,可以用于保留源文件 -d 解压缩 -r 压缩目录
示例:
[root@localhost ~]# gzip -c anaconda-ks.cfg > anaconda-ks.cfg.gz
#使用-c 选项,但是不让压缩数据输出到屏幕上,而是重定向到压缩文件中
#这样可以在压缩文件的同时不删除源文件
gz格式的解压缩命令
如果要解压缩“.gz”格式,那么使用“gzip -d 压缩包”和“gunzip 压缩包”命令都可以。我们
先看看 gunzip 命令的基本信息。
命令名称:gunzip。
- 英文原意:compress or expand files。
- 所在路径:/bin/gunzip。
- 执行权限:所有用户。
- 功能描述:解压缩文件或目录。
示例:
[root@localhost ~]# gunzip install.log.gz
[root@localhost ~]# gzip -d anaconda-ks.cfg.gz
- 0-9 ↩
**粗体** _斜体_ [链接](http://example.com) `代码` - 列表 > 引用
。你还可以使用@
来通知其他用户。