命令提示符
- [ ]:这是提示符的分隔符号,没有特殊意义
- root:显示的是当前的登录用户
- @:分隔符号,没有特殊含义。
- localhost:当前系统的简写主机名
- ~:代表用户当前所在的目录
- #:命令提示符 超级用户是#,普通用户是$
[root@localhost ~]# ls -l
总用量 44
-rw------. 1 ---- root ---- root --------1207 1 月14 18:18 anaconda-ks.cfg
权限--引用计数 所有者 -- 所属组--- 大小-- 文件修改时间 文件名
目录操作命令
1. ls命令
ls [选项] [文件名或目录名]
选项:
-a :显示所有文件
--color=when:支持颜色输出
-d :显示目录信息,而不是目录下的文件
-h :人性化显示﹐按照我们习惯的显示文件大小
-i :显示文件的i节点号
-l:长格式显示
2. cd命令
特殊符号 | 作用 |
---|---|
~ | 代表用户的家目录 |
- | 代表上次所在目录 |
. | 代表当前目录 |
.. | 代表上级目录 |
3.pwd命令
pwd 命令是查询当前所在的目录的绝对路径
选项:
-L (默认值)打印环境变量"$PWD"的值,可能为符号链接。
-P 打印当前工作目录的物理位置。
4.mkdir命令和rmdir命令
mkdir 是创建目录的命令
选项:
-Z:设置安全上下文,当使用SELinux时有效;
-m或--mode:建立目录的同时设置目录的权限;
-p或--parents:若所要建立目录的上层目录目前尚未建立,则会一并建立上层目录;
rmdir 是删除空目录的命令
-p: 递归删除目录
文件操作命令
1. touch命令
touch 是 创建空文件或修改文件的时间戳
[root@localhost ~]# touch [选项] 文件名
-a:或--time=atime或--time=access或--time=use 只更改存取时间;
-c:或--no-create 不建立任何文件;
-d:<时间日期> 使用指定的日期时间,而非现在的时间;
-f:此参数将忽略不予处理,仅负责解决BSD版本touch指令的兼容性问题;
-m:或--time=mtime或--time=modify 只更该变动时间;
-r:<参考文件或目录> 把指定文件或目录的日期时间,统统设成和参考文件或目录的日期时间相同;
-t:<日期时间> 使用指定的日期时间,而非现在的时间;
--help:在线帮助;
--version:显示版本信息。
2. stat命令
stat 是查看文件详细信息的命令,而且可以看到文件的这三个时间戳
选项:
-L:支持符号连接;
-f:显示文件系统状态而非文件状态;
-t:以简洁方式输出信息;
3. cat命令
cat 命令用来查看文件内容
选项:
-A: 相当于-vET 选项的整合,用于列出所有隐藏符号
-E: 列出每行结尾的回车符$
-n: 显示行号
-T: 把 Tab 键用^I显示出来
-v: 列出特殊字符
4. more命令
more 是分屏显示文件的命令
- 按 Space 键:显示文本的下一屏内容。
- 按 Enter 键:只显示文本的下一行内容。
- 按/字符串:接着输入一个模式,可以在文本中寻找下一个* 相匹配的模式。
- 按H键:显示帮助屏,该屏上有相关的帮助信息。
- 按B键:显示上一屏内容。
- 按Q键:退出more命令。
选项:
-<数字>:指定每屏显示的行数;
-c:不进行滚屏操作。每次刷新这个屏幕;
-s:将多个空行压缩成一行显示;
-u:禁止下划线;
+<数字>:从指定数字的行开始显示。
5. less命令
less 是分行显示文件的命令
用less命令显示文件时,用PageUp键向上翻页,用PageDown键向下翻页。要退出less程序,应按Q键。
选项:
-e:文件内容显示完毕后,自动退出;
-f:强制显示文件;
-g:不加亮显示搜索到的所有关键词,仅显示当前显示的关键字,以提高显示速度;
-l:搜索时忽略大小写的差异;
-N:每一行行首显示行号;
-s:将连续多个空行压缩成一行显示;
-S:在单行显示较长的内容,而不换行显示;
-x<数字>:将TAB字符显示为指定个数的空格字符。
6. head命令
head 是用来显示文件开头的命令
选项:
-c --bytes=[-]NUM 显示前NUM字节;如果NUM前有"-",那么会打印除了文件末尾的NUM字节以外的其他内容。
-n, --lines=[-]NUM 显示前NUM行而不是默认的10行;如果NUM前有"-",那么会打印除了文件末尾的NUM行以外的其他行。
-q, --quiet, --silent 不打印文件名行。
-v, --verbose 总是打印文件名行。
-z, --zero-terminated 行终止符为NUL而不是换行符。
7. tail命令
tail 是用来显示文件末尾的命令
选项:
-c, --bytes=NUM 输出文件尾部的NUM(NUM为整数)个字节内容。
-f, --follow[={name|descript}] 显示文件最新追加的内容。“name”表示以文件名的方式监视文件的变化。
-F 与 “--follow=name --retry” 功能相同。
-n, --line=NUM 输出文件的尾部NUM(NUM位数字)行内容。
--pid=<进程号> 与“-f”选项连用,当指定的进程号的进程终止后,自动退出tail命令。
-q, --quiet, --silent 当有多个文件参数时,不输出各个文件名。
--retry 即是在tail命令启动时,文件不可访问或者文件稍后变得不可访问,都始终尝试打开文件。使用此选项时需要与选项“--follow=name”连用。
-s, --sleep-interal=<秒数> 与“-f”选项连用,指定监视文件变化时间隔的秒数。
-v, --verbose 当有多个文件参数时,总是输出各个文件名。
8. ln命令
ln 是用来为文件创建链接的命令
[root@localhost ~]# ln [选项] 源文件 目标文件
选项:
-s: 建立软链接文件。如果不加“-s”选项,则建立硬链接文件
-f: 强制。如果目标文件已经存在,则删除目标文件后再建立链接文件
-d, -F, --directory 创建指向目录的硬链接(只适用于超级用户)
-f, --force 强行删除任何已存在的目标文件
-i, --interactive 覆盖既有文件之前先询问用户
-L, --logical 取消引用作为软链接的目标
-n, --no-dereference 把软链接的目的目录视为一般文件
-P, --physical 直接将硬链接到软链接
-r, --relative 创建相对于链接位置的软链接
-s, --symbolic 对源文件建立软链接
硬链接特征:
源文件和硬链接文件拥有相同的 Inode 和 Block
修改任意一个文件,另一个都改变
删除任意一个文件,另一个都能使用
硬链接标记不清,很难确认硬链接文件位置,不建议使用
硬链接不能链接目录
硬链接不能跨分区
软链接特征:
软链接和源文件拥有不同的 Inode 和 Block
两个文件修改任意一个,另一个都改变
删除软链接,源文件不受影响;删除源文件,软链接不能使用
软链接没有实际数据,只保存源文件的 Inode,不论源文件多大,软链接大小不变
软链接的权限是最大权限 lrwxrwxrwx.,但是由于没有实际数据,最终访问时需要参考源文
件权限
软链接可以链接目录
软链接可以跨分区
软链接特征明显,建议使用软连接
目录和文件的操作命令
1. rm命令
rm 是强大的删除命令,不仅可以删除文件,也可以删除目录
[root@localhost ~]# rm [选项] 文件或目录
选项:
d:直接把欲删除的目录的硬连接数据删除成0,删除该目录;
-f:强制删除文件或目录;
-i:删除已有文件或目录之前先询问用户;
-r:递归处理,将指定目录下的所有文件与子目录一并处理;
--preserve-root:不对根目录进行递归操作;
-v:显示指令的详细执行过程。
2. cp命令
cp 是文件或目录用于复制的命令
[root@localhost ~]# cp [选项] 源文件 目标文件
选项:
-a:此参数的效果和同时指定"-dpR"参数相同;
-d:当复制软链接时,把目标文件或目录也建立为软链接,并指向与源文件或目录连接的原始文件或目录;
-f:强行复制文件或目录,不论目标文件或目录是否已存在;
-i:覆盖既有文件之前先询问用户;
-l:对源文件建立硬连接,而非复制文件;
-p:保留源文件或目录的属性;
-r:递归处理,将指定目录下的所有文件与子目录一并处理;
-s:对源文件建立软链接,而非复制文件;
-u:使用这项参数后只会在源文件的更改时间较目标文件更新时或是名称相互对应的目标文件并不存在时,才复制文件;
-S:在备份文件时,用指定的后缀“SUFFIX”代替文件的默认后缀;
-b:覆盖已存在的文件目标前将目标文件备份;
-v:详细显示命令执行的操作。
3. mv命令
mv 是用来对文件或目录重新命名,或者将文件移动至其他目录
[root@localhost ~]# mv [选项] 源文件 目标文件
选项:
-b:当文件存在时,覆盖前,为其创建一个备份;
-f:若目标文件或目录与现有的文件或目录重复,则直接覆盖现有的文件或目录;
-i:交互式操作,覆盖前先行询问用户,如果源文件与目标文件或目标目录中的文件同名,则询问用户是否覆盖目标文件。用户输入”y”,表示将覆盖目标文件;输入”n”,表示取消对源文件的移动。这样可以避免误将文件覆盖。
--strip-trailing-slashes:删除源文件中的斜杠“/”;
-S<后缀>:为备份文件指定后缀,而不使用默认的后缀;
--target-directory=<目录>:指定源文件要移动到目标目录;
-u:当源文件比目标文件新或者目标文件不存在时,才执行移动操作。
基本权限管理
1. 权限
[root@localhost ~]# ls -l install.log
-rw-r--r--. 1 root root 24772 1 月 14 18:17 install.log
第一列的权限位如果不计算最后的“.”,则共有 10 位。
第 1 位代表文件类型。Linux 不像 Windows 使用扩展名表示文件类型,而是使用权限位的第 1位表示文件类型。详细情况可以使用“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 用来变更文件或目录的权限
[root@localhost ~]# chmod [选项] 权限模式 文件名
选项:
-c, --changes:当文件的权限更改时输出操作信息。
--no-preserve-root:不将'/'特殊化处理,默认选项。
--preserve-root:不能在根目录下递归操作。
-f, --silent, --quiet:抑制多数错误消息的输出。
-v, --verbose:无论文件是否更改了权限,一律输出操作信息。
--reference=RFILE:使用参考文件或参考目录RFILE的权限来设置目标文件或目录的权限。
-R, --recursive:对目录以及目录下的文件递归执行更改权限操作。
用户身份
- u:代表所有者(user)
- g:代表所属组(group)
- o:代表其他人(other)
- a:代表全部身份(all)
赋予方式 - +:加入权限
- -:减去权限
- =:设置权限
权限 - r:读取权限(read)
- w:写权限(write)
- x:执行权限(execute)
常用权限 - 644:这是文件的基本权限,代表所有者拥有读、写权限,而所属组和其他人拥有只读权限
- 755:这是文件的执行权限和目录的基本权限,代表所有者拥有读、写和执行权限,而所属组
和其他人拥有读和执行权限 - 777:这是最大权限。在实际的生产服务器中,要尽力避免给文件或目录赋予这样的权限,这
会造成一定的安全隐患
3. 基本权限的作用
首先,读、写、执行权限对文件和目录的作用是不同的。
权限对文件的作用
- 读(r):对文件有读(r)权限,代表可以读取文件中的数据。如果把权限对应到命令上,那么一旦对文件有读(r)权限,就可以对文件执行 cat、more、less、head、tail 等文件查看命令
- 写(w):对文件有写(w)权限,代表可以修改文件中的数据。如果把权限对应到命令上,那么一旦对文件有写(w)权限,就可以对文件执行 vim、echo 等修改文件数据的命令
注意:对文件有写权限,是不能删除文件本身的,只能修改文件中的数据。如果要想删除文件,则需要对文件的上级目录拥有写权限 - 执行(x):对文件有执行(x)权限,代表文件拥有了执行权限,可以运行。在 Linux 中,只要文件有执行(x)权限,这个文件就是执行文件了。只是这个文件到底能不能正确执行,不仅需要执行(x)权限,还要看文件中的代码是不是正确的语言代码。对文件来说,执行(x)权限是最高权限
目录的可用权限
目录的可用权限其实只有以下几个。
- 0:任何权限都不赋予。
- 5:基本的目录浏览和进入权限
- 7:完全权限
4. 所有者与所属组命令
chown命令
chown 是修改文件和目录的所有者和所属组的命令
[root@localhost ~]# chown [选项] 所有者:所属组 文件或目录
选项:
-c或——changes:效果类似“-v”参数,但仅回报更改的部分;
-f或--quite或——silent:不显示错误信息;
-h或--no-dereference:只对软链接的文件作修改,而不更改其他任何相关文件;
-R或——recursive:递归处理,将指定目录下的所有文件及子目录一并处理;
-v或——version:显示指令执行过程;
--reference=<参考文件或目录>:把指定文件或目录的拥有者与所属群组全部设成和参考文件或目录的拥有者与所属群组相同;
普通用户不能修改文件的所有者,哪怕自己是这个文件的所有者也不行
普通用户可以修改所有者是自己的文件的权限
chgrp命令
chgrp 是修改文件和目录的所属组的命令
[root@phato ~]# chgrp [选项] 所属组 文件或目录
-R 递归式地改变指定目录及其下的所有子目录和文件的所属的组
-c或——changes:效果类似“-v”参数,但仅回报更改的部分;
-f或--quiet或——silent:不显示错误信息;
-h或--no-dereference:只对符号连接的文件作修改,而不是该其他任何相关文件;
-H如果命令行参数是一个通到目录的软链接,则遍历软链接
-R或——recursive:递归处理,将指令目录下的所有文件及子目录一并处理;
-L:遍历每一个遇到的通到目录的软链接
-P:不遍历任何符号链接(默认)
-v或——verbose:显示指令执行过程;
--reference=<参考文件或目录>:把指定文件或目录的所属群组全部设成和参考文件或目录的所属群组相同;
5.umask默认权限
umask 是显示或设置创建文件的权限掩码。我们需要先了解一下新建文件和目录的默认最大权限。
- 对文件来讲,新建文件的默认最大权限是 666,没有执行(x)权限。这是因为执行权限对文件来讲比较危险,不能在新建文件的时候默认赋予,而必须通过用户手工赋予。
- 对目录来讲,新建目录的默认最大权限是 777。这是因为对目录而言,执行(x)权限仅仅代表进入目录,所以即使建立新文件时直接默认赋予,也没有什么危险。
我们在这里按照权限字母来讲解 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—” =644
[root@phato ~]# umask [选项] 权限模式 文件或目录
选项:
-p:当没有参数时指定该选项,执行产生的输出格式可复用为输入;
-S:以符号组合的方式输出创建文件的权限掩码,不使用该选项时以八进制数的形式输出。
6. 帮助命令
1. man命令
man 是最常见的帮助命令,也是 Linux 最主要的帮助命令
[root@localhost ~]# man [选项] 命令
选项:
-a:在所有的man帮助手册中搜索;
-f:等价于whatis指令,显示给定关键字的简短描述信息;
-P:指定内容时使用分页程序;
-M:指定man手册搜索的路径。
-k: 查看和命令相关的所有帮助
快捷键 | 作用 |
---|---|
上箭头 | 向上移动一行 |
下箭头 | 向下移动一行 |
PgUp | 向上翻一页 |
PgDn | 向下翻一页 |
g | 移动到第一页 |
G | 移动到最后一页 |
q | 退出 |
/字符串 | 从当前向下搜索字符串 |
?字符串 | 从当前页向上搜索字符串 |
n | 当搜索字符串时,可以使用n键找到下一个字符串 |
N | 当搜索字符串时,使用 N 键反向查询字符串。 |
man命令的帮助级别
级 别 | 作 用 |
---|---|
1 | 普通用户可以执行的系统命令和可执行文件的帮助 |
2 | 内核可以调用的函数和工具的帮助 |
3 | C 语言函数的帮助 |
4 | 设备和特殊文件的帮助 |
5 | 配置文件的帮助 |
6 | 游戏的帮助(个人版的 Linux 中是有游戏的) |
7 | 杂项的帮助 |
8 | 超级用户可以执行的系统命令的帮助 |
9 | 内核的帮助 |
man -f 命令或 whatis 命令查看命令拥有哪个级别的帮助
man -k 命令 或 apropos 命令查看和命令相关的所有帮助
- 想知道命令在哪:where is [文件名或命令]
- 想知道我是谁:whoami [命令]
- 想知道命令作用:whatis [命令]
2. info命令(先考虑用man命令)
info 命令的帮助信息是一套完整的资料,每个单独命令的帮助信息只是这套完整资料中的某一个小章节。
快 捷 键 | 作 用 |
---|---|
上箭头 | 向上移动一行 |
下箭头 | 向下移动一行 |
PgUp | 向上翻一页 |
PgDn | 向下翻一页 |
Tab | 在有“*”符号的节点间进行切换 |
回车 | 进入有“*”符号的子页面,查看详细帮助信息 |
u | 进入上一层信息(回车是进入下一层信息) |
n | 进入下一小节信息 |
p | 进入上一小节信息 |
? | 查看帮助信息 |
q | 退出 info 信息 |
3. help命令(基本不用)
help 只能获取 Shell 内置命令的帮助,可以使用 type 命令来区分内置命令与外部命令。(shell 是 Linux 的命令解释器)
--help选项
绝大多数命令都可以使用“--help”选项来查看帮助,这也是一种获取帮助的方法。
7. 搜索命令
1. whereis 命令
whereis 是搜索系统命令的命令也就是说,whereis 命令不能搜索普通文件,而只能搜索系统命令。
选项:
-b:只查找二进制文件;
-B<目录>:只在设置的目录下查找二进制文件;
-f:不显示文件名前的路径名称;
-m:只查找说明文件;
-M<目录>:只在设置的目录下查找说明文件;
-s:只查找原始代码文件;
-S<目录>只在设置的目录下查找原始代码文件;
-u:查找不包含指定类型的文件。
2. which命令
which 也是搜索系统命令的命令,与 whereis 命令的区别在于:
- whereis 命令可以在查找到二进制命令的同时,查找到帮助文档的位置;
- 而 which 命令在查找到二进制命令的同时,如果这个命令有别名,则还可以找到别名命令。
选项:
-n<文件名长度>:制定文件名长度,指定的长度必须大于或等于所有文件中最长的文件名;
-p<文件名长度>:与-n参数相同,但此处的<文件名长度>包含了文件的路径;
-w:指定输出时栏位的宽度;
-V:显示版本信息。
3. locate命令
locate 命令只能按照文件名搜索普通文件的命令。
- 优点:按照数据库搜索,搜索速度快,消耗资源小。数据库位置/var/lib/mlocate/mlocate.db,
可以使用 updatedb 命令强制更新数据库。 - 缺点:只能按照文件名来搜索文件,而不能执行更复杂的搜索,比如按照权限、大小、修改时间等搜索文件。
选项:
-b, --basename # 仅匹配路径名的基本名称
-c, --count # 只输出找到的数量
-d, --database DBPATH # 使用DBPATH指定的数据库,而不是默认数据库 /var/lib/mlocate/mlocate.db
-0, --null # 在输出上带有NUL的单独条目
-S, --statistics # 不搜索条目,打印有关每个数据库的统计信息
-q # 安静模式,不会显示任何错误讯息。
-P, --nofollow, -H # 检查文件存在时不要遵循尾随的符号链接
-l, --limit, -n LIMIT # 将输出(或计数)限制为LIMIT个条目
-n # 至多显示 n个输出。
-m, --mmap # 被忽略,为了向后兼容
-r, --regexp REGEXP # 使用基本正则表达式
--regex # 使用扩展正则表达式
-q, --quiet # 安静模式,不会显示任何错误讯息
-s, --stdio # 被忽略,为了向后兼容
-o # 指定资料库存的名称。
-i, --ignore-case # 忽略大小写
配置文件
[root@localhost ~]# vi /etc/updatedb.conf
PRUNE_BIND_MOUNTS = "yes"
开启搜索限制,也就是让这个配置文件生效
PRUNEFS = "……"
在 locate 执行搜索时,禁止搜索这些文件系统类型
PRUNENAMES = "……"
在 locate 执行搜索时,禁止搜索带有这些扩展名的文件
PRUNEPATHS = "……"
在 locate 执行搜索时,禁止搜索这些系统目录
4. find命令
find 用于在目录中搜索文件
[root@localhost ~]# find 搜索路径 [选项] 搜索内容
选项:
- -name: 按照文件名搜索
- -iname: 按照文件名搜索,不区分文件名大小写
- -inum: 按照 inode 号搜索
- -type d: 查找目录
- -type f: 查找普通文件
- -type l: 查找软链接文件
- -size [+|-] 大小:按照指定大小搜索文件
- -atime [+|-]时间: 按照文件访问时间搜索
- -mtime [+|-]时间: 按照文件数据修改时间搜索
- -ctime [+|-]时间: 按照文件状态修改时间搜索
- -perm 权限模式: 查找文件权限刚好等于“权限模式”的文件
- -perm -权限模式: 查找文件权限全部包含“权限模式”的文件
- -perm +权限模式: 查找文件权限包含“权限模式”的任意一个权限的文件
- -uid 用户 ID: 按照用户 ID 查找所有者是指定 ID 的文件
- -gid 组 ID: 按照用户组 ID 查找所属组是指定 ID 的文件
- -user 用户名: 按照用户名查找所有者是指定用户的文件
- -group 组名: 按照组名查找所属组是指定用户组的文件
- -nouser: 查找没有所有者的文件
- -a: and 逻辑与
- -o: or 逻辑或
- -not: not 逻辑非
[root@localhost ~]# find . -size +2k -a -type f
在当前目录下搜索大于 2KB,并且文件类型是普通文件的文件
[root@localhost ~]# find . -name cangls -o -name bols
在当前目录下搜索文件名要么是 cangls 的文件,要么是 bols 的文件
[root@localhost ~]# find . -not -name cangls
在当前目录下搜索文件名不是 cangls 的文件
-exec 选项
这里我们主要讲解两个选项“-exec”和“-ok”,这两个选项的基本作用非常相似。我们先来看
看“-exec”选项的格式。
[root@phato ~]# find 搜索路径 [选项] 搜索内容 -exec 命令 2 { } \ ;
注意有-exec,就必然有 \ ;作为结尾,命令2不可用别名
若使用-ok会出现交互,而-exec不会出现交互直接执行
5. grep命令(shell命令)
grep 的作用是在文件中提取和匹配符合条件的字符串行。
[root@localhost ~]# grep [选项] "搜索内容" 文件名
匹配含有空格字符串时,需要带上" "双引号
选项:
-i: 忽略大小写
-n: 输出行号
-v: 反向查找
--color=auto:搜索出的关键字用颜色显示
1)find 命令
find 命令用于在系统中搜索符合条件的文件名,如果需要模糊查询,则使用通配符进行匹配,通配符是完全匹配
(find 命令可以通过-regex 选项,把匹配规则转为正则表达式规则,但是不建议如此)。
2)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 的操作对象
[root@localhost ~]# netstat -an | grep "ESTABLISHED" | wc -l
如果想知道具体的网络连接数量,就可以再使用 wc 命令统计行数,统计正在连接的网络连接数量。
注意:管道符之后都是流,可以通过以字符串形式使用grep来过滤多余字符。
7. alias命令
命令的别名,就是命令的小名,主要是用于照顾管理员使用习惯的。
命令格式:
[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 剪切的内容。 |
8. 压缩和解压缩命令
在 Linux 中可以识别的常见压缩格式有十几种,比如“.zip”“.gz” .bz2”“.tar”“.tar.gz”“.tar.bz2”等。
1. ".zip"格式
“.zip”是 Windows 中最常用的压缩格式,Linux 也可以正确识别“.zip”格式,这可以方便地和Windows 系统通用压缩文件。
1.1 "zip"格式的压缩命令
root@localhost ~]# zip [选项] 压缩包名 源文件或源目录
选项:
-r: 压缩目录
[root@localhost ~]# zip ana.zip anaconda-ks.cfg
1.2 “zip”格式的解压缩命令
[root@localhost ~]# unzip [选项] 压缩包名
选项:
-d: 指定解压缩位置 把压缩包解压到指定位置
例如:[root@localhost ~]# unzip -d /tmp/ ana.zip
2. ".gz"格式(不可打包)
“.gz”格式是 Linux 中最常用的压缩格式,使用 gzip 命令进行压缩。
2.1 ".gz"格式的压缩命令
[root@localhost ~]# gzip [选项] 源文件
选项:
-c: 将压缩数据输出到标准输出中,可以用于保留源文件
-d: 解压缩
-r: 压缩目录(把目录下的文件进行递归压缩)
-n或--no-name:压缩文件时,不保存原来的文件名称及时间戳记;
-N或——name:压缩文件时,保存原来的文件名称及时间戳记;
2.2 ".gz"格式的解压缩命令
[root@localhost ~]# gzip -d 压缩包 或 gunzip -d 压缩包
[root@localhost ~]# gunzip install.log.gz
[root@localhost ~]# gzip -d anaconda.cfg.gz
3. ".bz2"格式(不可压缩目录 )
“.bz2”格式是 Linux 的另一种压缩格式,从理论上讲,“.bz2”格式的算法更先进、压缩比更好;而“.gz”格式相对来讲压缩的时间更快。
3.1 ".bz2"格式的压缩命令
[root@localhost ~]# bzip2 [选项] 源文件
选项:
-d: 解压缩
-k: 压缩时,保留源文件
-v: 显示压缩的详细信息
例如:
[root@localhost ~]# bzip2 anaconda.cfg #压缩成.bz2格式
[root@localhost ~]# bzip2 -k install.log.syslog #保留源文件压缩
3.2 ".bz2"格式的解压缩命令
[root@localhost ~]# bunzip2 anaconda.cfg.bz2 #两个命令都可以解压缩
[root@localhost ~]# bzip2 -d install.log.syslog.bz2
4. ".tar"格式(打包不可压缩)
4.1 ".tar"格式的压缩命令
[root@localhost ~]# tar [选项] [-f 压缩包名] 源文件或目录
选项:
-c: 打包
-f: 指定压缩包的文件名。压缩包的扩展名是用来给管理员识别格式的,所以一定要正确指定扩展名
-v: 显示打包文件过程
[root@localhost ~]# tar -cvf anaca.cfg.tar anaca.cfg #打包,不会压缩
4.2 ".tar"格式的解压缩命令
[root@localhost ~]# tar [选项] 压缩包
选项:
-x: 解打包
-f: 指定压缩包的文件名
-v: 显示解打包文件过程
-t: 测试,就是不解打包,只是查看包中有哪些文件
-C(大) 目录:指定解打包位置
[root@localhost ~]# tar -xvf abc.cfg.tar #解打包到当前目录下
5. ".tar.gz"和"tar.bz2"格式
使用 tar 命令直接打包压缩。命令格式如下:
[root@localhost ~]# tar [选项] 压缩包 源文件或目录
选项:
-z: 压缩和解压缩“.tar.gz”格式
-j: 压缩和解压缩“.tar.bz2”格式
[root@localhost ~]# tar -zcvf tmp.tar.gz /tmp/
打包压缩为“.tar.bz2”格式,注意压缩包文件名
[root@localhost ~]# tar -zxvf tmp.tar.gz #解压缩与解打包".tar.gz"格式
[root@localhost ~]# tar -jcvf tmp.tar.bz2 /tmp/
打包压缩为“.tar.bz2”格式,注意压缩包文件名
[root@localhost ~]# tar -jxvf tmp.tar.bz2 #解压缩与解打包".tar.bz2"格式
[root@localhost ~]# tar -ztvf test.tar.gz #只查看,不解压
[root@localhost ~]# tar -zxvf test.tar.gz -C /tmp
解压缩到指定位置
[root@localhost ~]# tar -zxvf test.tar.gz -C /tmp test/abc
只解压压缩包中的特定文件,到指定位置
9. 关机与重启命令
1. sync数据同步
sync 用于强制被改变的内容立刻写入磁盘,更新超块信息。
[root@localhost ~]# sync [选项]
选项:
-d, --data 只同步文件数据,不同步不必要的元数据
-f, --file-system 同步包含这些文件的文件系统
2. shutdown命令
[root@localhost ~]# shutdown [选项] 时间 [警告信息]
选项:
-c: 取消已经执行的 shutdown 命令
-h: 关机
-r: 重启
3. reboot命令
[root@localhost ~]# reboot [选项]
选项:
-d:重新开机时不把数据写入记录文件/var/tmp/wtmp。本参数具有“-n”参数效果;
-f:强制重新开机,不调用shutdown指令的功能;
-i:在重开机之前,先关闭所有网络界面;
-n:重开机之前不检查是否有未结束的程序;
-w:仅做测试,并不真正将系统重新开机,只会把重开机的数据写入/var/log目录下的wtmp记录文件。
4. halt和poweroff命令
这两个都是关机命令,不会完整关闭和保存系统的服务,不建议使用。
[root@localhost ~]# halt #关机
[root@localhost ~]# powerof #关机
5. init命令
init 是修改 Linux 运行级别的命令,也可以用于关机和重启。这个命令并不安全,不建议使用。
[root@localhost ~]# init 0 #关机,也就是调用系统的 0 级别
[root@localhost ~]# init 6 #重启,也就是调用系统的 6 级别
10. 常用网络命令
1. ifconfig命令
ifconfig 命令最主要的作用就是查看 IP 地址的信息
[root@localhost ~]# ifconfig
eth0: flags=4163<UP,BROADCAST,RUNNING,MULTICAST> mtu 1500
#标志 最大传输单元
inet 192.168.252.20 netmask 255.255.255.0 broadcast 192.168.252.255
#IP 地址 子网掩码 广播地址
inet6 fe80::546e:994b:30c:e2f7 prefixlen 64 scopeid 0x20<link>
#IPv6 地址 (目前没有生效)
ether 00:0c:29:aa:d2:96 txqueuelen 1000 (Ethernet)
# MAC地址
RX packets 3728 bytes 310958 (303.6 KiB)
RX errors 0 dropped 0 overruns 0 frame 0
#接收的数据包情况
TX packets 3051 bytes 1495119 (1.4 MiB)
TX errors 0 dropped 0 overruns 0 carrier 0 collisions 0
#发送的数据包情况
lo: flags=73<UP,LOOPBACK,RUNNING> mtu 65536
#本地回环网卡
inet 127.0.0.1 netmask 255.0.0.0
inet6 ::1 prefixlen 128 scopeid 0x10<host>
loop txqueuelen 1000 (Local Loopback)
RX packets 8 bytes 696 (696.0 B)
RX errors 0 dropped 0 overruns 0 frame 0
TX packets 8 bytes 696 (696.0 B)
TX errors 0 dropped 0 overruns 0 carrier 0 collisions 0
2. ping命令
ping 是常用的网络命令,主要通过 ICMP 协议进行网络探测,测试网络中主机的通信情况。
[root@localhost ~]# ping [选项] IP
选项:
-b: 后面加入广播地址,用于对整个网段进行探测
-c 次数: 用于指定 ping 的次数
-s 字节: 指定探测包的大小
3. netstat命令
netstat 是网络状态查看命令,既可以查看到本机开启的端口,也可以查看有哪些客户端连接。
[root@localhost ~]# netstat [选项]
选项:
-a: 列出所有网络状态,包括 Socket 程序
-c 秒数: 指定每隔几秒刷新一次网络状态
-n: 使用 IP 地址和端口号显示,不使用域名与服务名
-p: 显示 PID 和程序名
-t: 显示使用 TCP 协议端口的连接状况
-u: 显示使用 UDP 协议端口的连接状况
-l: 仅显示监听状态的连接
-r: 显示路由表
例:查看本机开启的端口,这是本机最常用的方式,使用选项“-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: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
#协议 接收队列 发送队列 本机 IP和端口 远程主机的 IP 和端口 状态
4. 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”键保存发送的数据
5. wall命令
write 命令用于给指定用户发送信息,而 wall 命令用于给所有登录用户发送信息,包括你自己。
[root@localhost ~]# wall "I will be in 5 minutes to restart, please save your data"
6. mail命令
mail 是 Linux 的邮件客户端命令,可以利用这个命令给其他用户发送邮件。
例子 1:发送邮件
如果我们想要给其他用户发送邮件,则可以执行如下命令:
[root@localhost ~]# mail user1
Subject: hello <- 邮件标题
Nice to meet you! <-邮件具体内容
. <-使用“.”来结束邮件输入 #发送邮件给 user1 用户
例子2:发送文件内容
如果我们想把某个文件的内容发送给指定用户,则可以执行如下命令:
[root@localhost ~] mail -s "test mail" root < /root/abc.cfg
选项:
-s: 指定邮件标题
//把/root/abc.cfg 文件的内容发送给 root 用户
例子3:查看已经接收的邮件
我们可以直接在命令行中执行 mail 命令,进入 mail 的交互命令中,可以在这里查看已经接收到的邮件。
[root@localhost ~]# mail
Heirloom Mail version 12.4 7/18/21.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”就可以了。
11. 日志文件命令
系 统 中 有 一 些 重 要 的 痕 迹 日 志 文 件 , 如 /var/log/wtmp 、 /var/run/utmp 、 /var/log/btmp 、/var/log/lastlog 等日志文件,这些日志中保存的是系统的重要登录痕迹,包括某个用户何时登录了系统,何时退出了系统,错误登录等重要的系统信息。
1. w命令
w 命令是显示系统中正在登陆的用户信息的命令,这个命令查看的痕迹日志是/var/run/utmp。
[root@localhost ~]# w
00:06:11 up 5:47, 2 users, load average: 0.00, 0.01, 0.05
#系统时间 运行时间 登陆用户 系统在 1 分钟,5 分钟,15 分钟前的平均负载
USER TTY FROM LOGIN@ IDLE JCPU PCPU WHAT
root tty1 23:59 7:07 0.08s 0.08s -bash
root pts/2 192.168.252.1 23:42 3.00s 0.44s 0.06s 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命令
ho 命令和 w 命令类似,用于查看正在登陆的用户,但是显示的内容更加简单,也是查看/var/run/utmp日志。
[root@localhost ~] who
root tty1 2021-07-18 13:59
root pts/2 2021-07-17 23:42 (192.168.1.100)
用户名 登陆终端 登陆时间 ( 来源 IP)
3. last命令
last 命令是查看系统所有登陆过的用户信息的,包括正在登陆的用户和之前登陆的用户。这个命令查看的是/var/log/wtmp 痕迹日志文件。
[root@localhost ~] last
root tty1 Mon Nov 12 23:59 still logged in
root pts/2 192.168.252.1 Mon Nov 12 23:42 still logged in
root pts/1 192.168.252.1 Mon Nov 12 23:37 - 23:59 (00:22)
root tty1 Mon Nov 12 19:17 - 23:58 (04:41)
root pts/0 192.168.252.1 Mon Nov 12 18:20 - 23:52 (05:32)
reboot system boot 3.10.0.x Mon Nov 12 18:18 - 00:22 (06:03)
#系统重启信息记录
root pts/1 192.168.252.1 Mon Nov 12 08:48 - down (01:29)
root pts/1 192.168.252.1 Thu Nov 8 21:04 - 22:29 (01:25)
用户名 终端号 来源 IP 地址 登陆时间 - 退出时间
4. lastlog命令
lastlog 命令是查看系统中所有用户最后一次的登陆时间的命令,他查看的日志是/var/log/lastlog文件。
[root@localhost ~] lastlog
Username Port From Latest
root tty1 Mon Nov 12 23:59:03 +0800 2018
bin **Never logged in**
daemon **Never logged in**
adm **Never logged in**
lp **Never logged in**
sync **Never logged in**
…省略部分内容…
用户名 终端 来源 IP 登陆时间
5. lastb命令
lastb 命令是查看错误登陆的信息的,查看的是/var/log/btmp 痕迹日志。
[root@localhost ~]# lastb
(unknown tty1 Mon Nov 12 23:58 - 23:58 (00:00)
root tty1 Mon Nov 12 23:58 - 23:58 (00:00)
#错误登陆用户 终端 尝试登陆的时间
12. 挂载命令
linux 所有存储设备都必须挂载使用,包括硬盘。自动挂载文件:/etc/fstab。
1. mount命令
[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 的权限,默认是具有 |
user/nouser | 允许/不允许普通用户挂载,设定文件系统是否允许普通用户挂载,默认是不允许,只有 root 可以挂载分区 |
usrquota | 写入代表文件系统支持用户磁盘配额,默认不支持 |
grpquota | 写入代表文件系统支持组磁盘配额,默认不支持 |
2. 光盘挂载
不论哪个系统都有软连接/dev/cdrom,与可以作为光盘的设备文件名。大多数设备文件名为/dev/sr0。
[root@phato ~] mkdir -p /mnt/cdrom #创建挂载目录
[root@phato ~] mount -t iso9660 /dev/cdrom /mnt/cdrom/ #挂载光盘
用完之后记得卸载:
[root@phato ~] umount /dev/sr0
[root@phato ~] umount /mnt/cdrom
因为设备文件名和挂载点已经连接到一起,卸载哪一个都可以
注意:卸载的时候需要退出光盘目录,才能正常卸载
3. 挂载U盘
U 盘会和硬盘共用设备文件名,所以 U 盘的设备文件名不是固定的,需要手工查询,查询命令:
[root@localhost ~]# fdisk -l #查询硬盘
然后就是挂载了,挂载命令如下:
[root@localhost ~] mount -t vfat /dev/sdb1 /mnt/usb/
挂载 U 盘。因为是 Windows 分区,所以是 vfat 文件系统格式
如果 U 盘中有中文,会发现中文是乱码。Linux 要想正常显示中文,需要两个条件:
- 安装了中文编码和中文字体
- 操作终端需要支持中文显示(纯字符终端,是不支持中文编码的)
而我们当前系统是安装了中文编码和字体,而 xshell 远程终端是 Windows 下的程序,当然是支持中文显示的。那之所以挂载 U 盘还出现乱码,是需要在挂载的时候,手工指定中文编码,
[root@whz ~] mount -t vfat -o iocharset=utf8 /dev/sdb1 /mnt/usb/
挂载 U 盘,指定中文编码格式为 UTF-8
如果需要卸载,可以执行以下命令:
[root@whz ~] 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 插件:
我们从此网站下载 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