1. 命令的提示符
[root@localhost ~] #
2. 命令的基本格式
[root@localhost ~] # 命令 [选项] [参数]
[root@localhost ~] # ls [选项] [文件名或目录名]
选项:
-a:显示所有文件
--color=when:支持颜色输出,when的值默认是 always(总显示颜色),也可以是never(从不显示颜色)和auto(自动)
-d:显示目录信息,而不是目录下的文件
-h:人性化显示,按照我们习惯的单位显示文件大小
-i:显示文件的 i 节点号
-l:长格式显示
举几个例子:
[root@localhost ~] # ls -l
total 24
lrwxrwxrwx. 1 root root 7 Apr 26 23:50 bin -> usr/bin
我们已经指导“-l”选项用于显示文件的详细信息,那么“-1”选项显示的这7列分别是什么含义?
选项:是用于调整命令的功能的
参数:是命令的操作对象,如果省略参数,是因为有默认参数
一、 ls 命令
上节的内容
二、 cd 命令
cd 是切换所在目录的命令,这个命令的基本信息如下
1. cd 命令的简化用法
特殊符号 | 作用 |
---|---|
~ | 代表用户的家目录 |
- | 代表上次所在目录 |
. | 代表当前目录 |
… | 代表上级目录 |
2. 绝对路径和相对路径
绝对路径: 以根据目录为参照物,从根目录开始,一级一级进入目录
相对路径: 以当前作为参照物,进行目录查找
三、 mkdir 命令
mkdir 是创建目录的命令,其基本信息如下:
命令格式
[root@localhost ~] # mkdir [选项] 目录名
选项:
-p:递归建立所需目录
四、rmdir 命令
既然有建立目录的命令,就一定会有删除目录的命令 rmdir,其基本信息如下:
命令格式
[root@localhost ~] # rmdir [选项] 目录名
选项:
-p:递归删除目录
rmdir 命令的作用十分有限,因为只能删除空目录,所以一旦目录中有内容,就会报错
这个命令比较“笨”,所以我们不太常用。后续我们不论删除的是文件还是目录,都会使用 rm
一、touch 命令
创建空文件或修改文件时间,这个命令的基本信息如下。
二、stat 命令
stat 是查看文件详细信息的命令,而且可以看到文件的这三个时间,其基本信息如下:
功能描述: 显示文件或文件系统的详细信息
[root@localhost ~]# stat anaconda-ks.cfg
File: ‘anaconda-ks.cfg’
Size: 2956 Blocks: 8 IO Block: 4096 regular file
Device: 803h/2051d Inode: 33574980 Links: 1
Access: (0600/-rw-------) Uid: ( 0/ root) Gid: ( 0/ root)
Context: system_u:object_r:admin_home_t:s0
Access: 2020-04-26 23:57:54.841715229 -0700
Modify: 2020-04-26 23:57:31.854224235 -0700 #数据修改时间
Change: 2020-04-26 23:57:31.854224235 -0700 #状态修改时间
Birth: -
三、cat 命令
cat 命令用来查看文件内容。这个命令的基本信息如下
功能描述: 合并文件并打印输出到标准输出
命令格式
[root@localhost ~] # cat [选项] 文件名
选项:
-A:相当于 -vET 选项的整合,用于列出所有隐藏符号
-E:列出每行结尾的回车符$
-n:显示行号
-T:把 Tab 键用 ^I 显示出来
-v:列出特殊字符
四、more 命令
more 是分屏显示文件的命令,其基本信息如下:
more 命令比较简单,一般不用什么选项,命令会打开一个交互界面,可以识别一些交互命令。常用的交互命令如下
五、less 命令
less 命令和 more 命令类似,只是 more 是分屏显示命令,而 less 是分行显示命令,其基本信息如下
六、 tail 命令
既然有显示文件开头的命令,就会有显示文件结尾的命令。tail 命令的基本信息如下
命令格式
[root@localhost ~] # tail [选项] 文件名
选项:
-n 行数:从文件结尾开始,显示指定行数
-f:监听文件的新增内容
七、ln 命令
我们来看看 ln 命令的基本信息
1. 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/
#建立软链接文件
2. 硬链接与软链接的特征
硬链接特征:
软链接特征:
一、rm 命令
rm 是强大的删除命令,不仅可以删除文件,也可以删除目录。这个命令的基本信息如下。
命令格式
[root@localhost ~] # rm [选项] 文件或目录
选项:
-f:强制删除(force)
-i:交互删除,在删除之前会询问用户
-r:递归删除,可以删除目录(recursive)
二、cp 命令
cp 适用于复制的命令,其基本信息如下:
命令格式
[root@localhost ~] # cp [选项] 源文件 目标文件
选项:
-a:相当于 -dpr 选项的集合,这几个选项我们一一介绍
-d:如果源文件为软链接(对硬盘链接无效),则复制出的目标文件也为软链接
-i:询问,如果目标文件已经存在,则会询问是否覆盖
-p:复制后目标文件保留原文件的属性(包括所有者、所属组、权限和时间)
-r:递归复制,用于复制目录
三、mv 命令
mv 是用来剪切的命令,其基本信息如下:
命令格式
[root@localhost ~] # mv [选项] 源文件 目标文件
选项:
-f:强制覆盖,如果目标文件已经存在,则不询问,直接强制覆盖
-i:交互移动,如果目标文件已经存在,则询问用户是否覆盖(默认选项)
-v:显示详细信息
一、权限的介绍
权限的含义
前面讲解 ls 命令时,我们已经指导长格式显示的第一列就是文件的权限,例如:
[root@localhost ~] # ls -ls install.log
-rw-r--r--. 1 root root 2960 Apr 26 23:58 initial-setup-ks.cfg
第一列的权限位如果不计算最后的 “.” (这个点的含义我们在后面解释),则共有 10 位,这 10 位权限位的含义如图所示:
二、基本权限命令
首先来看修改权限的命令 chmod,其基本信息如下
1. 命令格式
[root@localhost ~] # chmod [选项] 权限模式 文件名
选项:
-R:递归设置权限,也就是给子目录中的所有文件设定权限
2. 权限模式
chmod 命令的权限模式的格式是[ugoa][[+ - =][perms]]“”,也就是“ [用户身份] [赋予方式] [权限]”
的格式,我们来解释一下
3. 数字权限
数字权限的赋予方式是最简单的,但是不如之前的字母权限好记、只管。我们来看看这些数字权限的含义
常用权限
数字权限的赋予方式更加简单,但是需要用户对这几个数字更加熟悉。其实常用权限也并不多,只有如下几个
一、 权限含义的解释
首先,读、写、执行权限对文件和目录的作用是不同的
1. 目录的可用权限
目录的可用权限其实只有以下几个
1. chown 命令
chown 是修改文件和目录的所有者和所属组的命令,其基本信息如下:
1)命令格式
[root@localhost ~] # chown [选项] 所有者:所属组 文件或目录
选项:
-R:递归设置权限,也就是给子目录中的所有文件设置权限
普通用户不能修改文件的所有者,哪怕自己是这个文件的所有者也不行
普通用户可以修改所有者是自己的文件的权限
2. chgrp 命令
chgrp 是修改文件和目录的所属组的命令,其基本信息如下
1. 查看系统的umask 权限
[root@localhost ~] # umask
0022
# 用八进制数值显示 umask 权限
[root@localhost ~] # umask -s
u=rwx,g=rx,o=rx
# 用字母表示文件和目录的初始权限
2. umask 权限的计算方法
我们需要先了解一下新建文件和目录的默认最大权限
注意:umask默认权限的计算绝不是数字直接相减
例如 umask 是 033 呢?
1. man 命令
man 是最常见的帮助命令,也是 Linux 最主要的帮助命令,其基本信息如下。
命令格式
[root@localhost ~] # man [选项] 命令
选项:
-f:查看命令拥有哪个级别的帮助
-k:查看和命令相关的所有帮助
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 命令
# 查看和命令相关的所有帮助
info 命令
info 命令的帮助信息是一套完整的资料,每个单独命令的帮助信息只是这套完整资料中的某一个小章节
快捷键 | 作用 |
---|---|
上箭头 | 向上移动一行 |
下箭头 | 向下移动一行 |
PgUp | 向上翻一页 |
PgDn | 向下翻一页 |
Tab | 在有“*”符号的节点间进行切换 |
回车 | 进入有“*”符号的子页面,查看详细帮助信息 |
u | 进入上一层信息(回车是进入下一层信息) |
n | 进入下一小节信息 |
p | 进入上一小节信息 |
? | 查看帮助信息 |
q | 退出 info 信息 |
help 命令
help 只能获取 Shell 内置命令的帮助
help 命令的基本信息如下:
**功能描述:**显示Shell 内置命令的帮助,可以使用 type 命令来区分内置命令与外部命令
shell 是 Linux 的命令解释器
–help 选项
绝大多数命令都可以使用“–help”选项来查看帮助,这也是一种获取帮助的方法。例如:
[root@localhost ~] # ls --help
这种方法非常简单,输出的帮助信息基本上是 man 命令的信息简要版
1. whereis 命令
whereis 是搜索系统的命令(像绕口令一样),额就是说,whereis 命令不能搜索普通文件,而只能搜索系统命令。whereis 命令的基本信息如下:
2. which 命令
which 也是搜索系统命令的命令,和 whereis 命令的区别在于:
3. locate 命令
locate 命令才是可以按照文件名搜索普通文件的命令
locate 命令的基本信息如下:
配置文件
[root@localhost ~]# vi /etc/updatedb.conf
PRUNE_BIND_MOUNTS = "yes"
# 开启搜索限制,也就是让这个配置文件生效
PRUNEFS = "9p afs anon_inodefs auto autofs bdev binfmt_misc cgroup cifs coda configfs cpuset debugfs devpts ecryptfs exofs fuse fuse.sshfs fusectl gfs gfs2 gpfs hugetlbfs inotifyfs iso9660 jffs2 lustre mqueue ncpfs nfs nfs4 nfsd pipefs proc ramfs rootfs rpc_pipefs securityfs selinuxfs sfs sockfs sysfs tmpfs ubifs udf usbfs"
# 在 locate 执行搜索时,禁止搜索这些文件系统类型
PRUNENAMES = ".git .hg .svn"
# 在 locate 执行搜索时,禁止搜索带有这些扩展名的文件
PRUNEPATHS = "/afs /media /mnt /net /sfs /tmp /udev /var/cache/ccache /var/lib/yum/yumdb /var/spool/cups /var/spool/squid /var/tmp"
# 在 locate 执行搜索时,禁止搜索这些系统目录
4. find 命令
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 数据修改时间来举例,重点说说 “[+ -]” 时间的含义
按照权限搜索
命令格式
[root@localhost ~]# find 搜索路径 [选项] 搜索内容
选项:
-perm 权限模式:查找文件权限刚好等于“权限模式”的文件
-perm -权限模式:查找文件权限全部包含“权限模式”的文件
-perm +权限模式:查找文件权限包含“权限模式”的任意一个权限的文件
按照所有者和所属组搜素
[root@localhost ~]# find 搜索路径 [选项] 搜索内容
选项:
-uid 用户ID:按照用户 ID 查找所有者是指定 ID 的文件
-gid 组ID:按照用户组 ID 查找所属组是指定 ID 的文件
-user 用户名:按照用户名查找所有者是指定用户的文件
-group 组名:按照组名查找所属组是指定用户组的文件
按照所有者和所属组搜索时,“-nouser”选项比较常用,主要用于查找垃圾文件
只有一种情况例外,那就是外来文件。比如光盘和 U 盘中的文件如果是由 Windows 复制的,在 Linux中查看就是没有所有者的文件;再比如手工源码包安装的文件,也有可能没有所有者
按照文件类型搜索
[root@localhost ~]# find 搜索路径 [选项] 搜索内容
选项:
-type d:查看目录
-type f:查找普通文件
-type l:查找软链接文件
逻辑运算符
[root@localhost ~]# find 搜索路径 [选项] 搜索内容
选项:
-a:and 逻辑与
-o:or逻辑或
-not:not逻辑非
1)-a:and 逻辑与
find 命令也支持逻辑运算符选项,其中-a代表逻辑与运算,也就是-a的两个条件都成立,find搜索的结果才成立。举个例子:
[root@localhost ~]# find . -size +2k -a -type f
# 在当前目录下搜索大于 2KB,并且文件类型是普通文件的文件
2)-o:or 逻辑或
-o 选项代表逻辑或运算,也就是-o的两个条件只要其中一个成立,find命令就可以找到结果。例如:
[root@localhost ~]# find . -name cangls -o -name bols
./cangls
./bols
# 在当前目录下搜索文件名要么是cangls的文件,要么是bols的文件
3)-not:not逻辑非
-not 是逻辑非,也就是去反的意思。举个例子:
[root@localhost ~]# find . -not -name cangls
# 在当前目录下搜索文件名不是 cangls 的文件
其它选项
1)-exec选项
这里我们主要讲解两个选项“-exec”和“-ok”,这两个选项的基本作用非常相似。我们先来看看“-exec”选项的格式
[root@localhost ~]# find 搜索路径 [选项] 搜索内容 -exec 命令2 {} \;
其次,这个选项的作用其实是把find命令的结果交给由“-exec”调用的命令2 来处理。“{}” 就代表 find 命令的查找结果
2)-ok 选项
“-ok”选项和“-exec”选项的作用基本一致,区别在于:“-exec”的命令2会直接处理,而不询问:“-ok”的命令2在处理前会先询问用户是否这样处理,在得到确认命令后,才会执行
grep 的作用是在文件中提取和匹配符合条件的字符串行。命令格式如下:
[root@localhost ~]# grep [选项] "搜索内容" 文件名
选项:
-i:忽略大小写
-v:反向查找
--color=auto:搜索出的关键字用颜色显示
find 也是搜索命令,那么 find 命令和 grep 命令有什么区别呢?
1)find命令
find 命令用于在系统中搜索符合条件的文件名,如果需要模糊查询,则使用通配符进行匹配。搜索时文件名是完全匹配的(find 命令可以通过 -regex 选项,把匹配规则转为正则表达式规则,但是不建议如此)
2)grep 命令
grep 命令用于在文件中搜索符合条件的字符串,如果需要模糊查询,则使用正则表达式进行匹配。搜索时字符串是包含匹配的。
3)通配符与正则表达式的区别
通配符:用于匹配文件名,完全匹配
通配符 | 作用 |
---|---|
? | 匹配一个任意字符 |
* | 匹配 0 个或任意多个任意字符,也就是可以匹配任何内容 |
[] | 匹配中括号中任意一个字符。例如,[abc]代表一定匹配一个字符,或者是 a ,或者是 b ,或者是 c , |
[-] | 匹配中括号中任意一个字符,- 代表一个范围。例如,[a-z]代表匹配一个小写字母 |
[^] | 逻辑非,表示匹配不是中括号内的一个字符。例如,[^0-9]代表匹配一个不是数字的字符 |
正则表达式:用于匹配字符串,包含匹配
正则符 | 作用 |
---|---|
? | 匹配前一个字符重复 0 次,或 1 次 |
* | 匹配前一个字符重复 0 次,或任意多次 |
[] | 匹配中括号中任意一个字符。例如,[abc]代表一定匹配一个字符,或者是 a,或者是 b ,或者是 c |
[-] | 匹配中括号中任意一个字符,-代表一个范围,例如,[a-z]代表匹配一个小写字母 |
[^] | 逻辑非,表示匹配不是中括号内的一个字符。例如,[^0-9]代表匹配一个不是数字的字符 |
^ | 匹配首行 |
$ | 匹配行尾 |
命令格式: 命令1 命令2
命令 1 的正确输出作为命令 2 的操作对象
1)例子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 .
...省略部分输出...
--More--(7%)
可是这样操作实在不方便,这时就可以利用管道符了。命令如下:
[root@localhost ~]# ll -a /etc/ | more
2)例子2:
我想在命令 II /etc/的结果中搜索yum的文件名,应该使用find命令?还是grep命令?
[root@localhost ~]# ll -a /etc/ | grep yum
3)例子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 命令统计行数
统计正在连接的网络连接数量
命令的别名,就是命令的小名,主要是用于照顾管理员使用习惯的
命令格式:
[root@localhost ~]# alias
# 查询命令别名
[root@localhost ~]# alias 别名='原命令'
# 设定命令别名
例如:
[root@localhost ~]# alias ser='service network restart'
# 用 ser 别名,替代 service network restart 命令
用命令定义的别名,是临时生效的,要想永久生效,需要写入环境变量配置文件~/.bashrc
快捷键 | 作用 |
---|---|
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 系统通用压缩文件
[root@localhost ~]# zip [选项] 压缩包名 源文件或源目录
选项:
-r:压缩目录
例如:
[root@localhost ~]# zip ana.zip anaconda-ks.cfg
[root@localhost ~]# unzip [选项] 压缩包名
选项:
-d:指定解压缩位置
例如:
[root@localhost ~]# unzip -d /tmp/ ana.zip
# 把压缩包解压到指定位置
2. “.gz”格式
“.gz”格式是Linux中最常用的压缩格式,使用gzip命令进行压缩,其基本信息如下:
这个命令的格式如下:
[root@localhost ~]# gzip [选项] 源文件
选项:
-c:将压缩数据输出到标准输出中,可以用于保留源文件
-d:解压缩
-r:压缩目录
例如:
[root@localhost ~]# gzip -c anaconda-ks.cfg > anaconda-ks.cfg.gz
# 使用-c选项,但是不让压缩数据输出到屏幕上,而是重定向到压缩文件中
# 这样可以在压缩文件的同时不删除源文件
如果要解压缩“.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
两个命令都可以解压缩“.gz”格式
3. “.bz2”格式
[root@localhost ~]# bzip2 [选项] 源文件
选项:
-d:解压缩
-k:压缩时,保留源文件
-v:显示压缩的详细信息
例如:
[root@localhost ~]# bzip2 anaconda-ks.cfg
# 压缩成.bz2格式
[root@localhost ~]# bzip2 -k install.log.syslog
# 保留源文件压缩
“.bz2” 格式可以使用“bzip2 -d 压缩包”命令来进行解压缩,也可以使用“bunzip2 压缩包”命令来进行解压缩。先看看 bunzip2 命令的基本信息
[root@localhost ~]# bunzip2 anaconda-ks.cfg.bz2
[root@localhost ~]# bzip2 -d install.log.syslog.bz2
# 两个命令都可以解压缩
4. “.tar”格式
“.tar” 格式的打包和解打包都是用 tar 命令,区别只是选项不同。我们先看看 tar 命令的基本信息。
命令的基本格式如下:
[root@localhost ~]# tar [选项] [-f 压缩包名] 源文件或目录
选项:
-c:打包
-f:指定压缩包的文件名。压缩包的扩展名是用来给管理员识别格式的,所以一定要正确指定扩展名
-v:显示打包文件过程
[root@localhost ~]# tar -cvf anaconda-ks.cfg.tar anaconda-ks.cfg
# 打包,不会压缩
[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 -zxvd tmp.tar.gz /tmp/
# 把/tmp/目录直接打包压缩为“.tar.gz” 格式
[root@localhost ~]# tar -zxvf tmp.tar.gz
# 解压缩与解打包“.tar.gz”格式
例如:.tar.bz 格式
[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 -zxvf test.tar.gz test/
# 压缩
[root@localhost ~]# tar -zxvf test.tar.gz
# 只查看,不解压
[root@localhost ~]# tar -zxvf test.tar.gz -C /tmp
# 解压缩到指定位置
[root@localhost ~]# tar -zxvf test.tar.gz -C /tmp test/cde
# 直接压压缩包中的特定文件,到指定位置
sync 命令的基本信息如下:
命令的基本格式如下:
[root@localhost ~]# shutdown [选项] 时间 [警告信息]
选项:
-c:取消已经执行的 shutdown 命令
-h:关机
-r:重启
[root@localhost ~]# reboot
# 重启
[root@localhost ~]# halt
# 关机
[root@localhost ~]# poweroff
# 关机
5 init 命令
init 是修改 Linux 运行级别的命令,也可以用于关机和重启。这个命令并不安全,不建议使用
[root@localhost ~]# init 0
# 关机,也就是调用系统的 0 级别
[root@localhost ~]# init 6
# 重启,也就是调用系统的 6 级别
1)setup 工具
2)vi /etc/sysconfig/network-scripts/ifcfg-eth0
手工修改配置文件
[root@localhost ~]# service network restart
# 重启网络服务
虚拟机需要桥接到有线网卡,并重启网络服务
复制镜像有可能需要重置 UUID(唯一识别符)
[root@localhost ~]# vi /etc/sysconfig/network-scripts/ifcg-eth0
# 删除 MAC 地址行
[root@localhost ~]# rm -rf 、etc/udev/rules.d/70-persistent-net.rules
# 删除 MAC 地址和 UUID 绑定文件
[root@localhost ~]# reboot
# 重启 Linux
ifconfig 命令最主要的作用就是查看 IP 地址的信息,直接输入 ifconfig 命令即可
[root@localhost ~]# ifconfig
ens33: flags=4163 mtu 1500
# 标志 最大传输单元
inet 192.168.88.136 netmask 255.255.255.0 broadcast 192.168.88.255
# IP地址 子网掩码 广播地址
inet6 fe80::8476:8b32:797b:4fda prefixlen 64 scopeid 0x20
# IPv6地址(目前没有生效)
ether 00:0c:29:e1:93:84 txqueuelen 1000 (Ethernet)
# MAC地址
RX packets 25935 bytes 2231846 (2.1 MiB)
# 接收的数据包情况
RX errors 0 dropped 0 overruns 0 frame 0
TX packets 9680 bytes 2747065 (2.6 MiB)
TX errors 0 dropped 0 overruns 0 carrier 0 collisions 0
# 发送的数据包情况
lo: flags=73 mtu 65536
# 本地回环网卡
inet 127.0.0.1 netmask 255.0.0.0
inet6 ::1 prefixlen 128 scopeid 0x10
loop txqueuelen 1 (Local Loopback)
RX packets 0 bytes 0 (0.0 B)
RX errors 0 dropped 0 overruns 0 frame 0
TX packets 0 bytes 0 (0.0 B)
TX errors 0 dropped 0 overruns 0 carrier 0 collisions 0
命令的基本格式如下:
[root@localhost ~]# ping [选项] IP
选项:
-b:后面加入广播地址,用于对整个网段进行探测
-c 次数:用于指定 ping 的次数
-s 字节:指定探测包的大小
例子:探测网段中的可用主机
在 ping 命令中,可以使用“-b”选项,后面加入广播地址,探测整个网段。我们可以使用这个选项知道整个网络中有多少主机是可以和我们通信的,而不用一个一个IP地址进行探测。例如:
[root@localhost ~]# ping -b -c 3 192.168.88.255
WARNING: pinging broadcast address
PING 192.168.88.255 (192.168.88.255) 56(84) bytes of data.
64 bytes from 192.168.88.2: icmp_seq=1 ttl=128 time=0.215 ms
64 bytes from 192.168.88.2: icmp_seq=2 ttl=128 time=0.221 ms
64 bytes from 192.168.88.2: icmp_seq=3 ttl=128 time=0.256 ms
64 bytes from 192.168.88.2: icmp_seq=4 ttl=128 time=0.263 ms
64 bytes from 192.168.88.2: icmp_seq=5 ttl=128 time=0.280 ms
64 bytes from 192.168.88.2: icmp_seq=6 ttl=128 time=0.265 ms
# 探测192.168.88.0/24 网段中有多少可以通信的主机
netstat 命令的基本信息如下:
命令格式如下:
[root@localhost ~]# netstat [选项]
选项:
-a:列出所有网络状态,包括 Socket程序
-c 秒数:指定每隔几秒刷新一次网络状态
-n:使用IP地址和端口号显示,不使用域名与服务名
-p:显示PID和程序名
-t:显示使用TCP协议端口的连接状况
-u:显示使用UDP协议端口的连接状况
-l:仅显示监听状态的连接
-r:显示路由表
例子1:查看本机开启的端口
这是本机最常用的方式,使用选项“-tuln”。因为使用了“-l”选项,所以只能看到监听状态的连接,而不能看到已经建立连接状态的连接。例如:
[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:111 0.0.0.0:* LISTEN
tcp 0 0 192.168.122.1:53 0.0.0.0:* LISTEN
tcp 0 0 0.0.0.0:22 0.0.0.0:* LISTEN
tcp 0 0 127.0.0.1:631 0.0.0.0:* LISTEN
tcp 0 0 127.0.0.1:25 0.0.0.0:* LISTEN
tcp6 0 0 :::111 :::* LISTEN
tcp6 0 0 :::22 :::* LISTEN
tcp6 0 0 ::1:631 :::* LISTEN
tcp6 0 0 ::1:25 :::* LISTEN
udp 0 0 0.0.0.0:44987 0.0.0.0:*
udp 0 0 0.0.0.0:24010 0.0.0.0:*
udp 0 0 192.168.122.1:53 0.0.0.0:*
udp 0 0 0.0.0.0:67 0.0.0.0:*
udp 0 0 0.0.0.0:68 0.0.0.0:*
udp 0 0 0.0.0.0:5353 0.0.0.0:*
udp 0 0 127.0.0.1:323 0.0.0.0:*
udp6 0 0 ::1:323 :::*
udp6 0 0 :::54123 :::*
# 协议 接收队列 发送队列 本机的IP地址及端口号 远程主机的IP地址及端口号 状态
这个命令的输出较多
例子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:111 0.0.0.0:* LISTEN 1/systemd
tcp 0 0 192.168.122.1:53 0.0.0.0:* LISTEN 1148/dnsmasq
tcp 0 0 0.0.0.0:22 0.0.0.0:* LISTEN 967/sshd
tcp 0 0 127.0.0.1:631 0.0.0.0:* LISTEN 963/cupsd
tcp 0 0 127.0.0.1:25 0.0.0.0:* LISTEN 1139/master
tcp6 0 0 :::111 :::* LISTEN 1/systemd
tcp6 0 0 :::22 :::* LISTEN 967/sshd
tcp6 0 0 ::1:631 :::* LISTEN 963/cupsd
tcp6 0 0 ::1:25 :::* LISTEN 1139/master
udp 0 0 0.0.0.0:44987 0.0.0.0:* 591/avahi-daemon: r
udp 0 0 0.0.0.0:24010 0.0.0.0:* 124716/dhclient
udp 0 0 192.168.122.1:53 0.0.0.0:* 1148/dnsmasq
udp 0 0 0.0.0.0:67 0.0.0.0:* 1148/dnsmasq
udp 0 0 0.0.0.0:68 0.0.0.0:* 124716/dhclient
udp 0 0 0.0.0.0:5353 0.0.0.0:* 591/avahi-daemon: r
udp 0 0 127.0.0.1:323 0.0.0.0:* 555/chronyd
udp6 0 0 ::1:323 :::* 555/chronyd
udp6 0 0 :::54123 :::* 124716/dhclient
# 比之前的命令多了一个“-p”选项,结果多了“PID/程序名”,可以知道是哪个程序占用了端口
例子3:查看所有连接
使用选项“-an”可以查看所有连接,包括监听状态的连接(LISTEN)、已经建立连接状态的连接(ESTABLISHED)、Socket 程序连接等。因为连接较多,所以输出的内容有很多。例如:
[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:111 0.0.0.0:* LISTEN
tcp 0 0 192.168.122.1:53 0.0.0.0:* LISTEN
tcp 0 0 0.0.0.0:22 0.0.0.0:* LISTEN
tcp 0 0 127.0.0.1:631 0.0.0.0:* LISTEN
tcp 0 0 127.0.0.1:25 0.0.0.0:* LISTEN
tcp 0 36 192.168.88.136:22 192.168.88.1:64457 ESTABLISHED
从“Active UNIX domain sockets”开始,之后的内容就是Socket程序产生的连接,之前的内容都是网络服务产生的连接。我们可以在“-an”选项的输出中看到各种网络连接状态,而之前的“-tuln”选项则只能看到监听状态
[root@localhost ~]# write userl pts/1
hello
# 向在pts/1(远程终端1)登录的 userl 用户发送信息,使用 ”Ctrl + D“快捷键保存发送的数据
[root@localhost ~]# wall "I will be in 5 minutes to restart, please save your data"
例子1:发送邮件
如果我们想要给其他用户发送邮件,则可以执行如下命令:
[root@localhost ~]# mail userl
Subject: hello <- 邮件标题
Nice to meet you! <- 邮件具体内容
. <- 使用“.”来结束邮件输入
# 发送邮件给 userl 用户
我们接收到的邮件都保存在“/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.5 7/5/10. Type ? for help.
"/var/spool/mail/liuyong": 2 messages 1 new
1 root Thu Sep 3 18:13 22/655 "111111111" <- 之前收到的邮件
>N 2 root Thu Sep 3 19:44 18/626 "hello"
#未阅读 编号 发件人 时间 标题
<- 等待用户输入命令
可以看到已经接收到的邮件列表,“N”代表未读邮件,如果是已经阅读过的邮件,则前面是不会有这个“N”的;之后的数字是邮件的编号,我们主要通过这个编号来进行邮件的操作。如果我们想要查看第一封邮件,则只需输入邮件的编号“1”就额可以了。
在交互命令中执行“?”,可以查看这个交互界面支持的命令。例如:
& ? <- 输入命令
mail commands
type type messages
next goto and type next message
from give head lines of messages
headers print out active message headers
delete delete messages
undelete undelete messages
save folder append messages to folder and mark as saved
copy folder append messages to folder without marking them
write file append message texts to file, save attachments
preserve keep incoming messages in mailbox even if saved
Reply reply to message senders
reply 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 chdir to directory or home if none given
list
这些交互命令是可以简化输入的,比如“headers”命令,就可以直接输入“h”,这是列出邮件标题列表的命令。我们解释一下常用的交互命令
系统中有一些重要的痕迹日志文件,如:/var/log/wtmp、/var/run/utmp、/var/log/btmp、
/var/log/lastlog 等日志文件,如果你用 vim 打开这些文件,你会发现这些文件是二进制乱码。这是由于这些日志中保存的是系统的重要登录痕迹,包括某个用户何时登录了系统,何时退出了系统,错误登录等重要的系统信息。这些信息要是可以通过 vim 打开,就能编辑,这样痕迹信息就不准确,所以这些重要的痕迹日志,只能通过对应的命令来进行查看
例如:
[root@localhost ~]# w
20:13:38 up 4 days, 33 min, 2 users, load average: 0.00, 0.01, 0.05
#系统时间 持续开机时间 登录用户 系统在 1 分钟,5分钟,15分钟前的平均负载
USER TTY FROM LOGIN@ IDLE JCPU PCPU WHAT
root pts/0 192.168.88.1 19:27 17:38 0.03s 0.00s mail
liuyong pts/1 192.168.88.1 19:27 2.00s 0.04s 0.02s 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 | 用户正在进行的操作 |
[root@localhost ~]# who
root pts/0 2020-09-03 19:27 (192.168.88.1)
liuyong pts/1 2020-09-03 19:27 (192.168.88.1)
#用户名 登陆终端 登陆时间
[root@localhost ~]# last
liuyong pts/1 192.168.88.1 Thu Sep 3 19:27 still logged in
root pts/0 192.168.88.1 Thu Sep 3 19:27 still logged in
#用户名 终端号 来源IP地址 登陆时间 退出时间
liuyong pts/0 :0 Mon Aug 24 20:07 - 19:55 (1+23:47)
liuyong :0 :0 Sun Apr 26 23:59 - crash (121+19:56)
reboot system boot 3.10.0-693.el7.x Sun Apr 26 23:57 - 22:42 (129+22:44)
#系统重启信息记录
[root@localhost ~]# lastlog
Username Port From Latest
root pts/0 192.168.88.1 Thu Sep 3 19:27:05 -0700 2020
bin **Never logged in**
daemon **Never logged in**
adm **Never logged in**
lp **Never logged in**
sync **Never logged in**
...省略部分...
#用户名 终端号 来源IP 登陆时间
lastb 命令是查看错误登陆的信息的,查看的是/var/log/btmp 痕迹日志:
[root@localhost ~]# lastb
root ssh:notty 192.168.88.1 Thu Sep 3 22:52 - 22:52 (00:00)
#错误登陆用户 终端 尝试登陆的时间
linux 所有存储设备都必须挂载使用,包括硬盘
命令格式如下:
[root@localhost ~]# mount [-l]
# 查询系统中已经挂载的设备,-l 会显示卷标名称
[root@localhost ~]# mount -a
#依据配置文件/etc/fstab 的内容,自动挂载
[root@localhost ~]# mount [-t 文件系统] [-L 卷标名] [-o 特殊选项] \
设备文件名 挂载点
#\代表这一行没有写完,换行
选项:
-t 文件系统:加入文件系统类型来指定挂载的类型,可以 ext3、ext4、iso9660等文件系统。具体可以参考9-1
-L 卷标名:挂载指定卷标的分区,而不是安装设备文件名挂载
-o 特殊选项:可以指定挂载的额外选项,比如读写权限、同步异步等,如果不指定则默认值生效。具体的特殊选项,见表
参数 | 说明 |
---|---|
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 的权限,默认是具有 |
usrquota | 写入代表文件系统支持用户磁盘配额,默认不支持 |
grpquota | 写入代表文件系统支持组磁盘配额,默认不支持 |
举例:
例1:
[root@localhost ~]# mount
#查看系统中已经挂载的文件系统,注意有虚拟文件系统
sysfs on /sys type sysfs (rw,nosuid,nodev,noexec,relatime,seclabel)
proc on /proc type proc (rw,nosuid,nodev,noexec,relatime)
devtmpfs on /dev type devtmpfs (rw,nosuid,seclabel,size=485156k,nr_inodes=121289,mode=755)
securityfs on /sys/kernel/security type securityfs (rw,nosuid,nodev,noexec,relatime)
tmpfs on /dev/shm type tmpfs (rw,nosuid,nodev,seclabel)
devpts on /dev/pts type devpts (rw,nosuid,noexec,relatime,seclabel,gid=5,mode=620,ptmxmode=000)
# 命令结果是代表:/dev/sda3 分区挂载到/目录,文件系统是 ext4,权限是读写
例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
#挂载分区
[root@localhost ~]# mount -t iso9660 /dev/cdrom /mnt/cdrom/
#挂载光盘
用完之后记得卸载:
[root@localhost ~]# umount /dev/sr0
[root@localhost ~]# umount /mnt/cdrom
#因为设备文件名和挂载点已经连接到一起,卸载哪一个都可以
注意:卸载的时候需要退出光盘目录,才能正常卸载
33 挂载 U 盘
U盘会和硬盘公用设备文件名,所以U盘的设备文件名不是固定的,需要手工查询,查询命令:
[root@localhost ~]# fdisk -l
# 查询硬盘
然后就是挂载了,挂载命令如下:
[root@localhost ~]# mount -t vfat /dev/sdb1 /mnt/usb/
# 挂载U盘。因为是Windows分区,所以是vfat文件系统格式
如果U盘中有中文,会发现中文是乱码。Linux 要想正常显示中文,需要两个条件:
[root@localhost ~]# mount -t vfat -o iocharset=utf8 /dev/sdb1 /mnt/usb/
#挂载U盘,指定中文编码格式为 UTF-8
如果需要卸载,可以执行一下命令:
[root@localhost ~]# umount /mnt/usb/
Linux 的驱动加载顺序
- 驱动直接放入系统内核之中,这种驱动主要是系统启动加载必须的驱动,数量较少
- 驱动以模块的形式放入硬盘。大多数驱动都已这种方式保存,保存位置在/lib/modules/3.10.0-693.el7.x86_64/kernel/中
- 驱动可以被 Linux 识别,但是系统认为这种驱动一般不常用,默认不加载。如果需要加载这种驱动,需要重新编译内核,而NTFS文件系统的驱动就属于这种情况
- 硬件不能被Linux 内核识别,需要手工安装驱动。当然前提是厂商提供了该硬件针对Linux 的驱动,否则就需要自己开发驱动了
使用NTFS-3G 安装 NTFS 文件系统模块
- 下载 NTFS-3G 插件
我们从网站 http://www.tuxera.com/community/ntfs-3g-download/ 下载 NTFS-3G插件到 Linux 服务器上
- 安装 NTFS-3G 插件
在编译安装 NTFS-3G 插件之前,要保证 gcc 编译器已经安装。具体安装命令如下:
[root@localhost ~]# tar -zxvf ntfs-3g_ntfsprogs-2013.1.13.tgz
#解压
[root@localhost ~]# cd ntfs-3g_ntfsprogs-2013.1.13
#进入解压目录
[root@localhost ntfs-3g_ntfsprogs-2013.1.13]# ./configure
#编译器准备。没有指定安装目录,安装到默认位置中
[root@localhost ntfs-3g_ntfsprogs-2013.1.13]# make
# 编译
[root@localhost ntfs-3g_ntfsprogs-2013.1.13]# make install
# 编译安装
安装就完成了,已经可以挂载和使用 Windows 的 NTFS 分区了。不过需要注意挂载分区时的文件系统不是ntfs,而是ntfs-3g。挂载命令如下:
[root@localhost ~]# mount -t ntfs-3g 分区设备文件名 挂载点
例如:
[root@localhost ~]# mount -t ntfs-3g /dev/sdb1 /mnt/win