Linux命令

一、命令的基本格式

1.命令提示符

[root@localhost ~]#
  • []:这是提示符的分隔符号,没有特殊含义。
  • root:显示的是当前的登录用户,当前使用的是root用户登录。
  • @:分隔符号,没有特殊含义。
  • localhost:当前系统的简写主机名。
  • ~:代表用户当前所在的目录,此例中用户当前所在的目录是家目录。
  • #:命令提示符。超级用户是#,普通用户是$。

2.命令的基本格式

[root@localhost ~]# 命令 [选项] [参数]
  • 选项:用于调整命令的功能。
  • 参数:是命令的操作对象,如果省略参数,是因为有默认参数。

二、目录操作命令

ls命令

ls是最常见的目录操作命令,主要作用是显示目录下的内容。

  • 命令名称:ls。
  • 英文原意:list。
  • 所在路径:/bin/ls。
  • 执行权限:所有用户。
  • 功能描述:显示目录下的内容。
[root@localhost ~]#ls [选项] [文件名或目录名]
选项:
-a: 显示所有文件
-d: 显示目录信息,而不是目录下的文件
-h: 人性化显示,按照我们习惯的单位显示文件大小
-i: 显示文件的i节点号
-l: 长格式显示
--color=when: 支持颜色输出,when的值默认是always(总显示颜色),也可以是never(从不显示颜色)和auto(自动)

举例:

[root@localhost ~]# ls -l
总用量 44
-rw-------. 1 root root 1207 114 18:18 anaconda-ks.cfg

我们已经知道“-l”选项用于显示文件的详细信息,那么“-l”选项显示的这7列分别是什么含义?

第一列:权限。之后几期再讲。 第二列:引用计数。文件的引用计数代表该文件的硬链接个数,而目录的引用计数代表该目录有多少个一级子目录。 第三列:所有者,也就是这个文件属于哪个用户。默认所有者是文件的建立用户 第四列:所属组。默认所属组是文件建立用户的有效组,一般情况下就是建立用户的所在组。 第五列:大小。默认单位是字节。 第六列:文件修改时间。文件状态修改时间或文件数据修改时间都会更改这个时间,注意这个时间不是文件的创建时间。 第七列:文件名。

cd命令

cd是切换所在目录的命令,这个命令的基本信息如下。

  • 命令名称:cd。
  • 英文原意:change directory。
  • 所在路径:Shell内置命令。
  • 执行权限:所有用户。
  • 功能描述:切换所在目录。
cd命令简化用法作用
cd ~前往用户的家目录
cd -前往上次所在目录
cd .前往当前目录
cd ..前往上级目录

绝对路径:以根目录为参照物,从根目录开始,一级一级进入目录。

相对路径:以当前目录作为参照物,进行目录查找。

pwd命令

pwd命令是查询所在目录的命令,基本信息如下。

  • 命令名称:pwd
  • 英文原意:print name of current/working directory
  • 所在路径:/bin/pwd
  • 执行权限:所有用户。
  • 功能描述:查询所在的工作目录。

mkdir命令

mkdir是创建目录的命令,其基本信息如下。

  • 命令名称:mkdir。
  • 英文原意:make directories。
  • 所在路径:/bin/mkdir。
  • 执行权限:所有用户。
  • 功能描述:创建空目录。
[root@localhost ~]# mkdir [选项] 目录名
选项:
-p: 递归建立所需目录

rmdir命令

既然有建立目录的命令,就一定会有删除目录的命令rmdir,其基本信息如下。

  • 命令名称:rmdir。
  • 英文原意:remove empty directories。
  • 所在路径:/bin/rmdir。
  • 执行权限:所有用户。
  • 功能描述:删除空目录。
[root@localhost ~]# rmdir [选项] 目录名
选项:
-p: 递归删除目录

rmdir命令的作用十分有限,因为只能删除空目录,所以一旦目录中有内容,就会报错。这个命令比较“笨”,所以不太常用。后续不论删除的是文件还是目录,都会使用rm命令。

三、文件操作命令

touch命令

创建空文件或修改文件时间,这个命令的基本信息如下。

  • 命令名称:touch。
  • 英文原意:change file timestamps。
  • 所在路径:/bin/touch。
  • 执行权限:所有用户。
  • 功能描述:修改文件的时间戳。

stat命令

stat是查看文件详细信息的命令,而且可以看到文件的这三个时间,其基本信息如下。

  • 命令名称:stat。
  • 英文原意:display file or file system status。
  • 所在路径:/usr/bin/stat。
  • 执行权限:所有用户。
  • 功能描述:显示文件或文件系统的详细信息。

cat命令

cat命令用来查看文件内容。这个命令的基本信息如下。

  • 命令名称:cat。
  • 英文原意:concatenate files and print on the standard output。
  • 所在路径:/bin/cat。
  • 执行权限:所有用户。
  • 功能描述:合并文件并打印输出到标准输出
[root@localhost ~]# cat [选项] 文件名
选项:
-A: 相当于-vET选项的整合,用于列出所有隐藏符号
-E: 列出每行结尾的回车符$
-n: 显示行号
-T: 把Tab键用^I显示出来
-v: 列出特殊字符

more命令

more是分屏显示文件的命令,其基本信息如下。

  • 命令名称:more。
  • 英文原意:file perusal filter for crt viewin。
  • 所在路径:/bin/more。
  • 执行权限:所有用户。
  • 功能描述:分屏显示文件内容。

more命令比较简单,一般不用什么选项,命令会打开一个交互界面,可以识别一些交互命令。常用的交互命令如下。

交互命令功能
空格键向下翻页
b向上翻页
回车键向下滚动一行
/字符串搜索指定的字符串
q退出

less命令

less命令和more命令类似,只是more是分屏显示命令,而less是分行显示命令,其基本信息如下。

  • 命令名称:less。
  • 英文原意:opposite of more。
  • 所在路径:/usr/bin/less。
  • 执行权限:所有用户。
  • 功能描述:分行显示文件内容

head命令

head是用来显示文件开头的命令,其基本信息如下。

  • 命令名称:head。
  • 英文原意:output the first part of files。
  • 所在路径:/usr/bin/head。
  • 执行权限:所有用户。
  • 功能描述:显示文件开头的内容。
[root@localhost ~]# head [选项] 文件名
选项:
-n 行数: 从文件头开始,显示指定行数
-v: 显示文件名

tail命令

既然有显示文件开头的命令,就会有显示文件结尾的命令。tail命令的基本信息如下。

  • 命令名称:tail。
  • 英文原意:output the last part of files。
  • 所在路径:/usr/bin/tail。
  • 执行权限:所有用户。
  • 功能描述:显示文件结尾的内容。
[root@localhost ~]# tail [选项] 文件名
选项:
-n 行数: 从文件结尾开始,显示指定行数
-f: 监听文件的新增内容

ln命令

我们来看看ln命令的基本信息。

  • 命令名称:ln。
  • 英文原意:make links between file。
  • 所在路径:/bin/ln。
  • 执行权限:所有用户。
  • 功能描述:在文件之间建立链接。
[root@localhost ~]# ln [选项] 源文件目标文件
选项:
-s: 建立软链接文件。如果不加“-s”选项,则建立硬链接文件
-f: 强制。如果目标文件已经存在,则删除目标文件后再建立链接文件

如果创建硬链接:

[root@localhost ~]# touch cangls
[root@localhost ~]# ln /root/cangls /tmp/

#建立硬链接文件,目标文件没有写文件名,会和原名一致
#也就是/root/cangls和/tmp/cangls是硬链接文件

如果创建软链接:

[root@localhost ~]# touch bols
[root@localhost ~]# ln -s /root/bols /tmp/
#建立软链接文件

硬链接与软连接的特征

我们知道文件都有文件名与数据,这在 Linux 上被分成两个部分:用户数据 (user data)元数据 (metadata)

元数据,即文件的附加属性,如文件名、文件大小、创建时间、所有者、文件所在的inode等信息。

用户数据,即文件数据块 (data block),数据块是记录文件真实内容的地方;

在 Linux 中,元数据中的 inode 号(inode 号即索引节点号)才是文件的唯一标识而非文件名。文件名仅是为了

方便人们的记忆和使用,系统或程序通过 inode 号寻找正确的文件数据块。

为解决文件的共享使用,Linux 系统引入了两种链接:硬链接 (hard link)软链接(又称符号链接,即 soft link 或 symbolic link)。链接为 Linux 系统解决了文件的共享使用,还带来了隐藏文件路径、增加权限安全及节省存储等好处。那么软硬链接有什么区别呢?

硬链接特征

  • 硬链接文件和源文件拥有相同的Inode和Block。
  • 修改任意一个文件,另一个都改变。
  • 删除任意一个文件,另一个都能使用。
  • 硬链接标记不清,很难确认硬链接文件位置,不建议使用。
  • 硬链接不能链接目录。
  • 硬链接不能跨分区。

软链接特征

  • 软链接文件和源文件拥有不同的Inode和Block。
  • 两个文件修改任意一个,另一个都改变。
  • 删除软链接,源文件不受影响;删除源文件,软链接不能使用。
  • 软链接没有实际数据,只保存源文件的Inode,不论源文件多大,软链接大小不变。
  • 软链接的权限是最大权限lrwxrwxrwx.,但是由于没有实际数据,最终访问时需要参考源文件权限。
  • 软链接可以链接目录。
  • 软链接可以跨分区。
  • 软链接特征明显,建议使用软连接。

四、目录和文件都能操作的命令

rm命令

rm是强大的删除命令,不仅可以删除文件,也可以删除目录。这个命令的基本信息如下。

  • 命令名称:rm。
  • 英文原意:remove files or directories。
  • 所在路径:/bin/rm。
  • 执行权限:所有用户。
  • 功能描述:删除文件或目录。
[root@localhost ~]# rm [选项] 文件或目录
选项:
-f: 强制删除(force)
-i: 交互删除,在删除之前会询问用户
-r: 递归删除,可以删除目录(recursive)

注意:rm非常强大,使用时需时刻注意,防止误删。

cp命令

cp是用于复制的命令,其基本信息如下:

  • 命令名称:cp。
  • 英文原意:copy files and directories。
  • 所在路径:/bin/cp。
  • 执行权限:所有用户。
  • 功能描述:复制文件和目录。
[root@localhost ~]# cp [选项] 源文件 目标文件
选项:
-a: 相当于-dpr选项的集合
-d: 如果源文件为软链接(对硬链接无效),则复制出的目标文件也为软链接
-i: 询问,如果目标文件已经存在,则会询问是否覆盖
-p: 复制后目标文件保留源文件的属性(包括所有者、所属组、权限和时间)
-r: 递归复制,用于复制目录

mv命令

mv是用来剪切的命令,其基本信息如下。

  • 命令名称:mv。
  • 英文原意:move (rename) files。
  • 所在路径:/bin/mv。
  • 执行权限:所有用户。
  • 功能描述:移动文件或改名。
[root@localhost ~]# mv [选项] 源文件 目标文件
选项:
-f: 强制覆盖,如果目标文件已经存在,则不询问,直接强制覆盖
-i: 交互移动,如果目标文件已经存在,则询问用户是否覆盖(默认选项)
-v: 显示详细信息

五、基本权限管理

1.权限的介绍

权限位的含义

前面讲解ls命令时,我们已经知道长格式显示的第一列就是文件的权限,例如:

[root@localhost ~]# ls -l install.log
-rw-r--r--. 1 root root 24772 114 18:17 install.log

第一列的权限位如果不计算最后的“.”(这个点的含义我们在后面解释),则共有10位,这10位权限位的含义如图所示。

  • 第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”权限。

2.基本权限命令

chmod命令

修改文件的权限模式。

  • 命令名称:chmod。
  • 英文原意:change file mode bits。
  • 所在路径:/bin/chmod。
  • 执行权限:所有用户。
  • 功能描述:修改文件的权限模式。
[root@localhost ~]# chmod [选项] 权限模式 文件名
选项:
-R: 递归设置权限,也就是给子目录中的所有文件设定权限
 
# chmod u=权限,g=权限,o=权限 文件名...

权限模式

hmod命令的权限模式的格式是“ [ugoa] [+-=] [perms]”,也就是“ [用户身份] [赋予方式] [权限]”的格式,我们来解释一下。

  • 用户身份[ugoa]。
    • u:代表所有者(user)。
    • g:代表所属组(group)。
    • o:代表其他人(other)。
    • a:代表全部身份(all)。
  • 赋予方式[[+-=]。
    • +:加入权限。
    • -:减去权限。
    • =:设置权限。
  • 权限[perms]。
    • r:读取权限(read)。
    • w:写权限(write)。
    • x:执行权限(execute)。
    • -:无权限

举例:

# 设置所有用户可读取文件 a.conf
chmod ugo+r a.conf
或者
chmod a+r a.conf

数字权限

数字权限的赋予方式是最简单的,但是不如之前的字母权限直观。我们来看看这些数字权限的含义。

  • 4:代表“r”权限。
  • 2:代表“w”权限。
  • 1:代表“x”权限。

举例:

# 设置所有人可以读写及执行
chmod 777 file (等价于 chmod u=rwx,g=rwx,o=rwx file 或 chmod a=rwx file)
# 设置拥有者可读写,其他人不可读写执行
chmod 600 file (等价于 chmod u=rw,g=---,o=--- file 或 chmod u=rw,go-rwx file)

常用权限

数字权限的赋予方式更加简单,但是需要用户对这几个数字更加熟悉。其实常用权限也并不多,只有如下几个。

  • 644:这是文件的基本权限,代表所有者拥有读、写权限,而所属组和其他人拥有只读权限。

  • 755:这是文件的执行权限和目录的基本权限,代表所有者拥有读、写和执行权限,而所属组和其他人拥有读和执行权限。

  • 777:这是最大权限。在实际的生产服务器中,要尽力避免给文件或目录赋予这样的权限,这会造成一定的安全隐患。

3.基本权限的作用

权限含义的解释

首先,读、写、执行权限对文件目录的作用是不同的。

  • 权限对文件的作用。

    • 读(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:完全权限。

4.所有者和所属组命令

chown命令

chown是修改文件和目录的所有者和所属组的命令,可单独修改文件或目录的所有者,其基本信息如下。

  • 命令名称:chown。
  • 英文原意:change file owner and group。
  • 所在路径:/bin/chown。
  • 执行权限:所有用户。
  • 功能描述:修改文件和目录的所有者和所属组。
#只修改所有者
[root@localhost ~]# chown [选项] 所有者 文件或目录

#修改所有者和所属组
[root@localhost ~]# chown [选项] 所有者:所属组 文件或目录

选项:
-R: 递归设置权限,也就是给子目录中的所有文件设置权限

注意:普通用户不能修改文件的所有者,哪怕自己是这个文件的所有者也不行。普通用户可以修改所有者是自己的文件的权限。

chgrp命令

chgrp是修改文件和目录的所属组的命令,其基本信息如下。

  • 命令名称:chgrp。
  • 英文原意:change group ownership。
  • 所在路径:/bin/chgrp。
  • 执行权限:所有用户。
  • 功能描述:修改文件和目录的所属组。
[root@localhost ~]# chgrp [选项] 所属组 文件或目录

5.umask默认权限

umask是一个内置命令。其作用是指定创建的文件或目录的默认权限。

查看系统的umask权限

#用八进制数值显示umask权限
[root@localhost ~]# umask -P(默认)
0022
#第一个数字表示:特殊权限位的八进制数
#第二个数字表示:属主的八进制数的反掩码
#第三个数字表示:属组的八进制数的反掩码
#第四个数字表示:其他人的八进制数的反掩码
 
#用字母表示文件和目录的初始权限
[root@localhost ~]# umask -S
u=rwx,g=rx,o=rx

umask权限的计算方法

我们需要先了解一下系统新建文件和目录的默认最大权限。

  • 对文件来讲,新建文件的默认最大权限是666,没有执行(x)权限。这是因为执行权限对文件来讲比较危险,不能在新建文件的时候默认赋予,而必须通过用户手工赋予。
  • 对目录来讲,新建目录的默认最大权限是777。这是因为对目录而言,执行(x)权限仅仅代表进入目录,所以即使建立新文件时直接默认赋予,也没有什么危险。

按照官方的标准算法,umask默认权限需要使用二进制进行逻辑与逻辑非联合运算才可以得到正确的新建文件和目录的默认权限。

我们可以按照权限字母来理解umask权限的计算方法。

  • 文件的默认权限最大只能是666,而umask的值是022 “-rw-rw-rw-”减去“-----w--w-”等于“-rw-r--r—”
  • 目录的默认权限最大可以是777,而umask的值是022 “drwxrwxrwx”减去“d----w--w-”等于“drwx-r-xr-x”

注意:umask命令修改的是系统文件或目录临时默认最大权限,想要永久生效需要写入/etc/profile(环境变量配置文件)配置文件中,结合shell理解(后几期再讲shell)。

六、帮助命令

1.man命令

man是最常见的帮助命令,也是Linux最主要的帮助命令,其基本信息如下。

  • 命令名称:man。
  • 英文原意:format and display the on-line manual pages。
  • 所在路径:/usr/bin/man。
  • 执行权限:所有用户。
  • 功能描述:显示联机帮助手册。
[root@localhost ~]# man [选项] 命令
选项:
-f: 查看命令拥有哪个级别的帮助
-k: 查看和命令相关的所有帮助

man命令的快捷键

快捷键作用
上箭头向上移动一行
下箭头向下移动一行
PgUp向上翻一页
PgDn向下翻一页
g移动到第一页
G移动到最后一页
q退出
/字符串从当前页向下搜索字符串
?字符串从当前页向上搜索字符串
n当搜索字符串时,可以使用n键找到下一个字符串
N当搜索字符串时,使用N键反向查询字符串。也就是说,如果使用“/字符串”方式搜索,则N键表示向上搜索字符串;如果使用“?字符串”方式搜索,则N键表示向下搜索字符串。

man命令的帮助级别

级别作用
1普通用户可以执行的系统命令和可执行文件的帮助
2内核可以调用的函数和工具的帮助
3C语言函数的帮助
4设备和特殊文件的帮助
5配置文件的帮助
6游戏的帮助(个人版的Linux中是有游戏的)
7杂项的帮助
8超级用户可以执行的系统命令的帮助
9内核的帮助

查看命令拥有哪个级别的帮助

man -f 命令或 whatis 命令

查看和命令相关的所有帮助

man -k 命令或 apropos 命令

2.info命令

info命令的帮助信息是一套完整的资料,每个单独命令的帮助信息只是这套完整资料中的某一个小章节。

info命令的快捷键

快捷键作用
上箭头向上移动一行
下箭头向下移动一行
PgUp向上翻一页
PgDn向下翻一页
Tab在有“*”符号的节点间进行切换
回车进入有“*”符号的子页面,查看详细帮助信息
u进入上一层信息(回车是进入下一层信息)
n进入下一小节信息
p进入上一小节信息
查看帮助信息
q退出info信息

3.help命令

help只能获取Shell内置命令的帮助(可以利用type命令来判断是外部命令还是内部命令) help命令的基本信息如下。

  • 命令名称:help。
  • 英文原意:help。
  • 所在路径:Shell内置命令。
  • 执行权限:所有用户。
  • 功能描述:显示Shell内置命令的帮助。可以使用type命令来区分内置命令与外部命令

shell是Linux的命令解释器。

常用内置命令如图。

4.--help选项

绝大多数命令都可以使用“--help”选项来查看帮助,这也是一种获取帮助的方法。

[root@localhost ~]# ls --help

这种方法非常简单,输出的帮助信息基本上是man命令的信息简要版。

七、搜索命令

1.whereis命令

whereis是搜索系统命令的命令(像绕口令一样),也就是说,whereis命令不能搜索普通文件,而只能搜索系统命令。whereis命令的基本信息如下。

  • 命令名称:whereis。
  • 英文原意:locate the binary, source, and manual page files for a command。
  • 所在路径:/usr/bin/whereis。
  • 执行权限:所有用户。
  • 功能描述:查找二进制命令、源文件和帮助文档的命令。

2.which命令

which也是搜索系统命令的命令。和whereis命令的区别在于:

  • whereis命令可以在查找到二进制命令的同时,查找到帮助文档的位置;
  • 而which命令在查找到二进制命令的同时,如果这个命令有别名,则还可以找到别名命令。

例如

分类用whereis和which查看ls命令

3.locate命令

locate命令是可以按照文件名(模糊搜索)搜索普通文件的命令。

  • 优点:按照数据库搜索,搜索速度快,消耗资源小。数据库位置 /var/lib/mlocate/mlocate.db,可以使用updatedb命令强制更新数据库。
  • 缺点:只能按照文件名来搜索文件,而不能执行更复杂的搜索,比如按照权限、大小、修改时间等搜索文件。

locate命令的基本信息如下。

  • 命令名称:locate。
  • 英文原意:find files by name。
  • 所在路径:/usr/bin/locate。
  • 执行权限:所有用户。
  • 功能描述:按照文件名搜索文件。

locate配置文件

[root@localhost ~]# vi /etc/updatedb.conf
#开启搜索限制,也就是让这个配置文件生效
PRUNE_BIND_MOUNTS = "yes"
#在locate执行搜索时,禁止搜索这些文件系统类型
PRUNEFS = "……"
#在locate执行搜索时,禁止搜索带有这些扩展名的文件
PRUNENAMES = "……"
#在locate执行搜索时,禁止搜索这些系统目录
PRUNEPATHS = "……"

注意:有些时候locate无法查找到文件,因为其数据库没有更新。而Linux中部分更新是需要重启的,而有的更新是只需要重新登录就可以更新。更新locate数据库可使用updatedb命令来强制更新。

4.find命令

find命令的基本信息如下。

  • 命令名称:find。

  • 英文原意:search for files in a directory hierarchy。

  • 所在路径:/bin/find。

  • 执行权限:所有用户。

  • 功能描述:在目录中搜索文件。

按文件名搜索

[root@localhost ~]# find 搜索路径 [选项] 搜索内容
选项:
-name: 按照文件名搜索
-iname: 按照文件名搜索,不区分文件名大小写
-inum: 按照inode号搜索

按文件大小搜索

[root@localhost ~]# find 搜索路径[选项] 搜索内容
选项:
-size [+|-]大小: 按照指定大小搜索文件
#这里的“+”的意思是搜索比指定大小还要大的文件,“-”的意思是搜索比指定大小还要小的文件。

find -size搜索单位
[root@localhost ~]# man find
-size n[cwbkMG]
File uses n units of space. The following suffixes can be used:
#这是默认单位,如果单位为b或不写单位,则按照512 Byte搜索
'b' for 512-byte blocks (this is the default if no suffix is used)
#搜索单位是c,按照字节搜索
'c' for bytes
#搜索单位是w,按照双字节(中文)搜索
'w' for two-byte words
#按照KB单位搜索,必须是小写的k
'k' for Kilobytes (units of 1024 bytes)
#按照MB单位搜索,必须是大写的M
'M' for Megabytes (units of 1048576 bytes)
#按照GB单位搜索,必须是大写的G
'G' for Gigabytes (units of 1073741824 bytes)

按修改时间搜索

Linux中的文件有访问时间(atime)、数据修改时间(mtime)、状态修改时间(ctime)这三个时间,我们也可以按照时间来搜索文件。

[root@localhost ~]# find 搜索路径 [选项] 搜索内容
选项:
-atime [+|-]时间: 按照文件访问时间搜索(以天为单位)
-mtime [+|-]时间: 按照文件数据修改时间搜索(以天为单位)
-ctime [+|-]时间: 按照文件状态修改时间搜索(以天为单位)

这里用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逻辑非

其他选项

  • --exec选项
[root@localhost ~]# find 搜索路径 [选项] 搜索内容 -exec 命令2 {} \;

这个选项的作用其实是把find命令的结果交给由“-exec”调用的命令2来处理。“{}”就代表find命令的查找结果。

  • -ok选项

“-ok”选项和“-exec”选项的作用基本一致,区别在于:“-exec”的命令2会直接处理,而不询问;“-ok”的命令2在处理前会先询问用户是否这样处理,在得到确认命令后,才会执行。

5.补充命令:grep命令

grep的作用是在文件中提取和匹配符合条件的字符串行。

[root@localhost ~]# grep [选项] "搜索内容" 文件名
选项:
-i: 忽略大小写
-n: 输出行号
-v: 反向查找
--color=auto: 搜索出的关键字用颜色显示

find命令和grep命令区别

  • find命令:find命令用于在系统中搜索符合条件的文件名,如果需要模糊查询,则使用通配符进行匹配,通配符是完全匹配(find命令可以通过-regex选项,把匹配规则转为正则表达式规则,但是不建议如此)。

  • grep命令:grep命令用于在文件中搜索符合条件的字符串,如果需要模糊查询,则使用正则表达式进行匹配,正则表达式是包含匹配

通配符与正则表达式的区别

通配符:用于匹配文件名,完全匹配。

通配符作用
匹配一个任意字符
*匹配0个或任意多个任意字符,也就是可以匹配任何内容
[]匹配中括号中任意一个字符。例如,[abc]代表一定匹配一个字符,或者是a,或者是b,或者是c。
[-]匹配中括号中任意一个字符,-代表一个范围。例如,[ a-z ]代表匹配一个小写字母。
[^]逻辑非,表示匹配不是中括号内的一个字符。例如,[ ^0-9 ]代表匹配一个不是数字的字符。

正则表达式:用于匹配字符串,包含匹配。

正则符作用
匹配前一个字符重复0次,或1次(?是扩展正则,需要使用egrep命令)
*匹配前一个字符重复0次,或任意多次。
[]匹配中括号中任意一个字符。例如,[abc]代表一定匹配一个字符,或者是a,或者是b,或者是c。
[-]匹配中括号中任意一个字符,-代表一个范围。例如,[ a-z ]代表匹配一个小写字母。
[^]逻辑非,表示匹配不是中括号内的一个字符。例如,[ ^0-9 ]代表匹配一个不是数字的字符。
^匹配行首。
$匹配行尾。

6.补充命令:管道符

命令格式: 命令1 | 命令2

命令1的正确输出作为命令2的操作对象(文本流操作)

#如果想知道具体的建立网络连接的数量,就可以管道符结合wc命令统计行数
[root@localhost ~]# netstat -an | grep "ESTABLISHED" | wc -l

7.命令的别名:补充命令

alias命令用于设置指令的别名,指令的别名就是指令的小名,主要是用于照顾管理员使用习惯的。

#查询命令别名
[root@localhost ~]# alias
#设定命令别名
[root@localhost ~]# alias 别名='原命令'

例如:
#用snr别名,替代service network restart命令(注意用单引号)
[root@localhost ~]# alias snr='service network restart'

注意:别名优先级高于系统命令,如果你定义的别名和系统的命令重叠了,系统的命令就消失了,再也实现不了其功能了,实现的功能就是你定义的别名的功能。所以在定义别名的时候最好不用系统命令。

直接通过alias命令定义的别名只是临时生效的,一旦重启下次这个别名就没了。要想永久生效,需写入环境变量配置文件~/.bashrc文件当中(放在~家目录下的配置文件,只对当前用户生效;放在/etc目录下的配置文件,对所有用户生效)。

8.常用快捷键:补充命令

快捷键作用
Tab键命令或文件补全。
ctrl+A把光标移动到命令行开头。
ctrl+E把光标移动到命令行结尾。
ctrl+C强制终止当前的命令。
ctrl+L清屏,相当于clear命令。
ctrl+U删除或剪切光标之前内容。
ctrl+Y粘贴ctrl+U剪切的内容。

八、压缩和解压缩命令

在Linux中可以识别的常见压缩格式有十几种,如“.zip” “.gz” “.bz2” “.tar” “.tar.gz” “.tar.bz2” 等。

1 “.zip”格式

“.zip”是Windows中最常用的压缩格式,Linux也可以正确识别“.zip”格式(但不是Linux常见的压缩格式),这可以方便地和Windows系统通用压缩文件。

1.1 ".zip”格式的压缩命令

压缩命令就是zip,其功能为压缩文件或目录。

[root@localhost ~]# zip [选项] 压缩包名 源文件或源目录(可以指定多个)
选项:
-r: 压缩目录
例如:
[root@localhost ~]# zip ana.zip anaconda-ks.cfg

1.2 “.zip”格式的解压缩命令

“.zip”格式的解压缩命令是unzip,功能为列表、测试和提取压缩文件中的文件。

[root@localhost ~]# unzip [选项] 压缩包名
选项:
-d: 指定解压缩位置 
例如:
[root@localhost ~]# unzip -d /tmp/ ana.zip
#把压缩包解压到指定位置(如果不加-d则解压到当前目录下)

2 “.gz”格式(只压缩不打包)

2.1 “.gz”格式的压缩命令

“.gz”格式是Linux中最常用的压缩格式,使用gzip命令进行压缩文件或目录。

[root@localhost ~]# gzip [选项] 源文件
选项:
-c: 将压缩数据输出到标准输出中,可以用于保留源文件
-d: 解压缩
-r: 压缩目录
[root@localhost ~]# gzip anaconda-ks.cfg
#压缩成.gz格式(源文件anaconda-ks.cfg会被删除,生成anaconda-ks.cfg.gz压缩文件)

[root@localhost ~]# gzip -c anaconda-ks.cfg > anaconda-ks.cfg.gz
#使用-c选项,但是不让压缩数据输出到屏幕上,而是重定向到压缩文件中
#这样可以在压缩文件的同时不删除源文件

2.2 “.gz”格式的解压缩命令

如果要解压缩“.gz”格式,那么使用“gzip -d 压缩包”和“gunzip 压缩包”命令都可以。

例如:
[root@localhost ~]# gunzip install.log.gz
[root@localhost ~]# gzip -d anaconda-ks.cfg.gz

注意gzip -r压缩目录的时候,不会将目录打包压缩,而是将目录里所有的文件压缩成.gz格式

3 “.bz2”格式(不能压缩目录)

3.1 “.bz2”格式的压缩命令

“.bz2”格式是Linux的另一种压缩格式,从理论上来讲,“.bz2”格式的算法更先进、压缩比更好;而“.gz”格式相对来讲压缩的时间更快。“.bz2”格式的压缩命令是bzip2。

[root@localhost ~]# bzip2 [选项] 源文件
选项:
-d: 解压缩
-k: 压缩时,保留源文件
-v: 显示压缩的详细信息
例如:
[root@localhost ~]# bzip2 anaconda-ks.cfg
#压缩成.bz2格式
[root@localhost ~]# bzip2 -k install.log.syslog
#保留源文件压缩

3.2 “.bz2”格式的解压缩命令

“.bz2”格式可以使用“bzip2 -d 压缩包”命令来进行解压缩,也可以使用“bunzip2 压缩包”命令来进行解压缩。

[root@localhost ~]# bunzip2 anaconda-ks.cfg.bz2
[root@localhost ~]# bzip2 -d install.log.syslog.bz2
#两个命令都可以解压缩

注意:bzip2命令彻底不能压缩目录(压缩报错)。

4 “.tar”格式(只打包不压缩)

4.1 “.tar”格式的打包命令

“.tar”格式的打包和解打包都使用tar命令,区别只是选项不同。

[root@localhost ~]# tar [选项] [压缩包名] 源文件或目录
选项:
-c: 打包
-f: 指定压缩包的文件名。压缩包的扩展名是用来给管理员识别格式的,所以一定要正确指定扩展名
-v: 显示打包文件过程
[root@localhost ~]# tar -cvf anaconda-ks.cfg.tar anaconda-ks.cfg
#打包,不会压缩

4.2 “.tar”格式的解打包命令

“.tar”格式的解打包也需要使用tar命令,但是选项不太一样。

[root@localhost ~]# tar [选项] 压缩包
选项:
-x: 解打包
-f: 指定压缩包的文件名
-v: 显示解打包文件过程
-t: 测试,就是不解打包,只是查看包中有哪些文件
-C() 目录:指定解打包位置
[root@localhost ~]# tar -xvf anaconda-ks.cfg.tar
#解打包到当前目录下

5 “.tar.gz”和“.tar.bz2”格式(直接打包并压缩)

使用tar命令直接打包压缩。

[root@localhost ~]# tar [选项] 压缩包 源文件或目录
选项:
-z: 压缩和解压缩“.tar.gz”格式
-j: 压缩和解压缩“.tar.bz2”格式

例如:.tar.gz格式

[root@localhost ~]# tar -zcvf tmp.tar.gz /tmp/
#把/tmp/目录直接打包压缩为“.tar.gz”格式
[root@localhost ~]# tar -zxvf tmp.tar.gz
#解压缩与解打包“.tar.gz”格式

例如:.tar.bz2格式

[root@localhost ~]# tar -jcvf tmp.tar.bz2 /tmp/
#打包压缩为“.tar.bz2”格式,注意压缩包文件名
[root@localhost ~]# tar -jxvf tmp.tar.bz2
#解压缩与解打包“.tar.bz2”格式

再举几个例子:

[root@localhost ~]# mkdir test
[root@localhost ~]# touch test/abc
[root@localhost ~]# touch test/bcd
[root@localhost ~]# touch test/cde
#建立测试目录和测试文件
[root@localhost ~]# tar -zcvf test.tar.gz test/
#压缩
[root@localhost ~]# tar -ztvf test.tar.gz
#只查看,不解压
[root@localhost ~]# tar -zxvf test.tar.gz -C /tmp
#解压缩到指定位置(-C选项一定要放在压缩包后面,否则报错)
[root@localhost ~]# tar -zxvf test.tar.gz -C /tmp test/cde
#只解压压缩包中的特定文件,到指定位置

“.tar.gz”“.tar.bz2”为日常工作中最为常用的两种压缩打包格式。

九 、关机和重启命令

1.sync数据同步

Linux 系统中欲写入硬盘的资料有的时候为了效率起见,会写到 filesystem buffer 中,这个 buffer 是一块记忆体空间,如果欲写入硬盘的资料存于此 buffer 中,而系统又突然断电的话,那么资料就会流失了,sync 指令会将存于 buffer 中的资料强制写入硬盘中。常在关闭Linux系统时使用。

sync命令的基本信息如下。

  • 命令名称:sync。
  • 英文原意:flush file system buffers。
  • 所在路径:/bin/sync。
  • 执行权限:所有用户。
  • 功能描述:刷新文件系统缓冲区。

2.shutdown命令

在早期的 Linux 系统中,应该尽量使用 shutdown 命令来进行关机和重启。因为在那时的 Linux 中,只有 shutdown 命令在关机或重启之前会正确地中止进程及服务,所以我们一直认为 shutdown 才是最安全的关机与重启命令。

shutdown命令的基本信息如下。

  • 命令名称:shutdown。
  • 英文原意:bring the system down。
  • 所在路径:/sbin/shutdown。
  • 执行权限:超级用户。
  • 功能描述:关机和重启。
[root@localhost ~]# shutdown [选项] 时间 [警告信息]
选项:
-c: 取消已经执行的shutdown命令
-h: 关机
-r: 重启
 
[root@localhost ~]# shutdown -h now
# 立刻关机
[root@localhost ~]# shutdown -r now
# 立刻重启 
# shutdown是当前最安全地关机和重启命令,他会在关机或重启前,自动关闭和保存系统的服务或程序。

3.reboot命令

在现在的系统中,reboot命令也是安全的,而且不需要加入过多的选项。

[root@localhost ~]# reboot
#重启

4.halt和poweroff命令

这两个都是关机命令,直接执行即可。这两个命令不会完整关闭和保存系统的服务,都不建议使用。

[root@localhost ~]# halt
#关机
[root@localhost ~]# poweroff
#关机

5.init命令

init是修改Linux运行级别(后面几期讲解)的命令,也可以用于关机和重启。这个命令并不安全,不建议使用。

[root@localhost ~]# init 0
#关机,也就是调用系统的0级别
[root@localhost ~]# init 6
#重启,也就是调用系统的6级别

十、常用网络命令

1.配置IP地址

1.1 配置IP地址

IP地址是计算机在互联网中唯一的地址编码。每台计算机如果需要接入网络和其他计算机进行数据通信,就必须配置唯一的公网IP地址。配置IP地址有两种方法:

  • setup工具(RedHat专有)

  • 修改 /etc/sysconfig/network-scripts/ifcfg-eth0配置文件(标准做法)

1.2 重启网络服务

[root@localhost ~]# service network restart
#重启网络服务

2.ifconfig命令

  • 命令名称:ifconfig。
  • 英文原意:configure a network interface。
  • 所在路径:/sbin/ifconfig。
  • 执行权限:超级用户。
  • 功能描述:配置网络接口。

ifconfig命令最主要的作用就是查看IP地址的信息,直接输入ifconfig命令即可。

3.ping命令

ping是常用的网络命令,主要通过ICMP协议进行网络探测,测试网络中主机的通信情况。ping命令的基本信息如下。

  • 命令名称:ping。
  • 英文原意:send ICMP ECHO_REQUEST to network hosts。
  • 所在路径:/bin/ping。
  • 执行权限:所有用户。
  • 功能描述:向网络主机发送ICMP请求。
[root@localhost ~]# ping [选项] IP
选项:
-b: 后面加入广播地址,用于对整个网段进行探测
-c 次数: 用于指定ping的次数
-s 字节: 指定探测包的大小

注意:Windows下ping命令会返回4次数据,但Linux下只要不停止会一直ping下去。

举例:探测网段中的可用主机 在ping命令中,可以使用“-b”选项,后面加入广播地址,探测整个网段。我们可以使用这个选项知道整个网络中有多少主机是可以和我们通信的,而不用一个一个IP地址地进行探测。例如:

[root@localhost ~]# ping -b -c 3 192.168.103.255
WARNING: pinging broadcast address
PING 192.168.103.255 (192.168.103.255) 56(84) bytes of data.
64 bytes from 192.168.103.199: icmp_seq=1 ttl=64 time=1.95 ms
64 bytes from 192.168.103.168: icmp_seq=1 ttl=64 time=1.97 ms (DUP!)
64 bytes from 192.168.103.252: icmp_seq=1 ttl=64 time=2.29 ms (DUP!)
…省略部分内容…
# 探测192.168.103.0/24网段中有多少可以通信的主机

4.netstat命令

netstat是网络状态查看命令,既可以查看到本机开启的端口,也可以查看有哪些客户端连接。

  • 命令名称:netstat。
  • 英文原意:Print network connections, routing tables, interface statistics, masquerade connections, and multicast memberships。
  • 所在路径:/bin/netstat。
  • 执行权限:所有用户。
  • 功能描述:输出网络连接、路由表、接口统计、伪装连接和组播成员。
[root@localhost ~]# netstat [选项]
选项:
-a: 列出所有网络状态,包括Socket程序
-c 秒数: 指定每隔几秒刷新一次网络状态
-n: 使用IP地址和端口号显示,不使用域名与服务名
-p: 显示PID和程序名
-t: 显示使用TCP协议端口的连接状况
-u: 显示使用UDP协议端口的连接状况
-l: 仅显示监听状态的连接
-r: 显示路由表

例子1:查看本机开启的端口 这是本机最常用的方式,使用选项“-tuln”。因为使用了“-l”选项,所以只能看到监听状态的连接,而不能看到已经建立连接状态的连接。例如:

这个命令的输出较多。

  • Proto:网络连接的协议,一般就是TCP协议或者UDP协议。
  • Recv-Q:表示接收到的数据,已经在本地的缓冲中,但是还没有被进程取走。
  • Send-Q:表示从本机发送,对方还没有收到的数据,依然在本地的缓冲中,一般是不具备ACK标志的数据包。
  • Local Address:本机的IP地址和端口号。
  • Foreign Address:远程主机的IP地址和端口号。
  • State:状态。常见的状态主要有以下几种。
    • LISTEN:监听状态,只有TCP协议需要监听,而UDP协议不需要监听。
    • ESTABLISHED:已经建立连接的状态。如果使用“-l”选项,则看不到已经建立连接的状态。
    • SYN_SENT:SYN发起包,就是主动发起连接的数据包。
    • SYN_RECV:接收到主动连接的数据包。
    • FIN_WAIT1:正在中断的连接。
    • FIN_WAIT2:已经中断的连接,但是正在等待对方主机进行确认。
    • TIME_WAIT:连接已经中断,但是套接字依然在网络中等待结束。
    • CLOSED:套接字没有被使用。

在这些状态中,我们最常用的就是LISTENESTABLISHED状态,一种代表正在监听,另一种代表已经建立连接。

例子2:查看本机有哪些程序开启的端口 如果使用“-p”选项,利用“PID/程序名”则可以查看到是哪个程序占用了端口,并且可以知道这个程序的PID。例如:

例子3:查看所有连接

使用选项“-an”可以查看所有连接,包括监听状态的连接( LISTEN )、已经建立连接状态的连接( ESTABLISHED )、Socket程序连接等。因为连接较多,所以输出的内容有很多。例如:

从“Active UNIX domain sockets”开始,之后的内容就是Socket程序产生的连接,之前的内容都是网络服务产生的连接。我们可以在“-an” 选项的输出中看到各种网络连接状态,而之前的“-tuln”选项则只能看到监听状态。

例子4:查看网关

ifconfig只能看到IP地址,子网掩码,MAC地址,不能看到网关,查看网关使用“netstat -rn”命令。

5.write命令

同一时刻可能有好几个管理员登录使用同一台服务器,修改文件前有必要相互通信通知对方。可使用write指令在网络上与其他用户通信。

write命令的基本信息如下。

  • 命令名称:write。
  • 英文原意:send a message to another user。
  • 所在路径:/usr/bin/write。
  • 执行权限:所有用户。
  • 功能描述:向其他用户发送信息。
[root@localhost ~]#write root pts/2
hello root!
#用户相同的情况下根据TTY登录终端来区分
#向在pts/2(远程终端2)登录的root用户发送信息,使用“Ctrl+D”快捷键保存发送的数据

远程终端pts/0发送消息:

远程终端pts/2接收消息:

注意登录终端在w命令时讲解。

6.wall命令

write命令用于给指定用户发送信息,而wall命令用于给所有登录用户发送信息,包括你自己。执行时,在wall命令后加入需要发送的信息即可,例如:

[root@localhost ~]# wall "I will be in 15 minutes to restart, please save your data"

7.mail命令

mail是Linux的邮件客户端命令,可以利用这个命令给其他用户发送邮件。mail命令的基本信息如下。

  • 命令名称:mail。
  • 英文原意:send and receive Internet mail。
  • 所在路径:/bin/mail。
  • 执行权限:所有用户。
  • 功能描述:发送和接收电子邮件。

例子1:发送邮件 如果我们想要给其他用户发送邮件,则可以执行如下命令:

[root@localhost ~]# mail user1
Subject: hello (邮件标题)
Nice to meet you! (邮件具体内容)
. (使用“.”来结束邮件输入)
#发送邮件给user1用户

我们接收到的邮件都保存在“/var/spool/mail/用户名”中,每个用户都有一个以自己的用户名命名的邮箱。

例子2:发送文件内容 如果我们想把某个文件的内容发送给指定用户,则可以执行如下命令:

[root@localhost ~]# mail -s "test mail" root < /root/anaconda-ks.cfg
选项:
-s: 指定邮件标题
#把/root/anaconda-ks.cfg文件的内容发送给root用户

我们在写脚本时,有时需要脚本自动发送一些信息给指定用户,把要发送的信息预先写到文件中,是一个非常不错的选择。

例子3:查看已经接收的邮件 我们可以直接在命令行中执行mail命令,进入mail的交互命令中,可以在这里查看已经接收到的邮件。例如:

[root@localhost ~]# mail
Heirloom Mail version 12.4 7/29/08.Type ?for help.
"/var/spool/mail/root": 1 message 1 new
>N 1 root Mon Dec 5 22:45 21/1777 "test mail"(之前收到的邮件)
>N 2 root Mon Dec 5 23:08 21/602 "hello"
#未阅读编号 发件人 时间 标题
& (等待用户输入命令)

可以看到已经接收到的邮件列表,“N”代表未读邮件,如果是已经阅读过的邮件,则前面是不会有这个“N”的;之后的数字是邮件的编号,我们主要通过这个编号来进行邮件的操作。如果我们想要查看第一封邮件,则只需输入邮件的编号“1”就可以了。 在交互命令中执行“ ?”,可以查看这个交互界面支持的命令。例如:

这些交互命令是可以简化输入的,比如“headers”命令,就可以直接输入“h”,这是列出邮件标题列表的命令。我们解释一下常用的交互命令。

  • headers:列出邮件标题列表,直接输入“h”命令即可。
  • delete:删除指定邮件。比如想要删除第二封邮件,可以输入“d 2”。
  • save:保存邮件。可以把指定邮件保存成文件,如“s 2 /tmp/test.mail”。
  • quit:退出,并把已经操作过的邮件进行保存。比如移除已删除邮件、保存已阅读邮件等。
  • exit:退出,但是不保存任何操作。

十一、系统痕迹命令

系统中有一些重要的痕迹日志文件,如/var/log/wtmp、/var/run/utmp、/var/log/btmp、/var/log/lastlog等日志文件,如果你用vim打开这些文件,你会发现这些文件是二进制乱码。这是由于这些日志中保存的是系统的重要登录痕迹,包括某个用户何时登录了系统,何时退出了系统,错误登录等重要的系统信息。这些信息要是可以通过vim打开,就能编辑,这样痕迹信息就不准确,所以这些重要的痕迹日志,只能通过对应的命令来进行查看。

1. w命令

w命令是显示系统中正在登陆的用户信息的命令,这个命令查看的痕迹日志是/var/run/utmp。这个命令的基本信息如下:

  • 命令名称:w
  • 英文原意:Show who is logged on and what they are doing.
  • 所在路径:/usr/bin/w
  • 执行权限:所有用户。
  • 功能描述:显示灯用户,和他正在做什么。

第一行信息,内容如下:

内容说明
13:24:58系统当前时间
up 2 min系统的运行时间,本机已经运行2分钟
2 users当前登录了两个用户
load average: 0.02, 0.03, 0.02系统在之前1分钟、5分钟、15分钟的平均负载。如果CPU是单核的,则这个数值超过1就是高负载;如果CPU是四核的,则这个数值超过4就是高负载。

第二行信息,内容如下:

内容说明
USER当前登陆的用户
TTY登陆的终端:
tty1-6:本地字符终端(alt+F1-F6切换)
tty7:本地图形终端(ctrl+alt+F7切换,必须安装启动图形界面)
pts/0-255:远程终端
FROM登陆的IP地址,如果是本地终端,则是空
LOGIN@登陆时间
IDLE用户闲置时间
JCPU所有的进程占用的CPU时间
PCPU当前进程占用的CPU时间
WHAT用户正在进行的操作

2. who命令

who命令和w命令类似,用于查看正在登陆的用户,但是显示的内容更加简单,也是查看/var/run/utmp日志。

3. last命令

last命令是查看系统所有登陆过的用户信息的,包括正在登陆的用户和之前登陆的用户。这个命令查看的是/var/log/wtmp痕迹日志文件。

4. lastlog命令

lastlog命令是查看系统中所有用户最后一次的登陆时间的命令,他查看的日志是/var/log/lastlog文件。

5. lastb命令

lastb命令是查看错误登陆的信息的,查看的是/var/log/btmp痕迹日志:

十二、挂载命令

1. mount命令基本格式

linux所有存储设备都必须挂载使用,包括硬盘。(注意一定要挂载到空目录!)

  • 命令名称:mount
  • 命令所在路径:/bin/mount
  • 执行权限:所有用户
[root@localhost ~]# mount [-l]
#查询系统中已经挂载的设备,-l会显示卷标名称
[root@localhost ~]# mount –a
#依据配置文件/etc/fstab的内容,自动挂载(可以用于检测/etc/fstab修改是否错误)
[root@localhost ~]# mount [-t 文件系统] [-L 卷标名] [-o 特殊选项] 设备文件名 挂载点

选项:
-t 文件系统: 加入文件系统类型来指定挂载的类型,可以ext3、ext4、iso9660 等文件系统。
-L 卷标名: 挂载指定卷标的分区,而不是安装设备文件名挂载
-o 特殊选项: 可以指定挂载的额外选项,比如读写权限、同步异步等,如果不指定则默认值生效。具体的特殊选项如下表。
参数说明
atime/noatime更新访问时间/不更新访问时间。访问分区文件时,是否更新文件的访问时间,默认为更新。
async/sync异步/同步,默认为异步。
auto/noauto自动/手动,mount –a 命令执行时,是否会自动安装 /etc/fstab 文件内容挂载,默认为自动。
defaults定义默认值,相当于 rw ,suid ,dev ,exec ,auto ,nouser ,async 这七个选项。
remount重新挂载已经挂载的文件系统,一般用于指定修改特殊权限。
rw/ro读写/只读,文件系统挂载时,是否具有读写权限,默认是rw。
suid/nosuid具有/不具有SUID权限,设定文件系统是否具有SUID和SGID的权限,默认是具有。
user/nouser允许/不允许普通用户挂载,设定文件系统是否允许普通用户挂载,默认是不允许,只有root可以挂载分区。
usrquota写入代表文件系统支持用户磁盘配额,默认不支持。
grpquota写入代表文件系统支持组磁盘配额,默认不支持。
exec/noexec执行/不执行,设定是否允许在文件系统中执行可执行文件,默认是 exec 允许。

例1:查看系统中已经挂载的文件系统,注意有虚拟文件系统。

取一行命令结果说明:/dev/sda3分区挂载到 /home目录,文件系统是ext4,权限是读写。

注意:swap分区不需要挂载点,是给内核直接访问的。

例2:修改特殊权限

[root@localhost ~]# mount
#我们查看到/boot分区已经被挂载,而且采用的defaults选项,那么我们重新挂载分区,并采用noexec
#权限禁止执行文件执行,看看会出现什么情况(注意不要用/分区做试验,#不然系统命令也不能执行了)。
…省略部分输出…
/dev/sda1 on /boot type ext4 (rw)
…省略部分输出…
[root@localhost ~]# mount -o remount,noexec /boot
#重新挂载/boot分区,并使用noexec权限
[root@localhost sh]# cd /boot/
[root@localhost boot]# vi hello.sh
#写个shell吧
#!/bin/bash
echo "hello!!"
[root@localhost boot]# chmod 755 hello.sh
[root@localhost boot]# ./hello.sh
-bash: ./hello.sh: 权限不够
#虽然赋予了hello.sh执行权限,但是任然无法执行
[root@localhost boot]# mount -o remount,exec /boot
#记得改回来啊,要不会影响系统启动的

例3:挂载分区

[root@localhost ~]# mkdir /mnt/disk1
#建立挂载点目录
[root@localhost ~]# mount /dev/sdb1 /mnt/disk1
#挂载分区

2.光盘挂载

光盘挂载的前提依然是指定光盘的设备文件名,不同版本的Linux,设备文件名并不相同:

  • CentOS 5.x以前的系统,光盘设备文件名是/dev/hdc
  • CentOS 6.x以后的系统,光盘设备文件名是/dev/sr0

不论哪个系统都有软连接/dev/cdrom,与可以作为光盘的设备文件名

[root@localhost ~]# mount -t iso9660 /dev/cdrom /mnt/cdrom/
#挂载光盘

卸载:

[root@localhost ~]# umount /dev/sr0
或者
[root@localhost ~]# umount /mnt/cdrom
#因为设备文件名和挂载点已经连接到一起,卸载哪一个都可以

注意:卸载的时候需要退出光盘目录,才能正常卸载。

3. 挂载U盘

U盘会和硬盘共用设备文件名,所以U盘的设备文件名不是固定的,需要手工查询,查询命令:

[root@localhost ~]# fdisk -l
#查询硬盘

然后就是挂载了,挂载命令如下:

[root@localhost ~]# mount /dev/sdb1 /mnt/usb/
#挂载U盘文件系统为而ext4等Linux支持的文件系统可直接挂载。
[root@localhost ~]# mount -t vfat /dev/sdb1 /mnt/usb/
#挂载U盘。在Windows下为FAT32文件系统的U盘在Linux下识别为vfat文件系统格式

如果U盘中有中文,会发现中文是乱码。Linux要想正常显示中文,需要两个条件:

  • 安装了中文编码和中文字体
  • 操作终端需要支持中文显示(纯字符终端,是不支持中文编码的)

而我们当前系统是安装了中文编码和字体,例如xshell这样的远程终端是 Windows 下的程序,当然是支持中文显示的。那之所以挂载U盘还出现乱码,是需要在挂载的时候,手工指定中文编码,例如:

[root@localhost ~]# mount -t vfat -o iocharset=utf8 /dev/sdb1 /mnt/usb/
#挂载U盘,指定中文编码格式为UTF-8

如果需要卸载,可以执行以下命令:

[root@localhost ~]# umount /mnt/usb/

注意:卸载的时候需要退出U盘挂载目录执行卸载命令才能正常卸载。