## Liunx 常用命令 ##
## 注意,在Linux中,文件没有创建时间。
1. ls : 查看当前文件夹下的所有文件
2. mkdir -- 创建一个新的文件夹
- mkdir 参数 文件名
- mkdir -p 文件名/文件名/文件名 -- 递归建立所需目录
3. rmdir -- 删除一个文件夹
- rmdir 参数 文件名
- rmdir -p 文件名/文件名/文件名/.. -- 递归删除目录
4. touch --
意思是触摸,如果文件不存在,则会建立空文件;如果文件已经存在,则会修改文件的时间戳(访问时间、数据修改时间、状态修改时间都会改变)。
- touch 文件名
5. stat -- 在 Linux 中,文件有访问时间、数据修改时间、状态修改时间这三个时间,而没有创建时间。
stat 是査看文件详细信息的命令,而且可以看到文件的这三个时间
- start 参数 文件名
- start -f 文件名 -- 査看文件所在的文件系统信息,而不是査看文件的信息。
6. cat -- 命令用于査看文件内容,不论文件内容有多少,都会一次性显示。如果文件非常大,那么文件开头的内容就看不到了。
- cat 文件名
- cat -n 文件名 -- 会显示行数
- cat -A 文件名 -- 相当于"-vET"选项,可以査看文本中的所有隐藏符号,包括回车符 ($)、Tab 键 (^I)
7. more -- 如果文件过大,则 cat 命令会有心无力,这时 more 命令的作用更加明显。
- more 文件名
8. head -- 用来显示文件开头的命令
- head 文件名 -- 默认显示文件前十行的文件
- head -n 20 文件名 / head -20 文件名 -- 显示文件前20行
9. tail -- 显示文件结尾的命令
- tail 文件名 -- 默认显示文件后十行的文件
- tail -n 20 文件名 / tail -20 文件名 -- 显示文件后20行
- tail -f 文件名 -- 监听文件的新増内容 , 光标不会退出文件,而会一直监听在文件的结尾处
10. In -- 在文件之间建立链接
- 选项:
-s:建立软链接文件。如果不加"-s"选项,则建立硬链接文件;
-f:强制。如果目标文件已经存在,则删除目标文件后再建立链接文件;
- In 选项 源文件 目标文件
如果创建硬链接:
[root@localhost ~]# touch cangls
[root@localhost ~]# ln /root/cangls /tmp/
#建立硬链接文件,目标文件没有写文件名,会和原名一致
#也就是 /root/cangls 和 /tmp/cangls 是硬链接文件
如果创建软链接:
[root@localhost ~]# touch bols
[root@localhost ~]# In /root/bols /tmp/
#建立软链接文件
这里需要注意,软链接文件的源文件必须写成绝对路径,而不能写成相对路径(硬链接没有这样的要求);否则软链接文件会报错。这是初学者非常容易犯的错误。
11. rm -- 删除文件或目录
- 选项:
-f:强制删除(force)
-i:交互删除,在删除之前会询问用户
-r:递归删除,可以删除目录(recursive)
- rm 选项 文件或目录
强制删除整个文件夹(不管里边有多少个子类):rm -rf 目录名
12. cp -- 复制文件和目录
- 选项:
-a:相当于 -d、-p、-r 选项的集合,这几个选项我们一一介绍;
-d:如果源文件为软链接(对硬链接无效),则复制出的目标文件也为软链接;
-i:询问,如果目标文件已经存在,则会询问是否覆盖;
-l:把目标文件建立为源文件的硬链接文件,而不是复制源文件;
-s:把目标文件建立为源文件的软链接文件,而不是复制源文件;
-p:复制后目标文件保留源文件的属性(包括所有者、所属组、权限和时间);
-r:递归复制,用于复制目录;
- cp 选项 源文件 目标文件
13. mv -- 移动文件或改名
- 选项:
-f:强制覆盖,如果目标文件已经存在,则不询问,直接强制覆盖;
-i:交互移动,如果目标文件已经存在,则询问用户是否覆盖(默认选项);
-n:如果目标文件已经存在,则不会覆盖移动,而且不询问用户;
-v:显示详细信息;
- mv 选项 源文件目标文件
14. chmod -- 修改文件或目录的权限
- 选项:
-R:递归设置权限,也就是给子目录中的所有文件设定权限
- chmod 选项 权限模式 文件名
用户身份:
-u:代表所有者(user)。
-g:代表所属组(group)。
-o:代也人(other)。
-a:代表全部身份(all)。
赋予方式:
-+:加入权限。
--:减去权限。
-=:设置权限。
权限:
-r:读取权限(read)。
-w:写权限(write)。
-x:执行权限(execute)。
数字权限 : chmod 数字 文件名
4:代表"r"权限。
2:代表"w"权限。
1:代表"x"权限。
解释一下"755权限":
第一个数字"7":代表所有者的权限是"4+2+1",也就是读、写和执行权限。
第二个数字"5":代表所属组的权限是"4+1",也就是读和执行权限。
第三个数字"5":代表其他人的权限是"4+1",也就是读和执行权限。
数字权限的赋予方式更加简单,但是需要用户对这几个数字更加熟悉。其实常用权限也并不多,只有如下几个:
644:这是文件的基本权限,代表所有者拥有读、写权限,而所属组和其他人拥有只读权限。
755:这是文件的执行权限和目录的基本权限,代表所有者拥有读、写和执行权限,而所属组和其他人拥有读和执行权限。
777:这是最大权限。在实际的生产服务器中,要尽力避免给文件或目录赋予这样的权限,这会造成一定的安全隐患。
15. 读写执行权限 -- (-r、-w、-x) :
- 权限对文件的作用:
-读(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:完全权限。
16. chown -- 修改文件和目录的所有者和所属组 :
- 选项:
-R: 递归设置权限,也就是给子目录中的所有文件设置权限
- chown 选项 所拥有者: 所属文件或目录
- chown user 文件名 -- 将文件的所有者变成user
- chown user:user 文件名 -- ":"之前是文件的所有者,之后是所属组。这里的":"也可以使用"."代替
17. chgrp -- 修改文件和目录的所属组 :
- chgrp user test2 -- #修改test2文件的所属组为user用户组
18. umask -- 令新建文件和目录拥有默认权限
- umask 002 -- umask 默认权限可以直接通过命令来进行修改,通过命令进行的修改只能临时生效,一旦重启或重新登录就会失效
默认权限的计算方法 :
- 新建立目录的默认权限是755,新建立文件的默认权限是644
- 文件的默认权限最大只能是 666,换算成字母就是"-rw-rw-rw-";而 umask 的值是022,也换算成字母就是"-----w--w-"。把两个字母权限相减,
得到的就是新建文件的默认权限:(-rw-rw-rw-) - (-----w--w-)=(-rw-r--r--)。
- 目录的默认权限最大可以是 777,换算成字母就是"drwxrwxrwx";而 umask的值是022,也换算成字母就是"d----w--w-"。也把两个字母权限相减,
得到的就是新建目录的默认权限:(drwxrwxrwx) - (d----w--w-)=(drwx-r-xr-x)。
19. man -- 显示联机帮助手册 (Linux 自带的帮助命令是最准确、最可靠的资料)
- 选项:
-f:査看命令拥有哪个级别的帮助
-k: 査看和命令相关的所有帮助
- man 选项 命令 -- man -k useradd
- man 命令的快捷键:
上箭头 向上移动一行
下箭头 向下移动一行
PgUp 向上翻一页
PgDn 向下翻一页
g 移动到第一页
G 移动到最后一页
q 退出
/字符串 从当前页向下搜索字符串
?字符串 从当前页向上搜索字符串
n 当搜索字符串时,可以使用n键找到下一个字符串
N 当搜索字符串时,使用N键反向查询字符串。也就是说,如果使用“/字符串”方式搜索,
则N键表示向上搜索字符串;如果使用“?字符串”方式搜索,则N键表示向下搜索字符串
- man命令的帮助级别 -- 在执行 man 命令时,命令的开头会有一个数字标识这个命令的帮助级别
- man ls -- LS(1) User Commands LS(1)
- man命令的帮助级别:
级 别 作 用
1 普通用户可以执行的系统命令和可执行文件的帮助
2 内核可以调用的函数和工具的帮助
3 C语言函数的帮助
4 设备和特殊文件的帮助
5 配置文件的帮助
6 游戏的帮助(个人版的Linux中是有游戏的)
7 杂项的帮助
8 超级用户可以执行的系统命令的帮助
9 内核的帮助
20. info -- info格式的命令帮助指令
- info 命令也可以获取命令的帮助。和 man 命令不同的是,info 命令的帮助信息是一套完整的资料,
每个单独命令的帮助信息只是这套完整资料中的某一个小章节。大家可以把 info
帮助信息看成一部独立的电子书,所以每个命令的帮助信息都会和书籍一样,拥有章节编号
- info 命令常用快捷键:
快捷键 作 用
上箭头 向上移动一行
下箭头 向下移动一行
PgUp 向上翻一页
PgDn 向下翻一页
Tab 在有"*"符号的节点间进行切换
回车 进入有"*"符号的子页面,査看详细帮助信息
u 进入上一层信息(回车是进入下一层信息)
n 进入下一小节信息
P 进入上一小节信息
? 査看帮助信息
q 退出info信息
21. help -- 显示命令的帮助信息
- help 内置命令
- ls --help -- 绝大多数命令都可以使用"--help"选项来査看帮助,这也是一种获取帮助的方法
22. whereis -- 査找二进制命令、源文件和帮助文档
- whereis 命令不能搜索普通文件,而只能搜索系统命令
- 选项:
-b: 只査找二制命令;
-m: 只查找帮助文档;
- whereis 选型 命令
23. which -- 列出命令的所在路径
- which 命令
- 示:
[root@localhost ~]# which ls
alias ls='ls --color=auto'/bin/ls
#which 命令可以查找到命令的别名和命令所在位置
#alias 这段就是别名,别名就是小名,也就是说,当我们输入 ls 命令时,实际上执行的是 ls--color=auto
24. locate -- 按照文件名搜索文件
- whereis 和 which 命令都是只能搜索系统命令的命令,而 locate 命令才是可以按照文件名搜索普通文件的命令。
- 选项:
-i:忽略大小写
- locate 选项 文件名
- locate 命令不会直接搜索硬盘空间,而会搜索 locate 数据库。这样做的好处是耗费系统资源小、搜索速度快;
缺点是不是实时更新的,而要等用户退出登录或重启系统时,locate 数据库才会更新,所以我们无法查找到新建立的文件。
- [root@localhost ~]# updatedb -- 以通过 updatedb 命令来手工更新这个数据
25. find -- 在目录中查找文件
- find 是 Linux 中强大的搜索命令,不仅可以按照文件名搜索文件,还可以按照权限、大小、时间、inode 号等来搜索文件。
但是 find 命令是直接在硬盘中进行搜索的,如果指定的搜索范围过大,find命令就会消耗较大的系统资源,导致服务器压力过大。
所以,在使用 find 命令搜索时,不要指定过大的搜索范围。
- find 命令是完全匹配的,必须和搜索关键字一模一样才会列出
- find 搜索路径 [选项] 搜索内容
- 命令格式:
find 是比较特殊的命令,它有两个参数:
第一个参数用来指定搜索路径;
第二个参数用来指定搜索内容。
- 选项:
-name: 按照文件名搜索;
-iname: 按照文件名搜索,不区分文件名大小;
-inum: 按照 inode 号搜索;
- 常用方法:
- a.按照文件名搜索
- find /-name yum.conf -- 查找文件名 为 yum.conf 的文件
- find.-inum 262147 -- 可以按照 inode 号来搜索文件
- b.按照文件大小搜索
- 选项:(这里的"+"的意思是搜索比指定大小还要大的文件,"-" 的意思是搜索比指定大小还要小的文件。)
-size[+-]大小:按照指定大小搜索文件
- 注意项:
- 搜索单位是c,按照字节搜索
- 搜索单位是w,按照双字节(中文)搜索
- 按照KB单位搜索,必须是小写的k
- 按照MB单位搜索,必须是大写的M
- 按照GB单位搜索,必须是大写的G
- find.-size 25k -- 当前目录下,査找大小刚好是25KB的文件
- find.-size +25k -- 搜索小于25KB的文件
- find.-size 1207c -- 按照字节搜索
- c.按照修改时间搜索
- Linux 中的文件有访问时间(atime)、数据修改时间(mtime)、状态修改时间(ctime)这三个时间,我们也可以按照时间来搜索文件。
选项:
-atime [+-]时间: 按照文件访问时间搜索
-mtime [+-]时间: 按照文改时间搜索
-ctime [+-]时间: 按照文件修改时间搜索这三个时间的区别我们在 stat 命令中已经解释过了,
这里用 mtime 数据修改时间来举例,重点说说 "[+-]"时间的含义。
-5:代表@内修改的文件。
5:代表前5~6天那一天修改的文件。
+5:代表6天前修改的文件。
- find.-mtime -5 -- 查找5天内修改的文件
- d.按照权限搜索
- 选项:
-perm 权限模式:査找文件权限刚好等于"权限模式"的文件
-perm -权限模式:査找文件权限全部包含"权限模式"的文件
-perm +权限模式:査找文件权限包含"权限模式"的任意一个权限的文件
- 常用方法:
-1. "-perm权限模式"
[root@localhost test]#find.-perm 444
./test2
[root@localhost test]#find.-perm 200
./test4
#按照指定权限搜索文件,文件的权限必须和搜索指定的权限一致,才能找到
-2. "-perm-权限模式"
如果使用"-权限模式",是代表的是文件的权限必须全部包含搜索命令指定的权限模式,才可以找到。
[root@localhost test]#find .-perm -200
./test4 <-此文件权限为200
./test3 <-此文件权限为600
./testl <-此文件权限为755
#搜索文件的权限包含200的文件,不会找到test2文件,因为test2的权限为444,不包含200权限
-3. "-perm+权限模式"
-perm+权限模式"是只要包含任意一个指定权限,就可以找到。
[root@localhost test]# find .-perm +444
./test4 <-此文件权限为200
./test3 <-此文件权限为600
./testl <-此文件权限为755
#搜索文件的权限包含200的文件,不会找到test2文件,因为test2的权限为444,不包含200权限。
- e.按照所有者和所属组搜索
- 选项:
-uid 用户 ID:按照用户 ID 査找所有者是指定 ID 的文件
-gid 组 ID:按照用户组 ID 査找所属组是指定 ID 的文件
-user 用户名:按照用户名査找所有者是指定用户的文件
-group 组名:按照组名査找所属组是指定用户组的文件
-nouser:査找没有所有者的文件
- 这组选项比较简单,就是按照文件的所有者和所属组来进行文件的査找。在 Linux 系统中,
绝大多数文件都是使用 root 用户身份建立的,所以在默认情况下,绝大多数系统文件的所有者都是 root
[root@localhost ~]#find.-user root -- 在当前目录中査找所有者是 root 的文件
- f.按照文件类型搜索
- 选项:
-type d:查找目录
-type f:查找普通文件
-type l:查找软链接文件
- [root@localhost ~]# find /etc -type d -- 查找/etc/目录下有哪些子目录
- g.逻辑运算符
- 选项:
-a:and逻辑与
-o:or逻辑或
-not:not逻辑非
-1) -a:and逻辑与 -- -a 代表逻辑与运算,也就是 -a 的两个条件都成立,find 搜索的结果才成立。
- [root@localhost ~]# find.-size +2k -a -type f -- 在当前目录下搜索大于2KB,并且文件类型是普通文件的文件
- [root@localhost ~]# find.-mtime -3 -a -perm 644 -- 在当前目录下搜索3天以内修改过,并且权限是644的文件
-2) -o:or逻辑或 -- -o 选项代表逻辑或运算,也就是 -o 的两个条件只要其中一个成立,find 命令就可以找到结果。
- [root@localhost ~]#find.-name cangls -o -name bols -- 在当前目录下搜索文件名要么是cangls的文件,要么是bols的文件
-3) -not:not逻辑非 -- -not是逻辑非,也就是取反的意思。
- [root@localhost ~]# find.-not -name cangls -- 在当前目录下搜索文件名不是cangls的文件
26. zip -- 压缩文件或目录
- 选项:
-r:压缩目录
- zip [选项] 压缩包名 源文件或源目录
- zip 压缩命令需要手工指定压缩之后的压缩包名,注意写清楚扩展名,以便解压缩时使用。
[root@localhost ~]# zip ana.zip anaconda-ks.cfg
adding: anaconda-ks.cfg (deflated 37%)
#压缩
- 所有的压缩命令都可以同时压缩多个文件,例如:
[root@localhost ~]# zip test.zip install.log install.log.syslog
adding: install.log (deflated 72%)
adding: install.log.syslog (deflated 85%)
#同时压缩多个文件到test.zip压缩包中
- 如果想要压缩目录,则需要使用"-r"选项
[root@localhost ~]# mkdir dir1
#建立测试目录
[root@localhost ~]# zip -r dir1.zip dir1
adding: dir1/(stored 0%)
#压缩目录
[root@localhost ~]# ls -dl dir1.zip
-rw-r--r-- 1 root root 160 6月 1716:22 dir1.zip
#压缩文件生成
27. unzip -- 解压zip格式的压缩包
- 选项:
-d: 指定解压缩位置
- [root@localhost ~]# unzip [选项] 压缩包名
- 不论是文件压缩包,还是目录压缩包,都可以直接解压缩,例如:
[root@localhost ~]# unzip dir1.zip
Archive: dir1.zip
creating: dirl/
#解压缩
- 也可以手工指定解压缩位置,例如:
[root@localhost ~]# unzip -d /tmp/ ana.zip
Archive: ana.zip
inflating: /tmp/anaconda-ks.cfg
#把压缩包解压到指定位置
28. gzip -- 压缩文件或目录
- 选项:
-c:将压缩数据输出到标准输出中,可以用于保留源文件;
-d:解压缩;
-r:压缩目录;
-v:显示压缩文件的信息;
-数字:用于指定压缩等级,-1 压缩等级最低,压缩比最差;-9 压缩比最高。默认压缩比是 -6;
- [root@localhost ~]# gzip [选项] 源文件
- 【例 1】基本压缩。
gzip 压缩命令非常简单,甚至不需要指定压缩之后的压缩包名,只需指定源文件名即可。
[root@localhost ~]# gzip install.log
#压缩instal.log 文件
[root@localhost ~]# ls
anaconda-ks.cfg install.log.gz install.log.syslog
#压缩文件生成,但是源文件也消失了
- 【例 2】保留源文件压缩。
在使用 gzip 命令压缩文件时,源文件会消失,从而生成压缩文件。
[root@localhost ~]# gzip -c anaconda-ks.cfg >anaconda-ks.cfg.gz
#使用-c选项,但是不让压缩数据输出到屏幕上,而是重定向到压缩文件中,#这样可以缩文件的同时不删除源文件
[root@localhost ~]# ls
anaconda-ks.cfg anaconda-ks.cfg.gz install.log.gz install.log.syslog
#可以看到压缩文件和源文件都存在
- 【例 3】 压缩目录。
在 Linux 中,打包和压缩是分开处理的。而 gzip 命令只会压缩,不能打包,所以才会出现没有打包目录,而只把目录下的文件进行压缩的情况。
[root@localhost ~]# mkdir test
[root@localhost ~]# touch test/test1
[root@localhost ~]# touch test/test2
[root@localhost ~]# touch test/test3 #建立测试目录,并在里面建立几个测试文件
[root@localhost ~]# gzip -r test/
#压缩目录,并没有报错
[root@localhost ~]# ls
anaconda-ks.cfg anaconda-ks.cfg.gz install.log.gz install.log.syslog test
#但是査看发现test目录依然存在,并没有变为压缩文件
[root@localhost ~]# ls test/
testl .gz test2.gz test3.gz
#gzip命令不会打包目录,而是把目录下所有的子文件分别压缩
29. gunzip -- 解压缩文件或目录
- [root@localhost ~]# gunzip install.log.gz
- 常用方法:
- 常规用法就是直接解压缩文件,例如:
[root@localhost ~]# gunzip install.log.gz
- 如果要解压缩目录下的内容,则依然使用"-r"选项,例如:
[root@localhost ~]# gunzip -r test/
- "gunzip -r"依然只会解压缩目录下的文件,而不会解打包。要想解压缩".gz"格式,还可以使用 "gzip -d"命令,例如:
[root@localhost ~]# gzip -d anaconda-ks.cfg.gz
- 查看".gz"格式压缩的文本文件内容
[root@localhost ~]# zcat anaconda-ks.cfg.gz
30. bzip2 -- bz2格式的压缩命令 - 【例 2】压缩的同时保留源文件
bzip 命令可以直接使用"-k"选项来保留源文件,而不用像 gzip 命令一样使用输出重定向来保留源文件。例如:
[root@localhost ~]# bzip2 -k install.log.syslog
#压缩
[root@localhost ~]# ls
anaconda-ks.cfg.bz2 install.loginstalLlogsyslog install.logsyslogbz2
#压缩文件和源文件都存在
31. bunzip -- bz2格式的解压缩命令
- [root@localhost ~]# bunzip2 [选项] 源文件
- 选项:
-k:解压缩时,保留源文件
- 常用方法:
- gunzip2 命令来进行解压缩,例如:
[root@localhost ~]# bunzip2 anaconda-ks.cfg.bz2
- ".bz2"格式也可以使用"bzip2 -d 压缩包"命令来进行解压缩,例如:
[root@localhost ~]# bzip2 -d install.log.syslog.bz2
- 査看".bz2"格式压缩的文本文件内容
和".gz"格式一样,".bz2"格式压缩的纯文本文件也可以不解压缩直接査看,使用的命令是 bzcat。例如:
[root@localhost ~]# bzcat install.log.syslog.bz2
32. tar -- 打包与解打包命令
- 选项:
-c:打包;
-f:指定压缩包的文件名。压缩包的扩展名是用来给管理员识别格式的,所以一定要正确指定扩展名;
-v:显示打包文件过程;
- [root@localhost ~]#tar [选项] [-f 压缩包名] 源文件或目录
- 常用方法:
- 打包命令格式
- 【例 1】基本使用
- 打包一个文件
[root@localhost ~]# tar -cvf anaconda-ks.cfg.tar anaconda-ks.cfg
#把anacondehks.cfg打包为 anacondehks.cfg.tar文件
- 选项"-cvf"一般是习惯用法,记住打包时需要指定打包之后的文件名,而且要用".tar"作为扩展名。那打包目录呢?我们也试试:
[root@localhost ~]# ll -d test/
drwxr-xr-x 2 root root 4096 6月 17 21:09 test/
#test是我们之前的测试目录
[root@localhost ~]# tar -cvf test.tar test/
test/
test/test3
test/test2
test/test1
#把目录打包为test.tar文件
tar命令也可以打包多个文件或目录,只要用空格分开即可。例如:
[root@localhost ~]# tar -cvf ana.tar anaconda-ks.cfg /tmp/
#把anaconda-ks.cfg文件和/tmp目录打包成ana.tar文件包
- 【例 2】打包压缩目录。
- 压缩命令不能直接压缩目录,我们就先用 tar 命令把目录打成数据包,然后再用 gzip 命令或 bzip2 命令压缩。例如:
root@localhost ~]#ll -d test test.tar
drwxr-xr-x 2 root root 4096 6月 17 21:09 test
-rw-r--r-- 1 root root 10240 6月 18 01:06 test.tar
#我们之前已经把test目录打包成test.tar文件
[root@localhost ~]# gzip test.tar
[root@localhost ~]# ll test.tar.gz
-rw-r--r-- 1 root root 176 6月 18 01:06 test.tar.gz
#gzip命令会把test.tar压缩成test.tar.gz
[root@localhost ~]# gzip -d test.tar.gz
#解压缩,把test.tar.gz解压缩为test.tar
[root@localhost ~]# bzip2 test.tar
[root@localhost ~]# ll test.tar.bz2
-rw-r--r-- 1 root root 164 6月 18 01:06 test.tar.bz2
#bzip2命令会把test.tar压缩为 test.tar.bz2格式
- 解打包命令格式
- 选项:
-x:解打包;
-f:指定压缩包的文件名;
-v:显示打包文件过程;
-t:测试,就是不解打包,只是査看包中有哪些文件;
-C 目录:指定解打包位置;
- [root@localhost ~]#tar [选项] 压缩包
- 常用方法:
- 解打包到当前目录下
[root@localhost ~]# tar -xvf anaconda-ks.cfg. tar
- 如果使用"-xvf"选项,则会把包中的文件解压到当前目录下。如果想要指定解压位置,则需要使用"-C(大写)"选项。例如:
[root@localhost ~]# tar -xvf test.tar -C /tmp
#把文件包test.tar解打包到/tmp/目录下
- 如果只想査看文件包中有哪些文件,则可以把解打包选项"-x"更换为测试选项"-t"。例如:
[root@localhost ~]# tar -tvf test.tar
drwxr-xr-x root/root 0 2016-06-17 21:09 test/
-rw-r-r- root/root 0 2016-06-17 17:51 test/test3
-rw-r-r- root/root 0 2016-06-17 17:51 test/test2
-rw-r-r- root/root 0 2016-06-17 17:51 test/test1
#会用长格式显示test.tar文件包中文件的详细信息
- ".tar.gz"和".tar.bz2" 格式
- 选项:
-z:压缩和解压缩 ".tar.gz"格式
-j:压缩和街压缩 ".tar.bz2"格式
- [root@localhost ~]#tar [选项] 压缩包 源文件或目录
- 常用方法:
- 【例 1】压缩与解压缩 ".tar.gz"格式。
a. 我们先来看看如何压缩".tar.gz"格式:
[root@localhost ~]# tar -zcvf tmp.tar.gz /tmp/
#把/temp/目录直接打包压缩为".tar.gz"格式,通过"-z"来识别格式,"-cvf"和打包选项一致
b. 解压缩也只是在解打包选项"-xvf"前面加了一个"-z"选项。
[root@localhost ~]# tar -zxvf tmp.tar.gz
#解压缩与解打包".tar.gz"格式
前面讲的选项"-C"用于指定解压位置、"-t"用于査看压缩包内容,在这里同样适用。
- 【例 2】压缩与解压缩".tar.bz2"格式。
a.和".tar.gz"格式唯一的不同就是"-zcvf"选项换成了 "-jcvf"。
[root@localhost ~]# tar -jcvf tmp.tar.bz2 /tmp/
#打包压缩为".tar.bz2"格式,注意压缩包文件名
[root@localhost ~]# tar -jxvf tmp.tar.bz2
#解压缩与解打包".tar.bz2"格式
把文件直接压缩成".tar.gz"和".tar.bz2"格式,才是 Linux 中最常用的压缩方式,这是大家一定要掌握的压缩和解压缩方法。
33. sync -- 刷新文件系统缓冲区
- sync 命令的作用就是把内存中的数据强制向硬盘中保存。这个命令在常规关机的命令中其实会自动执行,
但如果不放心,则应该在关机或重启之前手工执行几次,避免数据丟失。
- [root@localhost ~]# sync -- 直接执行
记得关机或重启之前多执行几次 sync 命令,多一重保险总是好的。
34. shutdown -- 关机和重启
- 选项:
-c:取消已经执行的 shutdown 命令;
-h:关机;
-r:重启;
- [root@localhost ~]# shutdown [选项] 时间 [警告信息]
- 常用方法:
- 【例 1】重启与定时重启。
a.先来看看如何使用 shutdown 命令进行重启:
[root@localhost ~]# shutdown -r now
#重启, now是现在重启的意思
[root@localhost ~]# shutdown -r 05:30
#指定时间重启,但会占用前台终端
[root@localhost ~]# shutdown -r 05:30 &
#把定义重启命令放入后台,&是后台的意思
[root@localhost ~]# shutdown -c
//取消定时重启
[root@localhost ~]# shutdown -r +10
#10分钟之后重启
- 【例 2】关机和定时关机。
[root@localhost ~]# shutdown -h now
#现在关机
[root@localhost ~]# shutdown -h 05:30
#指定时间关机
35. 关机和重启命令
-a. shutdown命令
- 选项:
-c:取消已经执行的 shutdown 命令;
-h:关机;
-r:重启;
- [root@localhost ~]# shutdown [选项] 时间 [警告信息]
- 常用方法:
- 【例 1】重启与定时重启。
先来看看如何使用 shutdown 命令进行重启:
[root@localhost ~]# shutdown -r now
#重启, now是现在重启的意思
[root@localhost ~]# shutdown -r 05:30
#指定时间重启,但会占用前台终端
[root@localhost ~]# shutdown -r 05:30 &
#把定义重启命令放入后台,&是后台的意思
[root@localhost ~]# shutdown -c
//取消定时重启
[root@localhost ~]# shutdown -r +10
#10分钟之后重启
- 【例 2】关机和定时关机。
[root@localhost ~]# shutdown -h now
#现在关机
[root@localhost ~]# shutdown -h 05:30
#指定时间关机
-b. reboot命令
[root@localhost ~]# reboot
#重启
-c. halt和poweroff命令
这两个都是关机命令,直接执行即可。
[root@localhost ~】# halt
#关机
[root@localhost ~】# poweroff
#关机
-d. init命令
init 是修改 Linux 运行级别的命令,也可以用于关机和重启。
[root@localhost~]# init 0
#关机,也就是调用系统的 0 级别
[root@localhost ~】# init 6
#重启,也就是调用系统的 6 级别
36. setup -- 系统配置工具
- Linux 当然也需要配置 IP 地址才可以正常使用网络。其实 Linux 主要是通过修改网卡配置文件来永久修改 IP 地址的。
- setup 是一个简化命令,是 Red Hat 系列专有的命令,其他的 Linux 系列不一定有此命令。
- 如果想让 IP 地址配置生效,则还需要重启网络服务。
[root@localhost ~]# service network restart
#重启网络服务
- 手工开启网卡
在 CentOS 6.x 中,eth0 网卡是默认没有开启的,需要修改网卡配置文件手工开启。例如:
[root@localhost ~]# vi /etc/sysconfig/network-scripts/ ifcfg-eth0
ONBOOT=no
…省略部分内容...
#在网卡配置文件中,ONBOOT默认是no
手工把 ONBOOT 选项改为 yes,然后再重启网络服务(service network restart),就会发现 eth0 网卡启动了,IP 地址也可以正常使用了。
37. ifconfig -- 配置网络接口
- ifconfig 是 Linux 中査看和临时修改 IP 地址的命令,
- 查看IP地址信息:
- ifconfig 命令最主要的作用就是査看 IP 地址的信息,直接输入ifconfig命令即可。
[root@localhost ~]# ifconfig
eth0 Link encap:Ethernet HWaddr 00:OC:29:C5:FB:AA #eth0网卡信息 网络类型为以太网 MAC地址
inet addr:192.168.44.3 Beast:192.168.44.255 Mask:255.255.255.0
#IP地址 广播地址 子网掩码
inet6 addr: fe80::20c:29ff:fec5:fbaa/64 Scope:Link #IPv6的地址(目前不生效)
UP BROADCAST RUNNING MULTICAST MTU:1500 Metric:1 #网络参数 最大传输单元数据包转送次数
RX packets:881 errors:0 dropped:0 overruns:0 frame:0
#接收到的数据包惰况
TX packets:8S3 errors:0 dropped:0 overruns:0 carrier:0
#发送的数据包情况
collisions:0 txqueuelen:1000
#数据包碰撞 数据缓冲区长度
RX bytes:82229 (80.3 KiB) TX bytes:273463 (267.0 KiB)
#接收包的大小 发送包的大小
Interrupt:19 Base address:0x2000
#IRQ中街 内存地址
lo Link encap:Local Loopback
#本地回环网卡信息
inet addr:127.0.0.1 Mask:255.0.0.0
inet6 addr: ::1/128 Scope:Host
UP LOOPBACK RUNNING MTU:16436 Metric:1
RX packets:12 errors:0 dropped:0 overruns:0 frame:0
TX packets:12 errors:0 dropped:0 overruns:0 carrier:0 collisions:0 txqueuelen:0
RX bytes:840 (840.0 b) TX bytes:840 (840.0 b)
ifconfig 命令主要用于査看 IP 地址、子网掩码和 MAC 地址这三类信息,其他信息我们有所了解即可。
lo 网卡是 Loopback 的缩写,也就是本地回环网卡,这个网卡的 IP 地址是 127.0.0.1。它只代表我们的网络协议正常,就算不插入网线也可以 ping 通,所以基本没有实际使用价值,
- 临时配置 IP 地址:
ifconfig 命令除可以査看 IP 地址之外,还可以临时配置 IP 地址,但是一旦重启,IP 地址就会失效,
所以我们还是应该使用 setup 命令进行 IP 地址配置。使用 ifconfig 命令临时配置 IP 地址的示例如下:
[root@localhost ~]#ifconfig eth0 192.168.44.3
#配置IP地址,不指定子网掩码就会使用标准子网掩码
[root@localhost ~]#ifconfig eth0 192.168.44.3 netmask 255.255.255.0
#配置IP地址,同时配置子网掩码
38. ping -- 向网络主机发送ICMP请求
- ping 是常用的网络命令,主要通过 ICMP 协议进行网络探测,测试网络中主机的通信情况。
- 选项:
-b: 后面加入广播地址,用于对整个网段进行探测;
-c 次数: 用于指定 ping 的次数;
-s 字节: 指定探测包的大小;
- [root@localhost ~]# ping [选项] IP
- 常用方法:
- 【例 1】 探测与指定主机通信。
[root@localhost ~]#ping 192.168.103.151
PING 192.168.103.151 (192.168.103.151) 56(84) bytes of data.
64 bytes from 192.168.103.151: icmp_seq=1 ttl=128 time=0.300 ms
64 bytes from 192.168.103.151: icmp_seq=2 ttl=128 time=0.481 ms
…省略部分内容...
#探测与指定主机是否通信
注: 这个 ping 命令如果不使用"Ctrl+C"快捷键强行中止,就会一直 ping 下去,
- 【例 2】指定 ping 的次数。
[root@localhost ~]# ping -c 3 192.168.103.151
#只探测3次,就中止ping命令
- 【例 3】 探测网段中的可用主机。
在 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.95ms
64 bytes from 192.168.103.168: icmp_seq=1 ttl=64 time=1.97ms(DUP!)
64 bytes from 192.168.103.252: icmp_seq=1 ttl=64 time=2.29ms(DUP!)
…省略部分内容...
#探测192.168.103.0/24网段中有多少可以通信的主机
39. netstat -- 网络状态查看命令
- 选项:
-a:列出所有网络状态,包括 Socket 程序;
-c秒数:指定每隔几秒刷新一次网络状态;
-n:使用 IP 地址和端口号显示,不使用域名与服务名;
-p:显示 PID 和程序名;
-t:显示使用 TCP 协议端口的连接状况;
-u:显示使用 UDP 协议端口的连接状况;
-I:仅显示监听状态的连接;
-r:显示路由表;
- [root@localhost ~]# netstat [选项]
- 常用方法:
- 【例 1】查看本机开启的端口。
[root@localhost ~]# netstat -tuln
Active Internet connections (only servers)
Proto Recv-Q Send-Q Local Address Foreign Address State
tcp 0 0 0.0.0.0:3306 0.0.0.0:* LISTEN
tcp 0 0 0.0.0.0:11211 0.0.0.0:* LISTEN
tcp 0 0 0.0.0.0:22 0.0.0.0:* LISTEN
tcp 0 0:::11211 :::* LISTEN
tcp 0 0 :::80 :::* LISTEN
tcp 0 0 :::22 :::* LISTEN
udp 0 0 0.0.0.0:11211 0.0.0.0:*
udp 0 0:::11211 :::*
#协议接收队列发送队列本机的 IP 地址及端口号 远程主机的 IP 地址及端口号 状态
- 在这些状态中,我们最常用的就是 LISTEN 和 ESTABLISHED 状态,一种代表正在监听,另一种代表已经连接。
- 这个命令的输出较多:
1) Proto:网络连接的协议,一般就是 TCP 协议或者 UDP 协议。
2) Recv-Q:表示接收到的数据,已经在本地的缓冲中,但是还没有被进程取走。
3) Send-Q:表示从本机发送,对方还没有收到的数据,依然在本地的缓冲中,不具备 ACK 标志的数据包。
4) Local Address:本机的 IP 地址和端口号。
5) ForeignAddress:远程主机的 IP 地址和端口号。
6) State:状态。常见的状态主要有以下几种。
-LISTEN:监听状态,只有 TCP 协议需要监听,而 UDP 协议不需要监听。
-ESTABLISHED:已经建立连接的状态。如果使用"-I"选项,则看不到已经建立连接的状态。
-SYN_SENT:SYN 发起包,就是主动发起连接的数据包。
-SYN_RECV:接收到主动连接的数据包。
-FIN_WAIT1:正在中断的连接。
-FIN_WAIT2:已经中断的连接,但是正在等待对方主机进行确认。
-TIME_WAIT:连接已经中断,但是套接字依然在网络中等待结束。
-CLOSED:套接字没有被使用。
- 【例 2】查看本机有哪些程序开启的端口。
-如果使用"-p"选项,则可以查看到是哪个程序占用了端口,并且可以知道这个程序的 PID。例如:
[root@localhost ~]# netstat -tulnp
Active Internet connections (only servers)
Proto Recv-Q Send-Q Local Address Foreign Address State PID/Program name
tcp 0 0 0.0.0.0:3306 0.0.0.0:* LISTEN 2359/mysqld
tcp 0 0 0.0.0.0:11211 0.0.0.0:* LISTEN 1563/memcached
tcp 0 0 0.0.0.0:22 0.0.0.0:* LISTEN 1490/sshd
tcp 0 0 :::11211 :::* LISTEN 1563/memcached
tcp 0 0 :::80 :::* LISTEN 21025/httpd
tcp 0 0 :::22 :::*
LISTEN 1490/sshd
udp 0 0 0.0.0.0:11211 0.0.0.0:* 1563/memcached
udp 0 0:::11211 :::* 1563/memcached
#比之前的命令多了一个"-p"选项,结果多了可以知道是哪个程序占用了端口
- 【例 3】 查看所有连接。
- 使用选项"-an"可以查看所有连接,包括监听状态的连接(LISTEN)、已经建立连接状态的连接(ESTABLISHED)、Socke
- 程序连接等。因为连接较多,所以输出的内容有很多。例如:
[root@localhost ~]# netstat -an
Active Internet connections (servers and established)
Proto Recv-Q Send-Q Local Address Foreign Address State
tcp 0 0 0.0.0.0:3306 0.0.0.0:* LISTEN
tcp 0 0 0.0.0.0:11211 0.0.0.0:* LISTEN
tcp 0 0 117.79.130.170:80 78.46.174.55:58815 SYN_RECV
tcp 0 0 0.0.0.0:22 0.0.0.0:* LISTEN
tcp 0 0 117.79.130.170:22 124.205.129.99:10379 ESTABLISHED
tcp 0 0 117.79.130.170:22 124.205.129.99:11811 ESTABLISHED
...省略部分内容...
udp 0 0 0.0.0.0:11211 0.0.0.0:*
udp 0 0:::11211 :::*
Active UNIX domain sockets (servers and established)
Proto RefCnt Flags Type State I-Node Path
unix 2 [ACC] STREAM LISTENING 9761 @/var/run/hald/dbus-fr41WkQn1C
…省略部分内容...
从"Active UNIX domain sockets"开始,之后的内容就是 Socke 程序产生的连接,之前的内容都是网络服务产生的连接。我们可以在"-an"选项的输出中看到各种网络连接状态,而之前的"-tuln"选项则只能看到监听状态。
40. write -- 向其他用户发送信息
-在服务器上,有时会有多个用户同时登录,一些必要的沟通就显得尤为重要。比如,我必须关闭某个服务,或者需要重启服务器,
当然需要通知同时登录服务器的用户,这时就可以使用 write 命令。
- [root@localhost ~]# write 用户名 [终端号]
- 常用方法:
write 命令没有多余的选项,我们要向在某个终端登录的用户发送信息,就可以这样来执行命令:
[root@localhost ~]#write user1 pts/1
hello
I will be in 5 minutes to restart, please save your data
#向在pts/1 (远程终端1)登录的user1用户发送信息,使用"Ctrl+D"快捷键保存发送的数据
这时,user1 用户就可以收到你要在 5 分钟之后重启系统的信息了。
41. mail -- 发送和接收电子邮件
- mail 是 Linux 的邮件客户端命令,可以利用这个命令给其他用户发送邮件。
- 常用方法:
- 【例 1】发送邮件。
如果我们想要给其他用户发送邮件,则可以执行如下命令:
[root@localhost ~]# mail userl
Subject: hello <-邮件标题
Nice to meet you! <-邮件具体内容
. <-使用.来结束邮件输入
#发送邮件给user1用户
我们接收到的邮件都保存在"/var/spod/mail/用户名"中,每个用户都有一个以自己的用户名命名的邮箱。
- 【例 2】发送文件内容
如果我们想把某个文件的内容发送给指定用户,则可执行如下命令:
[root@localhost ~]# mail -s "test mail" root </root/ anaconda-ks.cfg
#把/root/anaconda-ks.cfg文件的内容发送给root用户
选项:
-s: 指定邮件标题
我们在写脚本时,有时需要脚本自动发送一些信息给指定用户,把要发送的信息预先写到文件中,是一个非常不错的选择。
- 【例 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 68/1777 "test mail"<-之前收到的由件
>N 2 root Mon Dec 5 23:08 18/602 "hello"
#未阅读编号发件人 时间 标题
&
<-等待用户输入命令
- 可以看到已经接收到的邮件列表,"N"代表未读邮件,如果是已经阅读过的邮件,则前面是不会有这个"N"的;之后的数字是邮件的编号,
我们主要通过这个编号来进行邮件的操作。如餓们想要査看第1邮件,则只需输入邮件的编号"1"就可以了》
- 在交互命令中执行"?",可以查看这个交互界面支持的命令。例如:
&? <-输入命令
mail commands
type<message list> type messages
next goto and type next message
from<message list> give head lines of messages
headers print out active message headers
delete<message list> delete messages
undelete<message list> undelete messages
save<message list> folder append messages to folder and mark as saved
copy<message list> folder append messages to folder without marking them
write<message list> file append message texts to file, save attachments
preserve<message list> keep incoming messages in mailbox even if saved
Reply <message list> reply to message senders
reply<message list> reply to message senders and all recipients
mail addresses mail to specific recipients
file folder change to another folder
quit quit and apply changes to folder
xit quit and discard changes made to folder
! shell escape
cd<directory> chdir to directory or home if none given
list list names of all available commands
这些交互命令是可以简化输入的,比如"headers"命令,就可以直接输入"h",这是列出邮件标题列表的命令。我们解释一下常用的交互命令。
headers:列出邮件标题列表,直接输入"h"命令即可。
delete:删除指定邮件。比如想要删除第二封邮件,可以输入"d2"。
save:保存邮件。可以把指定邮件保存成文件,如"s 2/tmp/test.mair。
quit:退出,并把已经操作过的邮件进行保存。比如移除已删除邮件,保存已阅读邮脾。
exit:退出,但是不保存任何操作。