linux常用命令
一 、命令的基本格式
1.命令的提示符
[root@localhost ~]#
[]:这是提示符的分隔符号,没有特殊含义。
root:显示的是当前的登录用户,现在使用的是root用户登录 。
@:分隔符号,没有特殊含义。
localhost:当前系统的简写主机名(完整主机名是localhost.localdomain)。
~:代表用户当前所在的目录,此例中用户当前所在的目录是家目录。
#:命令提示符。超级用户是#,普通用户是$
2.命令的基本格式
[root@localhost ~]# 命令[选项] [参数]
ls是最常见的目录操作命令,主要作用是显示目录下的内容。
命令名称:ls。英文原意:list。所在路径:/bin/ls。
执行权限:所有用户。
功能描述:显示目录下的内容。
1 | [root@localhost ~]#ls [选项] [文件名或目录名] 选项:-a: 显示所有文件 |
举几个例子:
1 | [root@localhost ~]# ls -l |
我们已经知道“-l”选项用于 显示文件的详细信息,那么“-l”选项 显示的这7列分别 是什么含义?
第一列:权限。具体权限的含义将在4.5节中讲解。
第二列:引用计数。文件的引用计数代表该文件的硬链接个数,而目录的引用计数代表该目录有多少个一级子目录。
第三列:所有者,也就是这个文件属于哪个用户。默认所有者是文件的建立用户
第四列:所属组。默认所属组是文件建立用户的有效组,一般情况下就是建立用户的所在组。
第五列:大小。默认单位是字节。
第六列:文件修改时间。文件状态修改时间或文件数据修改时间都会更改这个时间,注意这个时间不是文件的创建时间。
第七列:文件名。
选项:是用于调整命令的功能的。
参数:是命令的操作对象,如果省略参数,是因为有默认参数
二、目录操作命令
1.ls命令
见前一小节的内容。
2.cd命令
cd是切换所在目录的命令,这个命令的基本信息如下。
特殊符号 | 作用 |
---|---|
~ | 代表用户的家目录 |
- | 代表上次所在目录 |
. | 代表当前目录 |
.. | 代表上级目录 |
2.2 绝对路径和相对路径
绝对路径:以跟目录为参照物,从根目录开始,一级一级进入目录
相对路径:以当前目录作为参照物,进行目录查找
3.pwd命令
pwd命令是查询所在目录的命令,基本信息如下:
命令名称:pwd
英文原意:print name of current/working directory
所在路径:/bin/pwd
执行权限:所有用户。
功能描述:查询所在的工作目录。
4.mkdir命令
mkdir是创建目录的命令,其基本信息如下。
命令名称:mkdir。
英文原意:make directories。
所在路径:/bin/mkdir。执行权限:所有用户。
功能描述:创建空目录。
命令格式
1 | [root@localhost ~]# mkdir |
5.rmdir命令
既然有建立目录的命令,就一定会有删除目录的命令
rmdir,其基本信息如下。
命令名称:rmdir。
英文原意:remove empty directories。
所在路径:/bin/rmdir。
执行权限:所有用户。
功能描述:删除空目录。
命令格式
1 | [root@localhost ~]# rmdir |
rmdir命令的作用十分有限,因为只能删除空目录,所以一旦目录中有内容,就会报错。这个命令比较“笨”,所以我们不太常用。后续我们不论删除的是文件还是目录,都会使用rm命令
三、文件操作命令
1.touch命令
创建空文件或修改文件时间,这个命令的基本信息如下。
命令名称:touch。
英文原意:change file timestamps。
所在路径:/bin/touch。
执行权限:所有用户。
功能描述:修改文件的时间戳。
2.stat命令
stat是查看文件详细信息的命令,而且可以看到文件的这三个时间,其基本信息如下。
命令名称:stat。
英文原意:display file or file system status。
所在路径:/usr/bin/stat。
执行权限:所有用户。
功能描述:显示文件或文件系统的详细信息。
1 | [root@localhost ~]# stat anaconda-ks.cfg |
3.cat命令
cat命令用来查看文件内容。这个命令的基本信息如下。
命令名称:cat。
英文原意:concatenate files and print on the standard output。
所在路径:/bin/cat。
执行权限:所有用户。
功能描述:合并文件并打印输出到标准输出
命令格式
1 | [root@localhost ~]# cat |
4.more命令
more是分屏显示文件的命令,其基本信息如下。
命令名称:more。
英文原意:file perusal filter for crt viewin。
所在路径:/bin/more。执行权限:所有用户。
功能描述:分屏显示文件内容。
more命令比较简单,一般不用什么选项,命令会打开一个交互界面,可以识别一些交互命令。常用的交互命令如下。
空格键:向下翻页。
b:向上翻页。回车键:向下滚动一行。
/字符串:搜索指定的字符串。
q:退出 。
5.less命令
less命令和more命令类似,只是more是分屏显示命令,而less是分行显示命令,其基本信息如下。
- 命令名称:less。
- 英文原意:opposite of more。
- 所在路径:/usr/bin/less。
- 执行权限:所有用户。
- 功能描述:分行显示文件内容
6.head命令
head是用来显示文件开头的命令,其基本信息如下。
命令名称:head。
英文原意:output the first part of files。
所在路径:/usr/bin/head。执行权限:所有用户。
功能描述:显示文件开头的内容。
命令格式
1 | [root@localhost ~]# head [选项] 文件名 |
7.tail命令
既然有显示文件开头的命令,就会有显示文件结尾的命令。tail命令的基本信息如下。
命令名称:tail。
英文原意:output the last part of files。
所在路径:/usr/bin/tail。
执行权限:所有用户。
功能描述:显示文件结尾的内容。
命令格式
1 | [root@localhost ~]# tail [选项] 文件名 |
8.ln命令
我们来看看ln命令的基本信息。
命令名称:ln。
英文原意:make links between file。
所在路径:/bin/ln。执行权限:所有用户。
功能描述:在文件之间建立链接。
8.1 ln命令的基本格式如下:
1 | [root@localhost ~]# ln [选项] 源文件目标文件 |
如果创建硬链接:
1 | [root@localhost ~]# touch cangls |
如果创建软链接:
1 | [root@localhost ~]# touch bols |
8.2 硬链接与软连接的特征
硬链接特征:
源文件和硬链接文件拥有相同的Inode和Block
任意一个文件,另一个都改变
删除任意一个文件,另一个都能使用
硬链接标记不清,很难确认硬链接文件位置,不建议使用硬链接不能链接目录
硬链接不能跨分区
软链接特征:
软链接和源文件拥有不同的Inode和Block
两个文件修改任意一个,另一个都改变
删除软链接,源文件不受影响;删除源文件,软链接不能使用
软链接没有实际数据,只保存源文件的Inode,不论源文件多大,软链接大小不变
软链接的权限是最大权限lrwxrwxrwx.,但是由于没有实际数据,最终访问时需要参考源文件权限
软链接可以链接目录
软链接可以跨分区
软链接特征明显,建议使用软连接
四、目录和文件都能操作的命令
1.rm命令
rm是强大的删除命令,不仅可以删除文件,也可以删除目录。这个命令的基本信息如下。
命令名称:rm。
英文原意:remove files or directories。
所在路径:/bin/rm。
执行权限:所有用户。
功能描述:删除文件或目录。
命令格式
1 | [root@localhost ~]# rm [选项] 文件或目录 |
2.cp命令
cp是用于复制的命令,其基本信息如下:
- 命令名称:cp。
- 英文原意:copy files and directories。
- 所在路径:/bin/cp。
- 执行权限:所有用户。
- 功能描述:复制文件和目录 。
命令格式
1 | [root@localhost ~]# cp [选项] 源文件目标文件 |
3.mv命令
mv是用来剪切的命令,其基本信息如下。
- 命令名称:mv。
- 英文原意:move (rename) files。
- 所在路径:/bin/mv。
- 执行权限:所有用户。
- 功能描述:移动文件或改名。
命令格式
1 | [root@localhost ~]# mv [选项] 源文件目标文件 |
五、基本权限管理
1.权限的介绍
权限位的含义
前面讲解ls命令时,我们已经知道长格式显示的第一列就是文件的权限,例如:
1 | [root@localhost ~]# ls -l 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,其基本信息如下。
1 | [root@localhost ~]# chmod [选项] 权限模式文件名 |
2.2.权限模式
chmod命令的权限模式的格式是“[ugoa][[+-=][perms]]”,也就是“[用户身份][[赋予方式][权限]]”的格式,我们来解释一下 。
用户身份 。
u:代表所有者(user)。
g:代表所属组(group) 。
o:代表其他人(other)。
a:代表全部身份(all)。
赋予方式。
- +:加入权限。
- -:减去权限。
- =:设置权限。
权限。
r:读取权限(read)。
w:写权限(write)。
x:执行权限(execute)。
2.3.数字权限
数字权限的赋予方式是最简单的,但是不如之前的字母权限好记、直观。我们来看看这些数字权限的含义。
数字权限的赋予方式更加简单,但是需要用户对这几个数字更加熟悉。其实常用权限也并不多,只有如下几个。
- 644:这是文件的基本权限,代表所有者拥有读、写权限,而所属组和其他人拥有只读权限。
- 755:这是文件的执行权限和目录的基本权限,代表所有者拥有读、写和执行权限,而所属组和其他人拥有读和执行权限。
- 777:这是最大权限。在实际的生产服务器中,要尽力避免给文件或目录赋予这样的权限,这会造成一定的安全隐患。
3.基本权限的作用
3.1.权限含义的解释首先, 读、写、执行权限对文件和目录的作用是不同的。
权限对文件的作用。
- 读(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命令,进入目录。
3.2.目录的可用权限目录的可用权限其实只有以下几个。
0:任何 权限都不赋予。
5:基本的目录浏览和进入权限。
7:完全权限。
4.所有者和所属组命令
4.1.chown命令
chown是修改文件和目录的所有者和所属组的命令, 其基本信息如下。
- 命令名称:chown。
- 英文原意:change file owner and group。
- 所在路径:/bin/chown。执行权限:所有用户。
- 功能描述:修改文件和目录 的所有者和所属组。
命令格式
1 | [root@localhost ~]# chown [选项] 所有者:所属组文件或目录 |
普通用户不能修改文件的所有者,哪怕自己是这个文件的所有者也不行。普通用户可以修改所有者是自己的文件的权限。
4.2.chgrp命令
chgrp是修改文件和目录的所属组的命令,其基本信息如下。
- 命令名称:chgrp。
- 英文原意:change group ownership。
- 所在路径:/bin/chgrp。
- 执行权限:所有用户。
- 功能描述:修改文件和目录的所属
5.umask默认权限
5.1 查看系统的umask权限
1 | [root@localhost ~]# umask |
5.2 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—”
六、帮助命令
1.man命令
man是最常见的帮助命令,也是Linux最主要的帮助命令,其基本信息如下。
- 命令名称:man。
- 英文原意:format and display the on-line manual pages。
- 所在路径:/usr/bin/man。
- 执行权限:所有用户。
- 功能描述:显示联机帮助手册。
命令格式
1 | [root@localhost ~]# man [选项] 命令 |
man命令的快捷键
快捷键 | 作用 |
---|---|
上箭头 | 向上移动一行 |
下箭头 | 向下移动一行 |
PgUp | 向上翻一页 |
PgDn | 向下翻一页 |
g | 移动到第一页 |
G | 移动到最后一页 |
q | 退出 |
/字符串 | 从当前页向下搜索字符串 |
?字符串 | 从当前页向上搜索字符串 |
n | 当搜索字符串时,可以使用n键找到下一个字符串 |
N | 当搜索字符串时,使用N键反向查询字符串。也就是说,如果使用“/字符串”方式搜索,则N键表示向上搜索字符串;如果使用“?字符串”方式搜索,则N键表示 向下搜索字符串 |
man命令的帮助级别
级别 | 作用 |
---|---|
1 | 普通用户可以执行的系统命令和可执行文件的帮助 |
2 | 内核可以调用的函数和工具的帮助 |
3 | C语言函数的帮助 |
4 | 设备和特殊文件的帮助 |
5 | 配置文件的帮助 |
6 | 游戏的帮助(个人版的Linux中是有游戏的) |
7 | 杂项的帮助 |
8 | 超级用户可以执行的系统命令的帮助 |
9 | 内核的帮助 |
man -f 命令或 whatis 命令
#查看命令拥有哪个级别的帮助
man -k 命令或 apropos命令
#查看和命令相关的所有帮助
2.info命令
info命令的帮助信息是一套完整的资料,每个单独命令的帮助信息只是这套完整资料中的某一个小章节。
快捷键 | 作用 |
---|---|
上箭头 | 向上移动一行 |
下箭头 | 向下移动一行 |
PgUp | 向上翻一页 |
PgDn | 向下翻一页 |
Tab | 在有“*”符 号的节点间进行切换 |
回车 | 进入有“*”符号的子页面,查看详细帮助信息 |
u | 进入上一层信息(回车是进入下一层信息) |
n | 进入下一小节信息 |
p | 进入上一小节信息 |
? | 查看帮助信息 |
q | 退出info信息 |
3.help命令
help只能获取Shell内置命令的帮助help命令的基本信息如下。
命令名称:help。
英文原意:help。
所在路径:Shell内置命令。
执行权限:所有用户。
功能描述:显示Shell内置命令的帮助。可以使用type命令来区分内置命令与外部命令。shell是Linux的命令解释器。
4.–help选项
绝大多数命令都可以使用“–help”选项来查看帮助,这也是一种获取帮助的方法。例如:
1 | [root@localhost ~]# ls --help |
这种方法非常简单,输出的帮助信息基本上是man命令的信息简要版。对于这4种常见的 获取帮助的方法,大家可以按照自己的习惯任意使
七、搜索命令
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命令在查找到二进制命令的同时,如果这个命令有别名,则还可以找到别名命令。
which命令的基本信息如下
- 命令名称:which。
- 英文原意:shows the full path of (shell) commands。
- 所在路径:/usr/bin/which。
- 执行权限:所有用户。
- 功能描述:列出命令的所在路径。
3.locate命令
3.1基本用法
locate命令才是可以按照文件名搜索普通文件的命令。
- 优点:按照数据库搜索,搜索速度快,消耗资源小。数据库位置/var/lib/mlocate/mlocate.db,可以使用updatedb命令强制更新数据库。
- 缺点:只能按照文件名来搜索文件,而不能执行更复杂的搜索,比如按照权限、大小、修改时间等搜索文件。
locate命令的基本信息如下。
命令名称:locate。
英文原意:find files by name。
所在路径:/usr/bin/locate。
执行权限:所有用户。
功能描述:按照文件名搜索文件。
3.2配置文件
1
2
3
4
5
6
7
8
9[root@localhost ~]# vi /etc/updatedb.conf
PRUNE_BIND_MOUNTS = "yes"
开启搜索限制,也就是让这个配置文件生效
PRUNEFS = "......"
在locate执行搜索时,禁止搜索这些文件系统类型
PRUNENAMES = "......"
在locate执行搜索时,禁止搜索带有这些扩展名的文件
PRUNEPATHS = "......"
在locate执行搜索时,禁止搜索这些系统目录
4.find命令
find命令的基本信息如下。
命令名称:find。
英文原意:search for files in a directory hierarchy。
所在路径:/bin/find。
执行权限:所有用户。
功能描述:在目录中搜索文件。
4.1按照文件名搜索
1
2
3
4
5[root@localhost ~]# find 搜索路径[选项] 搜索内容
选项:
-name:按照文件名搜索
-iname:按照文件名搜索,不区分文件名大小写
-inum:按照inode号搜索4.2.按照文件大小搜索
1 | [root@localhost ~]# find 搜索路径[选项] 搜索内容 |
这里的“+”的意思是搜索比指定大小还要大的文件,“-”的意思是搜索比指定大小还要小的文件。
find命令的单位:
1 | [root@localhost ~]# man find |
4.3按照修改时间搜索
Linux中的文件有访问时间(atime)、数据修改时间(mtime)、状态修改时间(ctime)这三个时间,我们也可以按照时间来搜索文件。
1 | [root@localhost ~]# find 搜索路径[选项] 搜索内容 |
这三个时间的区别我们在stat命令中已经解释过了,这里用mtime数据修改时间来举例,重点说说“[+-]”时间的含义。
- -5:代表5天内修改的文件。
- 5:代表前5~6天那一天修改的文件。
- +5:代表6天前修改的文件。
我们画一个时间轴,来解释一下
4.4按照权限搜索
命令格式。
1 | [root@localhost ~]# find 搜索路径[选项] 搜索内容 |
4.5按照所有者和所属组搜索
1 | [root@localhost ~]# find 搜索路径[选项] 搜索内容 |
按照所有者和所属组搜索时,“-nouser”选项比较常用,主要用于查找垃圾文件。只有一种情况例外,那就是外来文件。比如光盘和U盘中的文件如果是由Windows复制的,在Linux中查看就是没有所有者的文件;再比如手工源码包安装的文件,也有可能没有所有者
4.6按照文件类型搜索
1 | [root@localhost ~]# find 搜索路径[选项] 搜索内容 |
4.7逻辑运算符
1 | [root@localhost ~]# find 搜索路径[选项] 搜索内容 |
1)-a:and逻辑与
find命令也支持逻辑运算符选项,其中-a代表逻辑与运算,也就是-a的两个条件都成立,find搜索的结果才成立。举个例子:
1 | [root@localhost ~]# find . -size +2k -a -type f |
2)-o:or逻辑或
-o选项代表逻辑或运算,也就是-o的两个条件只要其中一个成立,find命令就可以找到结果。例如:
1 | [root@localhost ~]# find . -name cangls -o -name bols |
3)-not:not逻辑非
-not是逻辑非,也就是取反的意思。举个例子:
1 | [root@localhost ~]# find . -not -name cangls |
4.8其他选项
1)-exec选项
这里我们主要讲解两个选项“-exec”和“-ok”,这两个选项的基本作用非常相似。我们先来看看“-exec”选项的格式。
1 | [root@localhost ~]# find 搜索路径[选项] 搜索内容-exec 命令2 {} \; |
其次,这个选项的作用其实是把find命令的结果交给由“-exec”调用的命令2来处理。“{}”就代表find命令的查找结果。
2)-ok选项
“-ok”选项和“-exec”选项的作用基本一致,区别在于 :“-exec”的命令2会直接处理,而不询问;“-ok”的命令2在处理前会先询问用户是否这样处理,在得到确认命令后,才会执行。5.grep命令:补充命令grep的作用是在文件中提取和匹配符合条件的字符串行。命令格式如下:
1 | [root@localhost ~]# grep [选项] "搜索内容" 文件名 |
ind也是搜索命令,那么find命令和grep命令有什么区别呢?
1)find命令
find命令用于 在系统中搜索符合条件的文件名,如果需要模糊查询,则使用通配符进行匹配,通配符是完全匹配(find命令可以通过-regex选项,把匹配规则转为正则表达式规则,但是不建议如此)。
2)grep命令
grep命令用于在文件中搜索符合条件的字符串,如果需要模糊查询, 则使用正则表达式进行匹配,正则表达式是包含匹配。
3)通配符与正则表达式的区别
通配符:用于匹配文件名,完全匹配
通配符 | 作用 |
---|---|
? | 匹配一个任意字符 |
* | 匹配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的操作对象
1)例子1:
举个例子,我们经常需要使用“ll”命令查看文件的长格式,不过在有些目录中文件众多,比如/etc/目录,使用“ll”命令显示的内容就会非常多,只能看到最后的内容,而不能看到前面输出的内容。这时我们马上想到more命令可以分屏显示文件内容,可是怎么让more命令分屏显示命令的输出呢?
这里有一种笨办法:
1 | [root@localhost ~]# ll -a /etc/ > /root/testfile |
可是这样操作实在不方便,这时就可以利用管道符了。命令如下:
1 | [root@localhost ~]# ll -a /etc/ | more |
2)例子2:
我想在命令ll /etc/的结果中搜索yum的文件名,应该使用find命令?还是grep命令?
1 | [root@localhost ~]# ll -a /etc/ | grep y |
3)例子3:
netstat命令(CentOS 7中,需要安装net-snmp.x86_64,net-tools.x86_64两个包才有此命令。7.5系统中已经自动安装)格式如下:
1 | [root@localhost ~]# netstat [选项] |
1 | [root@localhost ~]# netstat -an | grep "ESTABLISHED" | wc -l |
统计正在连接的网络连接数量
7.命令的别名:补充命令
命令的别名,就是命令的小名,主要是用于照顾管理员使用习惯的。
1 | 命令格式: |
用命令定义的别名,是临时生效的,要想永久生效,需要写入环境变量配置文件~/.bashrc
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”格式,这可以方便地和Windows系统通用压缩文件。
1.1.“.zip”格式的压缩命令
压缩命令就是zip,其 基本信息如下。
- 命令名称:zip。
- 英文原意:package and compress (archive) files。
- 所在路径:/usr/bin/zip。
- 执行权限:所有用户。
- 功能描述:压缩文件或目录。
命令格式如下:
1 | [root@localhost ~]# zip [选项] 压缩包名 源文件或源目录 |
1.2.“.zip”格式的解压缩命令
“.zip”格式的解压缩命令是unzip,其基本信息如下。
- 命令名称:unzip。
- 英文原意:list, test and extract compressed files in a ZIP archive。
- 所在路径:/usr/bin/unzip。
- 执行权限:所有用户。
- 功能描述:列表、测试和提取压缩文件中的文件。
命令格式如下:
1 | [root@localhost ~]# unzip [选项] 压缩包名 |
2.“.gz”格式(不会打包)
2.1.“.gz”格式的压缩命令
“.gz”格式是Linux中最常用的压缩格式,使用gzip命令进行压缩,其基本信息如下。
- 命令名称:gzip。
- 英文原意:compress or expand files。
- 所在路径:/bin/gzip。
- 执行权限:所有用户。
- 功能描述:压缩文件或目录。
这个命令的格式如下:
1 | [root@localhost ~]# gzip [选项] 源文件 |
2.2.“.gz”格式的解压缩命令
如果要解压缩“.gz”格式, 那么使用“gzip -d 压缩包”和“gunzip 压缩包”命令都可以。我们先看看gunzip命令的基本信息。
- 命令名称:gunzip。
- 英文原意:compress or expand files。
- 所在路径:/bin/gunzip。
- 执行权限:所有用户。
- 功能描述:解压缩文件或目录。
1 | 例如: |
两个命令都可以解压缩“.gz”格式
3.“.bz2”格式(不能压缩目录)
3.1.“.bz2”格式的压缩命令
“.bz2”格式是Linux的另一种压缩格式,从理论上来讲,“.bz2”格式的算法更先进、压缩比更好;而“.gz”格式相对来讲压缩的时间更快。
“.bz2”格式的压缩命令是bzip2,我们来看看这个命令的基本信息。
- 命令名称:bzip2。
- 英文原意:a block-sorting file compressor。
- 所在路径:/usr/bin/bzip2。
- 执行权限:所有用户。
- 功能描述:.bz2格式的压缩命令。来看看bzip2命令的格式。
1 | [root@localhost ~]# bzip2 [选项] 源文件 |
3.2.“.bz2”格式的解压缩命令
“.bz2”格式可以使用“bzip2 -d 压缩包” 命令来进行解压缩,也可以使用“bunzip2 压缩包”命令来进行解压缩 。先看看bunzip2命令的基本信息。
- 命令名称:bunzip2。
- 英文原意:a block-sorting file compressor。
- 所在路径:/usr/bin/bunzip2。
- 执行权限:所有用户。
- 功能描述:.bz2格式的解压缩命令。
1 | [root@localhost ~]# bunzip2 anaconda-ks.cfg.bz2 |
4.“.tar”格式(打包不会压缩)
4.1.“.tar”格式的打包命令
“.tar”格式 的打包和解打包都使用tar命令,区别只是选项不同。我们先看看tar命令的基本信息。
- 命令名称:tar。
- 英文原意:tar。
- 所在路径:/bin/tar。
- 执行权限:所有用户。
- 功能描述:打包与解打包命令。命令的基本格式如下:
1 | [root@localhost ~]# tar [选项] [-f 压缩包名] 源文件或目录 |
1 | [root@localhost ~]# tar -cvf anaconda-ks.cfg.tar anaconda-ks.cfg |
4.2.“.tar”格式的解打包命令
“.tar”格式的解打包也需要使用tar命令,但是选项不太一样。命令格式如下:
1 | [root@localhost ~]# tar [选项] 压缩包 |
1 | 例如 |
5.“.tar.gz”和“.tar.bz2”格式
使用tar命令直接打包压缩。命令格式如下:
1 | [root@localhost ~]# tar [选项] 压缩包 源文件或目录 |
1 | 例如:.tar.gz格式 |
1 | 例如:.tar.bz2格式 |
再举几个例子:
1 | [root@localhost ~]# mkdir test |
九、关机和重启命令
1.sync数据同步
sync命令的基本信息如下。
- 命令名称:sync。
- 英文原意:flush file system buffers。
- 所在路径:/bin/sync。
- 执行权限:所有用户。
- 功能描述:刷新文件系统缓冲区。
2.shutdown命令
shutdown命令的基本信息如下。
- 命令名称:shutdown。
- 英文原意:bring the system down。
- 所在路径:/sbin/shutdown。
- 执行权限:超级用户。
- 功能描述:关机和重启
命令的基本格式如下:
1 | [root@localhost ~]# shutdown [选项] 时间[警告信息] |
3.reboot命令
在现在的系统中,reboot命令也是安全的,而且不需要加入过多的选项。
1 | [root@localhost ~]# reboot |
4.halt和poweroff命令
这两个都是关机命令,直接执行即可。这两个命令不会完整关闭和保存系统的服务,不建议使用。
1 | [root@localhost ~]# halt |
5.init命令
init是修改Linux运行级别的命令,也可以用于关机和重启。这个命令并不安全,不建议使用。
1 | [root@localhost ~]# init 0 |
十、常用网络命令
1.配置IP地址
1.1配置IP地址
IP地址是计算机在互联网中唯一的地址编码。每台计算机如果需要接入网络和其他计算机 进行数据通信,就必须配置唯一的公网IP地址。
配置IP地址有两种方法:
1)setup工具
2)vi /etc/sysconfig/network-scripts/ifcfg-eth0手工修改配置文件
1.2重启网络服务
1 | [root@localhost ~]# service network restart |
1.3虚拟机需要桥接到有线网卡,病重启网络服务
1.4复制镜像有可能需要重置UUID(唯一识别符)
1 | [root@localhost ~]# vi /etc/sysconfig/network-scripts/ifcfg-eth0 |
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请求。
命令的基本格式如下:
1 | [root@localhost ~]# ping [选项] IP |
例子:探测网段中的可用主机
在ping命令中,可以使用“-b”选项,后面加入广播地址,探测整个网段。我们可以使用这个选项知道整个网络中有多少主机是可以和我们通信的,而不用一个一个IP地址地进行探测。例如:
1 | [root@localhost ~]# ping -b -c 3 192.168.103.255 |
#探测192.168.103.0/24网段中有多少可以通信的主机
4.netstat命令
netstat是网络状态查看命令,既可以查看到本机开启的端口,也可以查看有哪些客户端连接。在CentOS 7.x中netstat命令默认没有安装,如果需要使用,需要安装net-snmp和net-tools软件包。
netstat命令的基本信息如下。
- 命令名称:netstat。
- 英文原意:Print network connections, routing tables, interface statistics, masquerade connections, and multicast memberships。
- 所在路径:/bin/netstat。执行权限:所有用户。
- 功能描述:输出网络连接、路由表、接口统计、伪装连接和组播成员。
命令格式如下:
1 | [root@localhost ~]# netstat [选项] |
例子1:查看本机开启的端口
这是本机最常用的方式,使用选项“-tuln”。 因为使用了“-l”选项,所以只能看到监听状态的连接,而不能看到已经建立连接状态的连接。例如:
1 | [root@localhost ~]# netstat -tuln |
这个命令的输出较多。
- 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:套接字没有被使用。
在这些状态中,我们最常用的就是LISTEN和ESTABLISHED状态,一种代表正在监听,另一种代表已经建立连接。
例子2:查看本机有哪些程序开启的端口
如果使用“-p”选项,则可以查看到是哪个程序占用了端口,并且可以知道这个程序的PID。例如:
1 | [root@localhost ~]# netstat -tulnp |
例子3:查看所有连接
使用选项“-an”可以查看所有连接,包括监听状态的连接(LISTEN)、已经建立连接状态的连接(ESTABLISHED)、Socket程序连接等。因为连接较多,所以输出的内容有很多。例如:
1 | [root@localhost ~]# netstat -an |
从“Active UNIX domain sockets”开始,之后的内容就是Socket程序产生的连接,之前的内容都是网络服务产生的连接。我们可以在“-an”选项的 输出中看到各种网络连接状态,而之前的“-tuln”选项则只能看到监听状态。
5.write命令
write命令的基本信息如下。
- 命令名称:write。
- 英文原意:send a message to another user。
- 所在路径:/usr/bin/write。
- 执行权限:所有用户 。
- 功能描述:向其他用户发送信息。
1 | [root@localhost ~]#write user1 pts/1 |
6.wall命令
write命令用于 给指定用户发送信息,而wall命令用于给所有登录用户发送信息,包括你自己。执行时,在wall命令后加入需要发送的信息即可,例如:
1 | [root@localhost ~]# wall "I will be in 5 minutes to restart, please save your da |
7.mail命令
mail是Linux的邮件客户端命令,可以利用这个命令给其他用户发送邮件。mail命令的基本信息如下。
- 命令名称:mail。
- 英文原意:send and receive Internet mail。
- 所在路径:/bin/mail。
- 执行权限:所有用户。
- 功能描述:发送和接收电子邮件。
例子1:发送邮件
如果我们想要给其他用户发送邮件,则可以执行如下命令 :
1 | [root@localhost ~]# mail user1 |
我们接收到的邮件都保存在“/var/spool/mail/用户名”中,每个用户都有一个以自己的用户名命名的邮箱。
例子2:发送文件内容
如果我们想把某个文件的内容发送给指定用户,则可以执行如下命令:
1 | [root@localhost ~]# mail -s "test mail" root < /root/anaconda-ks.cfg |
我们在写脚本时,有时需要脚本自动发送一些信息给指定用户,把要发送的信息预先写到文件中,是一个 非常不错的选择。
例子3:查看已经接收的邮件
我们可以直接在命令行中执行mail命令,进入mail的交互命令中,可以在这里查看已经接收到的邮件。例如:
1 | [root@localhost ~]# mail |
可以看到已经接收到的邮件列表,“N”代表未读邮件,如果是已经阅读过的邮件,则前面是不会有这个“N”的;之后的数字是邮件的编号,我们主要通过这个编号来进行邮件的操作。如果我们想要查看第一封邮件,则只需输入邮件的编号“1”就可以了。
在交互命令中执行“?”,可以查看这个交互界面支持的命令。例如:
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
- 执行权限:所有用户。
- 功能描述:显示灯用户,和他正在做什么。
例如:
1 | [root@localhost ~]# w |
第一行信息,内容如下:
内容 | 说明 |
---|---|
12:26:46 | 系统当前时间 |
up 1 day, 13:32 | 系统的运行时间,本机已经运行1天13小时32分钟 |
2 users | 当前登录了两个用户 |
load average: 0.00, 0.00, 0.00 | 系统在之前1分钟、5分钟、15分钟的平均负载。如果CPU是单核的,则这个数值超过1就是高负载;如果CPU是四核 的,则这个数值超过4就是高负载(这个平均负载完全是依据个人经验来进行判断的,一般认为不应该超过服务器CPU的核数) |
第二行信息,内容如下:
内容 | 说明 |
---|---|
USER | 当前登陆的用户 |
TTY | 登陆的终端:tty1-6:本地字符终端(alt+F1-6切换)tty7:本地图形终端(ctrl+alt+F7切换,必须安装启动图形界面)pts/0-255:远程终端 |
FROM | 登陆的IP地址,如果是本地终端,则是空 |
LOGIN@ | 登陆时间 |
IDLE | 用户闲置时间 |
JCPU | 所有的进程占用的CPU时间 |
PCPU | 当前进程占用的CPU时间 |
WHAT | 用户正在进行的操作 |
2.who命令
who命令和w命令类似,用于查看正在登陆的用户,但是显示的内容更加简单,也是查看/var/run/utmp日志。
1 | [root@localhost ~]# who |
3.last命令
last命令是查看系统所有登陆过的用户信息的,包括正在登陆的用户和之前登陆的用户。这个命令查看的是/var/log/wtmp痕迹日志文件。
1 | [root@localhost ~]# last |
4.lastlog命令
lastlog命令是查看系统中所有用户最后一次的登陆时间的命令,他查看的日志是/var/log/lastlog文件。
1 | [root@localhost ~]# lastlog |
5.lastb命令
lastb命令是查看错误登陆的信息的,查看的是/var/log/btmp痕迹日志:
1 | [root@localhost ~]# lastb |
十二、挂载命令
1.mount命令基本格式
linux所有存储设备都必须挂载使用,包括硬盘
- 命令名称:mount
- 命令所在路径:/bin/mount
- 执行权限:所有用户
说了这么多,命令的具体格式如下:
1 | [root@localhost ~]# mount [-l] |
参数 | 说明 |
---|---|
atime/noatime | 更新访问时间/不更新访问时间。访问分区文件时,是否更新文件的访问时间,默认为更新 |
async/sync | 异步/同步,默认为异步 |
auto/noauto | 自动/手动,mount –a命令执行时,是否会自动安装/etc/fstab文件内容挂载,默认为自动 |
defaults | 定义默认值,相当于rw,suid,dev,exec,auto,nouser,async这七个选项 |
exec/noexec | 执行/不执行,设定是否允许在文件系统中执行可执行文件,默认是exec允许 |
remount | 重新挂载已经挂载的文件系统,一般用于指定修改特殊权限 |
rw/ro | 读写/只读,文件系统挂载时,是否具有读写权限,默认是rw |
suid/nosuid | 具有/不具有SUID权限,设定文件系统是否具有SUID和SGID的权限,默认是具有 |
user/nouser | 允许/不允许普通用户挂载,设定文件系统是否允许普通用户挂载,默认是不允许,只有root可以挂载分区 |
usrquota | 写入代表文件系统支持用户磁盘配额,默认不支持 |
grpquota | 写入代表文件系统支持组磁盘配额,默认不支持 |
举例
1 | 例1: |
如果我们做试验修改了特殊选项,一定要记得住,而且确定需要修改,否则非常容易出现系统问题,而且还找不到哪里出现了问题。
1 | 例3:挂载分区 |
2.光盘挂载
光盘挂载的前提依然是指定光盘的设备文件名,不同版本的Linux,设备文件名并不相同:
CentOS 5.x以前的系统,光盘设备文件名是/dev/hdc
CentOS 6.x以后的系统,光盘设备文件名是/dev/sr0
不论哪个系统都有软连接/dev/cdrom,与可以作为光盘的设备文件名
1 | [root@localhost ~]# mount -t iso9660 /dev/cdrom /mnt/cdrom/ |
用完之后记得卸载:
1 | [root@localhost ~]# umount /dev/sr0 |
注意:卸载的时候需要退出光盘目录,才能正常卸载
3. 挂载U盘
U盘会和硬盘共用设备文件名,所以U盘的设备文件名不是固定的,需要手工查询,查询命令:
1 | [root@localhost ~]# fdisk -l |
然后就是挂载了,挂载命令如下:
1 | [root@localhost ~]# mount -t vfat /dev/sdb1 /mnt/usb/ |
如果U盘中有中文,会发现中文是乱码。Linux要想正常显示中文,需要两个条件:
- 安装了中文编码和中文字体
- 操作终端需要支持中文显示(纯字符终端,是不支持中文编码的)
而我们当前系统是安装了中文编码和字体,而xshell远程终端是Windows下的程序,当然是支持中文显示的。那之所以挂载U盘还出现乱码,是需要在挂载的时候,手工指定中文编码,例如:
1 | [root@localhost ~]# mount -t vfat -o iocharset=utf8 /dev/sdb1 /mnt/usb/ |
如果需要卸载,可以执行以下命令:
1 | [root@localhost ~]# umount /mnt/usb/ |
4、挂载NTFS分区
4.1 Linux的驱动加载顺序:
驱动直接放入系统内核之中。这种驱动主要是系统启动加载必须的驱动,数量较少。
驱动以模块的形式放入硬盘。大多数驱动都已这种方式保存,保存位置在/lib/modules/3.10.0-862.el7.x86_64/kernel/中。驱动可以被Linux识别,但是系统认为这种驱动一般不常用,默认不加载。如果需要加载这种驱动,需要重新编译内核,而NTFS文件系统的驱动就属于这种情况。
硬件不能被Linux内核识别,需要手工安装驱动。当然前提是厂商提供了该硬件针对Linux的驱动,否则就需要自己开发驱动了。
4.2使用NTFS-3G安装NTFS文件系统模块
下载NTFS-3G插件我们从网站http://www.tuxera.com/community/ntfs-3g-download/下载NTFS-3G插件到Linux服务器上。
安装NTFS-3G插件
在编译安装NTFS-3G插件之前,要保证gcc编译器已经安装。具体安装命令如下:
1 | [root@localhost ~]# tar -zxvf ntfs-3g_ntfsprogs-2013.1.13.tgz |
安装就完成了,已经可以挂载和使用Windows的NTFS分区了。不过需要注意挂载分区时的文件系统不是ntfs,而是ntfs -3g。挂载命令如下:
1 | [root@localhost ~]# mount -t ntfs-3g 分区设备 文件名 挂载点 |