Linux - 常用命令
- 前言
- 一、文件和目录操作的基本命令
- pwd:查看当前所在位置
- cd:改变工作目录
- ls:显示当前目录内容
- ll:详细列举目录下的文件信息
- locate:搜寻文件或目录
- clear:清除终端窗口
- cat:由第一行开始显示文件内容
- head:查看文件开头部分
- tail:查看文件结尾部分
- more:阅读文件
- find:在指定目录下查找文件
- grep:文本搜索
- chmod:改变文件或目录的访问权限
- cp:复制文件
- mv:移动或者修改文件名称
- mkdir:创建目录(文件夹)
- rmdir:删除空的目录(文件夹)
- rm:删除目录或者文件
- touch:创建文件或者修改属性
- stat:查看文件详细属性
- vi / vim:文本编辑器
- echo:字符串的输出
- awk:文本分析工具
- ln:软连接(快捷方式)
- 二、文件压缩和有关归档的命令
- 三、系统管理相关的命令
- 四、用户管理命令
- 五、网络管理命令
- 六、进程管理命令
- 七、磁盘管理相关
- 八、软件安装相关
前言
因为自己老是忘记这些命令,所以记录一下 ~~
注意:Linux 下的命令是区分大小写的
本文很多都是借鉴了菜鸟教程-Linux命令大全重新编写而成
一、文件和目录操作的基本命令
pwd:查看当前所在位置
用法:pwd
示例:
# 查看当前所在位置
pwd
表明我当前正处于:/a-mike 目录下
cd:改变工作目录
用法:cd [-L | [-P [-e]]] [dir]
命令 | 功能 |
---|---|
cd ~ | 来到登录目录 |
cd / | 来到系统根目录 |
cd /root | 把你带到根用户的主目录(root 用户才能使用) |
cd /home | 把你带到 home 目录,用户的登录目录通常贮存在此处 |
cd . . | 向上移动一级目录 |
cd /dir1/dir2 | 无论你在哪一个目录中,都会来到该绝对路径处 |
cd dir1 | 来到当前目录下的 dir1 目录下 |
示例: |
# 来到系统根目录
cd /
示例:
# 来到当前目录下的 a-mike 目录下
cd a-mike
示例:
# a-mike
# 来到 /a-mike/file 目录(不管你在哪个目录下)
cd /a-mike/file
ls:显示当前目录内容
用法:ls [选项]... [文件]...
查看使用详情:
ls --help
常用参数:
参数 | 释义 |
---|---|
-a | 全部(all),列举目录中的全部文件,包括隐藏文件(.filename)。位于这个列表的起首处的 . . 和 . 依次是指父目录和你的当前目录 |
-l | 长(long),列举目录内容的细节,包括权限(模式)、所有者、组群、大小、创建日期、文件是否到系统其它地方的链接,以及链接的指向 |
-F | 文件类型(File type),在每一个列举项目之后添加一个符号。这些符号包括:/ 表明是个目录;@ 表明是到其它文件的符号链接;* 表明是一个可执行文件 |
-r | 逆向(reverse),从后向前地列举目录中的内容 |
-R | 递归(recursive),该选项递归列举所有目录(在当前目录之下)的内容 |
-r | 大小(size),按文件大小从小到大排序 |
-s | 在每个文件名前展示该文件的大小 |
-i | 在每个文件名前展示该文件的索引信息 |
… | … |
示例:
# 查看当前目录下的文件
ls
示例:
# 查看 /a-mike 目录下的文件
ls /a-mike
示例:
# 查看当前目录下所有文件
ls -a
示例:
# 列举当前目录下的文件详细信息(细节)
ls -l
示例:
# 递归查找当前目录下所有的文件
ls -R
示例:
# 查看目录下 article.txt 文件的权限
ls -l article.txt
ll:详细列举目录下的文件信息
ll 不是命令,是 ls -l 的别名
我这里且当做它是个命令看待了
示例:
# 查询当前目录下文件详情
ll
可以看到 ll 与 ls -l 命令的效果差不多,具体差异可参见:linux ls和 ll 命令
示例:
# 降序查看
ll -t
示例:
# 升序查看
ll -t | tac
locate:搜寻文件或目录
当你需要查找某个文件比如 lqx 文件时,就可以使用该命令,它会搜出所有关于 lqx 这个关键词相关的文件或目录。
用法:locate 关键词
示例:
# 搜寻文件或目录
locate lqx
clear:清除终端窗口
用法:clear
示例:
# 清除终端窗口
clear
使用前:
使用后:
cat:由第一行开始显示文件内容
用法:cat [选项]... [文件]...
查看使用详情:
cat --help
示例:
# 从第一行开始显示 article.txt 文件内容
cat article.txt
示例:
# 从第一行开始显示 article.txt 文件内容并显示行号
cat -n article.txt
head:查看文件开头部分
用法:head [-n 行数] 文件名
示例:
# 显示 article-two.txt 文件开头部分的内容
# 如果没有设置行数,默认是开头10行
head article-two.txt
示例:
# 显示 article-two.txt 文件开头部分 5 行的内容
head -n 5 article-two.txt
tail:查看文件结尾部分
通常我们会用该命令实时查看日志,tail 会自动实时地把打开文件中的新消息显示到屏幕上
用法:tail [选项]... [文件]...
查看使用详情:
tail --help
示例:
# 查看 sync.log 文件后面部分的数据
# 默认只显示最后10行
tail sync.log
示例:
# 实时查看 sync.log 文件数据
# 默认只展示最后 10 行
tail -f sync.log
可以看到日志在不停的打印
示例:
# 实时查看 sync.log 文件更新数据,显示 100 行
tail -100f sync.log
more:阅读文件
该命令的功能类似于 cat 命令,但是它的功能类似于翻阅电子书,有分页的效果,能够让使用者逐页的阅读,最基本的指令就是按 空格键(space)
就是下一页显示,按 b
就会返回第一页等等,并且可以按指定字符串搜寻
用法:more [-dlfpcsu] [-num] [+/pattern] [+ linenum] [fileName ..]
常用参数:
参数 | 释义 |
---|---|
+n | 从第 n 行开始显示 |
-n | 定义屏幕大小为 n 行 |
+/pattern | 在每个档案显示前搜寻该字符串 (pattern),然后从该字符串前两行之后开始显示 |
-c | 从顶部清屏,然后显示 |
-d | 禁用响铃功能 |
-l | 忽略 Ctrl + l (换页)字符 |
-p | 通过清除窗口而不是滚动来对文件进行换页 |
-s | 把连续多个空行显示为一行 |
-u | 把文件内容中的下划线去掉 |
常用操作命令:
命令 | 释义 |
---|---|
Enter | 向下 n 行,需要定义,默认情况下是 1 行 |
Ctrl + F | 向下滚动一屏 |
空格键(space) | 向下滚动一屏 |
Ctrl + B | 返回上一屏 |
= | 输出当前行的行号 |
: f | 输出文件名和当前行的行号 |
v | 调用 vi 编辑器 |
! | 调用 shell ,并执行命令 |
q | 退出 more |
示例:
# 翻阅 人生.txt
more 人生.txt
切换页面可以按以上 常用操作命令
控制
示例:
# 从 第二章 起翻阅 人生.txt
more +/第二章 人生.txt
示例:
# 从 第 101 行 起翻阅 人生.txt
more +101 人生.txt
真是上班偷偷看小说的好帮手!!
find:在指定目录下查找文件
用法:find [参数选项] <指定目录> <指定条件> <指定内容>
常用参数:
参数 | 释义 |
---|---|
-name filename | 查找名为 filename 的文件 |
-ctime -n 或 +n | 按时间来查找文件,-n 指 n 天以内,+n 指 n 天以前 |
示例:
# 查找当前目录下所有的 .txt 文件
find . -name "*.txt"
示例:
# 查找所有的 lqx.* 文件
find / -name "lqx.*"
示例:
# 查找所有的 mysql 文件
find / -name mysql
示例:
# 查找当前目录下在一天之内操作过的文件
find . -ctime -1
grep:文本搜索
grep 命令对于在文件中查找指定的字串很有用途
用法:grep [选项]... 关键字 [文件]...
或者:grep [-abcEFGhHilLnqrsvVwxy] [-A<显示行数>] [-B<显示列数>] [-C<显示列数>] [-d<进行动作>] [-e<范本样式>] [-f<范本文件>] [--help] [范本样式] [文件或目录...]
查看使用详情:
grep --help
常用参数:
参数 | 释义 |
---|---|
-n | 把包含关键字的行展示出来,显示行号 |
-i | 把包含关键字的行展示出来,搜索时忽略大小写 |
-v | 把不 包含关键字的行展示出来 |
-c | 统计包含关键字的个数 |
示例:
# 搜索 sync.log 文件 中出现 Exception 的地方
grep Exception sync.log
示例:
# 把包含关键字的行展示出来并且加上行号
grep -n 关键字 sync.log
示例:
# 把包含关键字的行展示出来,搜索时忽略大小写
grep -i 关键字 sync.log
示例:
# 把不包含关键字的行展示出来
grep -v 关键字 sync.log
示例:
# 在我的进程当中查找含有 java 的进程信息
ps -ef | grep java
示例:
# 在我的进程当中查找含有 sshd 的进程信息,并排除掉 grep
ps -ef | grep sshd | grep -v "grep"
示例:
# 查找进程个数
ps -ef | grep -c sshd
chmod:改变文件或目录的访问权限
用法:chmod [选项...] [模式,模式...] [文件...]
查看使用详情:
chmod --help
比如说查看 article.txt 这个文件的信息
# 查看目录下 article.txt 文件的权限
ls -l article.txt
输出结果:-rw-r--r-- 1 root root 2257 1月 21 10:36 article.txt
,从这个结果中能够获取该文件的很多信息与细节,比如:谁能读取(r)和写入(w)文件,以及谁创建了这个文件(root),所在的组群(root)、文件大小(2257B)创建时间(1月 21 10:36),以及文件名(article.txt)
参考菜鸟教程上的解释大概是这样子的
第一列显示了当前的权限:它有十位。第一位代表文件类型,其余九位实际上是用于三组不同用户的三组权限,且均以 rwx
的三个参数组合
那三组分别是:文件的所有者,文件所属的组群,和“其他用户”。就以上述例子来说:-(rw-)(r--)(r--) 1 root root
,解释起来就是:该文件的类型属于常规文件,文件所有者可读、写(txt文件不是可执行文件)、文件所属的组群有可读、其他用户可读
文件类型:
符号 | 释义 |
---|---|
d | 目录 |
- | 常规文件 |
l | 链接文档(link file),相当于 windows 上的快捷方式 |
b | 装置文件里面的可供储存的接口设备(可随机存取装置) |
c | 装置文件里面的串行端口设备,例如键盘、鼠标(一次性读取装置) |
权限参数:(每种权限设置都可以用一个数值来代表)
符号 | 释义 |
---|---|
r | 可读,数字表示为 4 |
w | 可写,数字表示为 2 |
x | 可执行,数字表示为 1 |
- | 无对应权限,数字表示为 0 |
角色符号
符号 | 释义 |
---|---|
u | 拥有文件的用户(所有者) |
g | 所有者所在的组群 |
o | 其他人(不是所有者或者所有者的组群) |
a | 每一个人或全部(u、g 和 o) |
行动符号:
符号 | 释义 |
---|---|
+ | 添加权限 |
- | 删除权限 |
= | 使他成为唯一权限 |
示例:
# 给其他人写入 article.txt 文件的权限
chmod o+w article.txt
示例:
# 删除组群和其他人对 article.txt 的读写权限
chmod go-rw article.txt
同样,也可以使用数字来改变权限,每个权限符对应的数值加起来便可以用来设定特定的权限,譬如:如果你想要有读取和写入的权限,你会得到一个值为 6 的总和:4(读取)+ 2(写入)= 6
示例:
# 设置所有者对 article.txt 的权限为可读可写 ==> 4+2+0
# 所有者所在组群对 article.txt 的权限为可读可写 ==> 4+2+0
# 其他用户对 article.txt 的权限为可读 ==> 4+0+0
chmod 664 article.txt
常用设置数值以及对应含义列表:
含义 | |
---|---|
-rw------- (600) | 只有所有者才有读取和写入的权限 |
-rw-r–r-- (644) | 只有所有者才有读取和写入的权限;组群和其他人只有读取的权限 |
-rwx------ (700) | 只有所有者才有读取、写入、和执行的权限 |
-rwxr-xr-x (755) | 所有者有读取、写入、和执行的权限;组群和其他人只有读取和执行的权限 |
-rwx–x–x (711) | 所有者有读取、写入、和执行权限;组群和其他人只有执行权限 |
-rw-rw-rw- (666) | 每个人都能够读取和写入文件(请谨慎使用这些权限) |
-rwxrwxrwx (777) | 每个人都能够读取、写入、和执行 |
drwx------ (700) | 只有所有者能在目录中读取、写入 |
drwxr-xr-x (755) | 每个人都能够读取目录,但是其中的内容却只能被所有者改变 |
cp:复制文件
可以将文件或者目录复制到其他目录中,就像在 dos 下的 copy 命令一样。
用法:cp [选项]... [-T] 源文件 目标文件
查看使用详情:
cp --help
常用参数:
参数 | 释义 |
---|---|
-a | 此选项通常在复制目录时使用,它保留链接、文件属性,并复制目录下的所有内容 |
-d | 复制时保留链接。这里所说的链接相当于 Windows 系统中的快捷方式 |
-f | 覆盖已经存在的目标文件而不给出提示 |
-i | 与 -f 选项相反,在覆盖目标文件之前给出提示,要求用户确认是否覆盖,回答 y 时目标文件将被覆盖 |
-p | 除复制文件的内容外,还把修改时间和访问权限也复制到新文件中 |
-r | 若给出的源文件是一个目录文件,此时将复制该目录下所有的子目录和文件 |
-l | 不复制文件,只是生成链接文件 |
示例:
# 复制文件 article.txt 并命名为 copy-article.txt
cp article.txt copy-article.txt
示例:
# 复制文件 123.txt 到 test 文件夹下
cp 123.txt test
示例:
# 复制 file 文件夹下所有的文件到 copy-file 文件夹中
cp -r file copy-file
mv:移动或者修改文件名称
用法:mv [选项]... [-T] 源文件 目标文件
查看使用详情:
mv --help
常用参数:
参数 | 释义 |
---|---|
-b | 当目标文件或目录存在时,在执行覆盖前,会为其创建一个备份 |
-i | 如果指定移动的源目录或文件与目标的目录或文件同名,则会先询问是否覆盖旧文件,输入 y 表示直接覆盖,输入 n 表示取消该操作 |
-f | 如果指定移动的源目录或文件与目标的目录或文件同名,不会询问,直接覆盖旧文件 |
-n | 不要覆盖任何已存在的文件或目录 |
-u | 当源文件比目标文件新或者目标文件不存在时,才执行移动操作 |
-v | 详细。显示文件的移动进度 |
当源文件和目标文件属于同一文件类型,并且在同一个目录下,则是修改名称
示例:
# 如果数据源和目的地在同一个文件夹下就是改名
# 修改当前文件夹下 copy-article.txt 的名称为 123.txt
mv copy-article.txt 123.txt
示例:
# 如果数据源和目的地在同一个文件夹下就是改名
# 修改当前文件夹下 file 文件夹的名称为 tagger
mv file tagger
示例:
# 如果数据源和目的地不在同一个文件夹下就是移动(剪切)
# 将 123.txt 文件移动到当前目录的 tagger 目录下
mv 123.txt tagger
可以看到我 copy-file 文件夹下面的 123.txt 文件移动到 tagger 目录下去了
示例:
# 将文件夹 new-file 中的内容全部都移动到 test 文件夹中
mv new-file/* test
示例:
# 将 /a-mike/copy-file/tagger 文件夹下所有的文件移动到当前目录下
mv /a-mike/copy-file/tagger/* .
mkdir:创建目录(文件夹)
用法:mkdir [-p] 目录名
常用参数:
参数 | 释义 |
---|---|
-p | 确保目录名称存在,不存在的就新建一个 |
示例:
# 在当前目录下新建一个 new-file 的目录
mkdir new-file
示例:
# 创建多级文件夹
# 在当前目录下的 new-file 的目录下面新建 new-file-1/new-file-2 目录
mkdir -p new-file/new-file-1/new-file-2
rmdir:删除空的目录(文件夹)
用法:rmdir [-p] [文件夹名]
示例:
# 删除指定空文件夹
rmdir fileName
示例:
# 删除多级空文件夹
# 删除 bbb 空文件夹
# 如果删除 bbb 之后 aaa 变成空文件夹之后 aaa 也会被删除
rmdir -p aaa/bbb
rm:删除目录或者文件
用法:rm [选项].. 文件...
常用参数:
参数 | 释义 |
---|---|
-i | 删除前逐一询问确认 |
-f | 强制删除,无需确认 |
-r | 将目录及其以下文档逐一删除 |
示例:
# 删除当前目录下的 aaa.txt 文件
mr aaa.txt
示例:
# 删除指定目录 和目录中的所有内容
rm -r fileName
该命令也能删除多级目录
示例:
# 强制删除当前目录下 new-file-1 目录的所有内容,并且不予询问
mr -r -f new-file-1
touch:创建文件或者修改属性
用法:touch [选项]... 文件...
当文件存在时就是修改文件的时间属性,当文件不存在时就是创建文件
查看使用详情:
touch --help
常用参数:
参数 | 释义 |
---|---|
-a | 只更改访问的时间 |
-m | 只更改修改的时间 |
-c | 不创建任何文件 |
-d | 使用指定字符串表示时间而非当前时间 |
-r | 使用参考档的时间记录,与 --file 的效果一样 |
-t | 设定档案的时间记录 |
示例:
# 修改 article.txt 的时间
touch article.txt
示例:
# 创建 aaa.txt 文件
touch aaa.txt
示例:
# 批量创建多个文件
touch a{1..5}.txt
stat:查看文件详细属性
用法:stat [选项]... 文件...
stat
命令主要用于显示文件或文件系统的详细信息。
查看使用详情:
stat --help
常用参数:
参数 | 释义 |
---|---|
-L | 显示符号链接所指向文件的信息 |
-f | 显示文件所在文件系统的信息 |
-t | 以简洁方式输出信息 |
-c | 以特定格式输出文件的某些信息 |
%a | 八进制表示的访问权限 |
%A | 可读格式表示的访问权限 |
%b | 分配的块数(参见 %B) |
%B | %b 参数显示的每个块的字节数 |
%d | 十进制表示的设备号 |
%D | 十六进制表示的设备号 |
%f | 十六进制表示的 Raw 模式 |
%F | 文件类型 |
%g | 属主的组 ID |
%G | 属主的组名 |
%h | 硬连接数 |
%i | Inode 号 |
%n | 文件名 |
%N | 如果是符号链接,显示器所链接的文件名 |
%o | I/O 块大小 |
%s | 全部占用的字节大小 |
%t | 十六进制的主设备号 |
%T | 十六进制的副设备号 |
%u | 属主的用户 ID |
%U | 属主的用户名 |
%x | 最后访问时间 |
%X | 最后访问时间,自 Epoch 开始的秒数 |
%y | 最后修改时间 |
%Y | 最后修改时间,自 Epoch 开始的秒数 |
%z | 最后改变时间 |
%Z | 最后改变时间,自 Epoch 开始的秒数 |
%a | 普通用户可用的块数 |
%b | 文件系统的全部数据块数 |
%c | 文件系统的全部文件节点数 |
%d | 文件系统的可用文件节点数 |
%f | 文件系统的可用节点数 |
%C | SELinux 的安全上下文 |
%i | 十六进制表示的文件系统 ID |
%l | 文件名的最大长度 |
%n | 文件系统的文件名 |
%s | 块大小(用于更快的传输) |
%S | 基本块大小(用于块计数) |
%t | 十六进制表示的文件系统类型 |
%T | 可读格式表示的文件系统类型 |
示例:
# 查看 xxx 文件的详细属性
stat a1.txt
示例:
# 显示 xxx 文件所在文件系统的信息
stat -f xxx
示例:
# 以简洁方式输出信息
stat -t xxx
示例:
# 以特定格式输出文件的某些信息
stat -c [参数] biz-news.log
# 查看 xxx 文件的权限
stat -c %A xxx
# 查看 xxx 文件的 Inode 号
stat -c %i xxx
参考博客:Linux-stat命令详情
vi / vim:文本编辑器
vi:vi编辑器是所有Unix及Linux系统下标准的编辑器,它的强大不逊色于任何最新的文本编辑器,但是也有些不足的地方。
- 只能是编辑文本,不能对字体、段落进行排版
- 不支持鼠标操作
- 没有菜单
- 只有命令
vim:是从 vi 发展出来的一个文本编辑器。代码补全、编译及错误跳转等方便编程的功能特别丰富,在程序员中被广泛使用。
当用 vi 或者 vim 打开一个文本之后,我们能对它进行:阅读、编辑、保存
三个操作,这三个操作分别对应:命令模式、编辑模式、末行模式
刚打开一个文件的时候,首先进入的是 命令模式
,只能读,不能写
如果想要编辑文本,得按 i
-> insert 进入 编辑模式
,光标当前位置开始输入文件
编辑完成之后想要退出 编辑模式
可按 Esc
退出,重新进入到 命令模式
如果要想保存之前改动过的内容,在重新进入 命令模式
之后,按 :
进入到 末行模式
(这个时候进入 末行模式
之后又想返回到 命令模式
,可按两次 Esc
)
进入 末行模式
之后,输入 wq
+ Enter键
是保存退出,输入 wq!
+ Enter键
是强制保存退出
查看
用法:vi 文件名
示例:
# 打开或新建文件,并将光标置于第一行首
vi filename
# 打开文件,并将光标置于第n行首
vi +n filename
# 打开文件,并将光标置于最后一行首
vi + filename
# 打开文件,并将光标置于第一个与pattern匹配的串处
vi +/pattern filename
# 在上次正用vi编辑时发生系统崩溃,恢复filename
vi -r filename
# 打开多个文件,依次进行编辑
vi filename....filename
用法:vim 文件名
如果文件已经存在,会直接打开该文件
如果文件不存在,打开一个临时文件,在保存退出之后就会新建一个文件,将临时文件中的内容写到新件的文件之中,所以 vim 编辑器如果异常退出,在磁盘上可能会保存交换文件.swp
,下次再使用 vim 编辑文件时,会看到提示有对应的交换文件生成,可自己删除掉
进入编辑模式编辑文本
命令 | 英文 | 功能 |
---|---|---|
i | insert | 在当前字符前插入文本 |
I | insert | 在行首插入文本 |
a | append | 在当前字符后插入文本 |
A | insert | 在行末插入文本 |
o | 在当前行后面插入一空行 | |
O | 在当前行前面插入一空行 |
进入末行模式保存文本
命令 | 功能 |
---|---|
q | 当 vim 进入文件没有对文件内容做任何操作可以按 q 退出 |
q! | 当 vim 进入文件对文件内容有操作但不想保存退出 |
wq | 正常保存退出 |
wq! | 强制保存退出,指针对与 root 用户或者文件所有者 |
示例:
# vim 定位行
vim 文件名 +行数
以上是 vi / vim 命令的基本操作,基本上可以应付绝大部分编辑文本的情况了,但是如果你想要更加深入的了解这个命令的详情可参考博客:linux下vi命令大全 和 菜鸟教程:Linux vi/vim
echo:字符串的输出
用法:echo [ -n ] 字符串
echo 命令是我们常用的一个命令,它的主要作用功能是在屏幕上显示文字,也可以直接在文件中写入要写的内容,具体如下。
示例:
# 展示文本
echo "字符串"
示例:
# 将字符串写入文件中(覆盖文件内容)
echo "字符串" > 文件名
示例:
# 将字符串写入文件中(不覆盖文件内容)
echo "字符串" >> 文件名
示例:
# 将命令失败结果追加 error.log 文件的后面
cat 不存在的文件 &>> error.log
awk:文本分析工具
用法:awk [参数选项] 语法 文件
是一种处理文本文件的语言,是一个强大的文本分析工具
常用参数:
选项 | 含义 |
---|---|
-F ‘,’ | 使用指定字符分割 |
$ + 数字 | 获取第几段内容 |
$0 | 获取当前行内容 |
OFS=“字符” | 向外输出时的段分割字符串 |
输出时的转义字符
选项 | 含义 |
---|---|
\b | 表示删除前面的空格 |
\n | 表示换行 |
\t | 表示水平制表符 |
\v | 表示垂直制表符 |
\c | \c 后面的字符将不会输出,同一时候,输出完毕后也不会换行 |
\r | 输出回车符 |
\a | 表示输出一个警告的声音 |
常用函数
函数 | 作用 |
---|---|
toupper() | 字符转成大写 |
tolower() | 字符转成小写 |
length() | 返回字符长度 |
以 a.txt 文件为例,这个文本内容是成绩单,分别记录了4名同学的各科成绩:
示例:
# 输出文件中包含 mike 或者 alin 的行
cat a.txt | awk '/mike|alin/'
示例:
# 每一行按照空格切割,再打印出切割的每一部分
cat a.txt | awk -F ' ' '{print $1,$2,$3,$4}'
示例:
# 每一行按照空格切割,再打印出切割的每一部分,用 === 连接
cat a.txt | awk -F ' ' '{OFS="===="}{print $1,$2,$3,$4}'
示例:
# 每一行按照空格切割,再打印出切割的每一部分,用制表符连接
cat a.txt | awk -F ' ' '{OFS="\t"}{print $1,$2,$3,$4}'
示例:
# 每一行按照空格切割,将第一段内容转成大写并显示
cat a.txt | awk -F ' ' '{print toupper($1),$2,$3,$4}'
示例:
# 每一行按照空格切割,计算第四列的总分并显示
# BEGIN{初始化操作}{每条都执行}END{结束时操作}
cat a.txt | awk -F ' ' 'BEGIN{}{totel=totel+$4}END{print totel}'
示例:
# 每一行按照空格切割,计算第四列的总分并显示,显示总分,总人数,平均分
more +2 a.txt | awk -F ' ' 'BEGIN{}{totel=totel+$4}END{print totel,NR,(totel/NR)}'
ln:软连接(快捷方式)
用法:ln -s 目标文件路径 快捷方式路径
比如我在 /a-mike/file 下有一本个文件 人生.txt ,我也要在 ~ 目录下创建一个快捷方式,直接打开该文件
示例:
# 在 ~ 下设置 /a-mike/file/人生.txt 的快捷键打开方式文件为 a.txt
ln -s /a-mike/file/人生.txt a.txt
二、文件压缩和有关归档的命令
gzip:压缩文件或者目录
用法:gzip [参数] [文件或者目录]
gzip 是个使用广泛的压缩程序,文件经它压缩过后,其名称后面会多出 .gz
的扩展名,也可以用来解压文件。
查看使用详情:
gzip --help
常用参数:
参数 | 释义 |
---|---|
-a | 或–ascii 使,ASCII文字模式 |
-c | 或–stdout或–to-stdout ,把压缩后的文件输出到标准输出设备,不去变动原始文件 |
-d | 或–decompress或----uncompress,解开压缩文件 |
-r | 或–recursive ,递归处理,将指定目录下的所有文件及子目录一并处理 |
-f | 或–force ,强行压缩文件。不理会文件名称或硬连接是否存在以及该文件是否为符号连接 |
-l | 或–list,列出压缩文件的相关信息 |
-n | 或–no-name压,缩文件时,不保存原来的文件名称及时间戳记 |
-N | 或–name,压缩文件时,保存原来的文件名称及时间戳记 |
-q | 或–quiet ,不显示警告信息 |
-S | 或–sffix,更改压缩字尾字符串 |
-t | 或–test ,测试压缩文件是否正确无误 |
-v | 或–verbose,显示指令执行过程 |
-V | 或–version ,显示版本信息 |
-L | 或–license,显示版本与版权信息 |
-num | 用指定的数字num调整压缩的速度,-1或–fast表示最快压缩方法(低压缩比),-9或–best表示最慢压缩方法(高压缩比)。系统缺省值为6 |
-h | 或–help ,在线帮助 |
示例:
# 指定压缩某个文件
gzip fileName
示例:
# 将当前目录下的每个文件压缩成.gz文件
gzip *
示例:
# 解压当前目录下所有压缩文件,并列出详细信息
gzip -dv *
示例:
# 详细列出当前目录下的压缩文件的信息,但不进行解压
gzip -l *
示例:
# 递归的压缩目录
gzip -rv fileName
示例:
# 递归的解压目录
gzip -drv fileName
示例:
# 解压当前目录下的所有文件
gzip -dv *
参考博客:linux每日命令:gzi命令
gunzip:解压文件
用法:gunzip [参数选项] [文件]
gunzip
命令的作用与 gzip -d
是类似的。
查看使用详情:
gunzip --help
常用参数:
参数 | 释义 |
---|---|
-a | 或–ascii 使,ASCII文字模式 |
-c | 或–stdout或–to-stdout ,把压缩后的文件输出到标准输出设备,不去变动原始文件 |
-r | 或–recursive ,递归处理,将指定目录下的所有文件及子目录一并处理 |
-f | 或–force ,强行压缩文件。不理会文件名称或硬连接是否存在以及该文件是否为符号连接 |
-l | 或–list,列出压缩文件的相关信息 |
-n | 或–no-name压,缩文件时,不保存原来的文件名称及时间戳记 |
-N | 或–name,压缩文件时,保存原来的文件名称及时间戳记 |
-q | 或–quiet ,不显示警告信息 |
-S | 或–sffix,更改压缩字尾字符串 |
-t | 或–test ,测试压缩文件是否正确无误 |
-v | 或–verbose,显示指令执行过程 |
-V | 或–version ,显示版本信息 |
-L | 或–license,显示版本与版权信息 |
-h | 或–help ,在线帮助 |
示例:
# 解压指定文件
gunzip fileName
示例:
# 解压当前目录下的所有文件
gunzip *
示例:
# 保留源文件解压
# gunzip -c [archive-name] > [outputfile-name]
gunzip -c archive-name > outputfile-name
示例:
# 保留源文件解压,并将解压后的文件放到指定路径下
# gunzip -c [compressed-file] > [/file/filename]
gunzip -c archive-name > /file/filename
tar:打包、压缩和解压文件/文件夹
用法:tar [必要参数] [选择参数] [文件]
tar 是用来建立,还原备份文件的工具程序,它可以加入,解开备份文件内的文件,tar本身不具有压缩功能,他是调用压缩功能实现的。
查看使用详情:
tar --help
常用参数:
参数 | 释义 |
---|---|
-A | 新增压缩文件到已存在的压缩 |
-c | 建立新的压缩文件 |
-d | 记录文件的差别 |
-r | 添加文件到已经压缩的文件 |
-u | 添加改变了和现有的文件到已经存在的压缩文件 |
-x | 从压缩的文件中提取文件,解压 |
-t | 显示压缩文件的内容 |
-z | 支持gzip解压文件 |
-j | 支持bzip2解压文件 |
-Z | 支持compress解压文件 |
-v | 显示操作过程 |
-l | 文件系统边界设置 |
-k | 保留原有文件不覆盖 |
-m | 保留文件不被覆盖 |
-W | 确认压缩文件的正确性 |
-b | 设置区块数目 |
-C | 切换到指定目录 |
-f | 指定压缩文件 |
–exclude | 排除符合范本样式的文件 |
–help | 显示帮助信息 |
–version | 显示版本信息 |
示例:
# 打包 xxx.xx 文件为 xxx.tar
tar -cvf xxx.tar xxx.xx
示例:
# 压缩 xxx.xx 文件为 xxx.tar.gz (非打包)
tar -czvf xxx.tar.gz xxx.xx
# 压缩 xxx 文件夹为 xxx.gz (非打包)
tar -czvf xxx.gz xxx
示例:
# 列出压缩文件内容
tar -tzvf xxx.tar.gz
示例:
# 解压文件
tar -xzvf xxx.tar.gz
示例:
# 打包(不压缩)指定文件夹xxx为 xxx.tar
tar cf xxx.tar xxx
# 查看打包文件下的内容
tar tvf xxx.tar
示例:
# 压缩打包指定文件夹xxx为 xxx.tar.bz2
tar jcf xxx.tar.bz2 xxx
# 查看打包文件下的内容
tar jtvf xxx.tar.bz2
示例:
# 压缩打包指定文件夹xxx为 xxx.tar.gz
tar czf xxx.tar.gz xxx
# 查看打包文件下的内容
tar ztvf xxx.tar.gz
示例:
# 解压 xxx.tar 文件为 xxx
tar xf xxx.tar xxx
# 解压 xxx.tar.bz2 文件为 xxx
tar jxf xxx.tar.bz2 xxx
# 解压 xxx.tar.gz 文件为 xxx
tar xzf xxx.tar.gz xxx
示例:
# 文件备份下来,并且保存其权限
tar czvfp xxx.tar.gz xxx-a.xx xxx-b.xx xxx-c.xx
示例:
# 在 dirName 文件夹当中,比某个日期新的文件才备份
tar -N "2022/2/22" -czvf xxx.tar.gz dirName
示例:
# 备份文件夹内容是排除部分文件
tar --exclude dirName/xxx xxx.tar.gz dirName/*
zip:打包和压缩文件
用法:zip [必要参数] [选择参数] [文件]
zip 是个使用广泛的压缩程序,文件经他压缩后会另外产生 “.zip” 扩展名的压缩文件。
常用参数:
参数 | 释义 |
---|---|
-q | 不显示指令执行过程 |
-r | 递归处理,将指定目录下的所有文件和子目录一并处理 |
示例:
# 压缩文件/文件夹 new-file ,压缩文件命名为 new-file.zip
zip -q -r new-file.zip new-file
unzip:解压缩扩展名为.zip的文件
用法:unzip [必要参数] [选择参数] [文件]
该命令只能解压 “.zip” 的压缩文件
常用参数:
参数 | 释义 |
---|---|
-l | 显示压缩文件内所包含的文件 |
-d <目录> | 指定文件解压缩后所要存储的目录 |
示例:
# 显示压缩文件 new-file.zip 内所包含的文件
unzip -l new-file.zip
示例:
# 将压缩文件 new-file.zip 内所包含的文件解压到 file-gz 文件夹中
unzip -d file-gz new-file.zip
bzip2:压缩文件
用法:bzip2 [参数选项] 文件
使用新的压缩算法,压缩后的文件比原来的要小,但是花费时间变长。若没有加上任何参数,bzip2 压缩完文件后会产生bz2 的压缩文件,并删除原始的文件。
示例:
# 压缩 a.txt 文件
bzip2 a.txt
bunzip2:解压文件
用法:bunzip2 [参数选项] 文件
常用参数:
参数 | 释义 |
---|---|
-v | 解压文件时,显示详细信息 |
示例:
# 解压 a.txt.bz2,并显示详细信息
bunzip2 -v a.txt.bz2
三、系统管理相关的命令
shutdown:关机命令
用法:shutdown [-t seconds] [-rkhncfF] time [message]
查看命令详情:
shutdown --help
常用参数:
参数 | 释义 |
---|---|
-t seconds | 设定在几秒钟之后进行关机程序 |
-k | 并不会真的关机,只是将警告讯息传送给所有使用者 |
r | 关机后重新开机 |
-h | 关机后停机 |
-n | 不采用正常程序关机,用强迫的方式杀掉所有执行中的程序后自行关机 |
-c | 取消目前已经进行中的关机动作 |
-f | 关机时,不做 fsck 动作(检查 Linux 档系统) |
-F | 关机时,强迫进行 fsck 动作 |
time | 设定关机的时间 |
- message | 传送给所有使用者的警告讯息 |
示例:
# 关机
# 在不同版本上效果可能不一样
# centos 7 的 shutdown 命令是一分钟后才关机
shutdown
如果想取消当前关机的操作可以输入 shutdown -c
示例:
# 立马关机
shutdown -h now
示例:
# 延迟一分钟后关机,并给出提示信息
shutdown +1 "提示信息"
示例:
# 延迟一分钟后关机并重启,并给出提示信息
shutdown -r +1 "提示信息"
reboot:重启
用法:reboot [-n] [-w] [-d] [-f] [-i]
常用参数:
参数 | 释义 |
---|---|
-n | 在重开机前不做将记忆体资料写回硬盘的动作 |
-w | 并不会真的重开机,只是把记录写道 /var/log/wtmp 档案里 |
-d | 不把记录写到 /var/log/wtmp 档案里 |
-f | 强迫重开机,不呼叫 shutdown 这个指令 |
-i | 在重开机之前把所有网路相关的装置先停止 |
示例:
# 重启
reboot
date:日期管理
用法:date [选项] .. [格式]
查看命令详情:
date --help
常用参数:
参数 | 释义 |
---|---|
-d | 显示字符串所指的日期与时间。字符串前后必须加上双引号 |
-s | 根据字符串来设置日期与时间。字符串前后必须加上双引号 |
-u | 显示GMT |
%% | 一个文字的 % |
%a | 当前locale 的星期名缩写(例如: 日,代表星期日) |
%A | 当前locale 的星期名全称 (如:星期日) |
%b | 当前locale 的月名缩写 (如:一,代表一月) |
%B | 当前locale 的月名全称 (如:一月) |
%c | 当前locale 的日期和时间 (如:2005年3月3日 星期四 23:05:25) |
%C | 世纪;比如 %Y,通常为省略当前年份的后两位数字(例如:20) |
%d | 按月计的日期(例如:01) |
%D | 按月计的日期;等于%m/%d/%y |
%e | 按月计的日期,添加空格,等于%_d |
%F | 完整日期格式,等价于 %Y-%m-%d |
%g | ISO-8601 格式年份的最后两位 (参见%G) |
%G | ISO-8601 格式年份 (参见%V),一般只和 %V 结合使用 |
%h | 等于%b |
%H | 小时(00-23) |
%I | 小时(00-12) |
%j | 按年计的日期(001-366) |
%k | hour, space padded ( 0…23); same as %_H |
%l | hour, space padded ( 1…12); same as %_I |
%m | month (01…12) |
%M | minute (00…59) |
%n | 换行 |
%N | 纳秒(000000000-999999999) |
%p | 当前locale 下的"上午"或者"下午",未知时输出为空 |
%P | 与%p 类似,但是输出小写字母 |
%r | 当前locale 下的 12 小时时钟时间 (如:11:11:04 下午) |
%R | 24 小时时间的时和分,等价于 %H:%M |
%s | 自UTC 时间 1970-01-01 00:00:00 以来所经过的秒数 |
%S | 秒(00-60) |
%t | 输出制表符 Tab |
%T | 时间,等于%H:%M:%S |
%u | 星期,1 代表星期一 |
%U | 一年中的第几周,以周日为每星期第一天(00-53) |
%V | ISO-8601 格式规范下的一年中第几周,以周一为每星期第一天(01-53) |
%w | 一星期中的第几日(0-6),0 代表周一 |
%W | 一年中的第几周,以周一为每星期第一天(00-53) |
%x | 当前locale 下的日期描述 (如:12/31/99) |
%X | 当前locale 下的时间描述 (如:23:13:48) |
%y | 年份最后两位数位 (00-99) |
%Y | 年份 |
–version | 显示版本信息 |
示例:
# 展示字符串的时间
date -d "2022-12-12 11:11:11"
示例:
# 设置时间(设置时间需要 root 账号)
date -s "2022-12-12 11:11:11"
timedatectl:校正服务器时间、时区
用法:timedatectl
相关概念:
概念 | 说明 |
---|---|
时区 | 因时区不同显示的时间不同,牵扯到夏令时和调整等问题,date 命令可查看 |
系统时钟:System Clock | linux OS 的时间,date 命令可查看 |
硬件时钟:RTC | 主板上由电池供电的 BIOS 时间,hwclock -r 可查看 |
NTP | Network Time Protocol :本机时间和实际的时间之间经常会有差别,一般使用 NTP 服务器进行时间校准 |
示例:
# 查看系统当前时间、日期、时区等信息
timedatectl
# 或者
timedatectl status
CST:北京时间
UTC:世界标准时间
RTC:主板上记录的时间
time zone:时区
四、用户管理命令
useradd:创建用户
用法:useradd [选项] 用户名
该命令必须在管理员的权限下进行,如果你此时用的不是管理员账号可输入命令 su root
切换成 root 账号
示例:
# 创建用户名为 yangkun 的用户
useradd yangkun
su:切换用户
用法: su [选项] [-] [USER [参数]...]
查看命令详情:
su --help
参数 | 释义 |
---|---|
-m -p | –preserve-environment,不重置环境变量 |
-g | –group <组>,指定主组 |
-G | –supp-group <组>,指定一个辅助组 |
-l | –login,使 shell 成为登录 shell |
-c | –command <命令>,使用 -c 向 shell 传递一条命令 |
-f | –fast,向shell 传递 -f 选项(csh 或 tcsh) |
-s | –shell ,若 /etc/shells 允许,则运行 shell |
-h | –help,显示此帮助并退出 |
-V | –version,输出版本信息并退出 |
示例:
# 切换到用户名为 yangkun 的用户
su yangkun
示例:
# 切换root用户执行 ls 命令再将用户切换回来
su -c ls root
passwd:用户口令
用法:passwd [选项] 用户名
示例:
# 设置密码,密码不能是回文,必须是字母和数字的结合
passwd yangkun8080
usermod:修改用户
用法:usermod [选项] 用户名
查看命令详情:
usermod + 回车
示例:
# 将用户名 yangkun 改成 kunyang
usermod -l kunyang yungkun
userdel:删除用户
用法:userdel [选项] 用户名
示例:
# 删除这个用户
userdel kunyang
示例:
# 删除这个用户所有相关的
userdel -r -f kunyang
groupadd:创建用户组
用法:groupadd [选项] 用户组名
示例:
# 添加一个开发用户组
groupadd develop
groupmod:修改用户组
用法:groupmod [选项] 用户组名
查看命令详情:
groupmod + 回车
示例:
# 将 develop 用户组改名为 dev
groupmod -n develop dev
groups:查询用户所属组
用法:groups 用户名
示例:
# 如果没有给用户添加用户组,那它默认该用户就是一个组
groups mike
gpasswd:将用户添加到组
用法:gpasswd [选项] 组名
gpasswd 是 Linux 下的管理工具,用于将一个用户添加到组或者从组中删除
查看命令详情:
gpasswd + 回车
常用参数:
参数 | 释义 |
---|---|
-a | 添加用户到组 |
-d | 从组删除用户 |
-A | 指定管理员 |
-M | 指定组成员和-A的用途差不多 |
-r | 删除密码 |
-R | 限制用户登入组,只有组中的成员才可以用 newgrp 加入该组 |
示例:
# 比如常见一个开发组,为其添加三个用户
# 创建一个开发组
groupadd dev
# 创建三个用户
useradd user1
useradd user2
useradd user3
# 将这三个用户添加到开发组上面
gpasswd -a user1 dev
gpasswd -a user2 dev
gpasswd -a user3 dev
# 查看开发组的成员
grep 'dev' /etc/group
groupdel:删除用户组
用法:groupdel 用户组名
示例:
# 删除 dev 这个用户组
groupdel dev
who:显示当前登录系统的用户
用法:who - [husfV] [user]
常用参数:
参数 | 释义 |
---|---|
-H | 显示标题信息 |
-u | 显示闲置时间,如果一份之后有操作,则显示点,如果超过24小时无操作,则显示old字符串 |
-q | 只显示登入系统的账号名称和总人数 |
-s | 次参数将忽略不予处理,仅负责解决who指令其版本的兼容性问题 |
-w | 显示用户的信息状态栏 |
示例:
# 展示当前正在登录的用户
who
示例:
# 展示当前正在登录的用户并显示标题信息
who -H
logname:显示登陆账号信息
用法:logname [--help] [--vsersion]
示例:
# 显示目前用户的名称
logname
id:查看当前用户的详细信息
用法:id [OPTION]... [用户名称]
查看命令详情:
id --help
常用参数:
参数 | 释义 |
---|---|
-g | 显示用户所属群组的ID |
-G | 显示用户所属附加群组的名称 |
-n | 显示用户,所属群组或者附加群组的名称 |
-r | 显示实际ID |
-u | 显示用户ID |
–help | 显示帮助 |
–version | 显示版本信息 |
示例:
# 查看当前用户的详细信息
id
uid=1000 用户id = 1000
gid=1000 用户组id = 1000
组=1000(mike) 属于mike组
chgrp:更改属组
用法:chgrp [选项] [所属组群] [文件或目录]
或者:chgrp [选项] [--reference=<参考文件或目录>] [--version] [文件或目录]
该命令必须在管理员的权限下进行,如果你此时用的不是管理员账号可输入命令 su root
切换成 root 账号
示例:
# 将 xxx 文件/目录所在的用户组修改成 xxx用户组
chgrp root xxx
sudo:提高普通用户的操作权限
用法:sudo [参数选项]
查看命令详情:
sudo --help
示例:
# 提高用户的权限执行 ls 命令
sudo ls
示例:
# 指定 root 用户去执行 ls 这条命令
sudo -u root ls
五、网络管理命令
ifconfig:显示或者配置网络
用法:ifconfig [参数选项]
示例:
# 展示网卡信息
ifconfig
示例:
# 关闭网卡
ifconfig 网卡名称 down
示例:
# 启动网卡
ifconfig 网卡名称 up
示例:
# 配置网卡 ip
ifconfig 网卡名称 192.168.xx.xx
示例:
# 配置网卡 ip地址 和 子网掩码
ifconfig 网卡名称 192.168.xx.xx netmask 255.255.255.0
netstat:显示网络状态
用法:netstat [参数选项]
常用参数:
参数 | 释义 |
---|---|
-a | 显示所有连线中的Socket |
-i | 显示网卡列表 |
示例:
# 展示系统所有连接详细的情况
netstat -a
示例:
# 显示网卡列表
netstat -i
ping:检测是否与主机连接
用法:ping ip地址或者网址
常用参数:
参数 | 释义 |
---|---|
-c <次数> | 指定接受包的次数 |
示例:
# 检测 百度 是否与当前主机连接
ping www.baidu.com
示例:
# 检测 ip 为 xxx.xxx.xx.xx 是否与当前主机连接
ping xxx.xxx.xx.xx
示例:
# 检测 百度 是否与当前主机连接,只测试两次
ping -c 2 www.baidu.com
六、进程管理命令
kill:删除执行中的程序或工作
用法:kill [参数] [进程号]
kill 是向进程发送信号的命令,不仅仅是用于杀死进程的,当没有给 kill 命令携带任何参数的时候,它默认传递给进程的信号就是终止信号,可以通过 kill -l
查看可以给进程发送哪些信号。
查看 kill 的可用信号:
kill -l
常用参数:
参数 | 释义 |
---|---|
-l | 查看 kill 的可用信号 |
-1 | 重新加载进程(启动被终止的程序,可让该进程重新读取自己的配置文件,类似重新启动) |
-9 | 杀死一个进程 |
-15 | 正常停止一个进程 |
在对进程发送信号之前可以先通过 ps -ef | grep keyword
先查询你想要杀死进程的 pid
示例:
# 重新加载进程号为 pid 的进程
kill -1 pid
示例:
# 强制进程号为 pid 的进程
kill -KILL pid
示例:
# 彻底杀死进程号为 pid 的进程
kill -9 pid
示例:
# 先查询你想要杀死进程的 keyword
ps -ef | grep keyword
# 彻底杀死进程号为 pid 的进程
kill -9 pid
示例:
# 正常停止进程号为 pid 的进程
kill -15 pid
# 或者
kill pid
示例:
# 停止和重启进程(有时候只想简单的停止和重启进程)
kill -HUP pid
示例:
# 给父进程发送一个TERM信号,试图杀死它和它的子进程
kill -TERM PPID
示例:
# 命令杀死同一进程组内的所有进程。其允许指定要终止的进程的名称,而非PID
killall keyword
ps:显示当前进程状态
用法:ps [options]
常用参数:
参数 | 释义 |
---|---|
-a | 显示同一终端下的所有程序 |
-q | 显示所有进程 |
c | 显示进程的真实名称 |
-N | 反向选择 |
-e | 等于“-A” |
e | 显示环境变量 |
f | 显示程序间的关系 |
-H | 显示树状结构 |
r | 显示当前终端的所有程序 |
u | 指定用户的所有进程 |
aux | 显示所有包含其他使用者的行程 |
示例:
# 显示所有进程信息
ps -A
示例:
# 显示指定用户信息
ps -u userName
示例:
# 显示所有进程信息,连同命令行
ps -ef
示例:
# 与 grep 常用组合用法,查找特定进程
ps -ef | grep keyword
示例:
# 将目前属于您自己这次登入的 PID 与相关信息列示出来
ps -l
说明:
- F:代表这个程序的旗标 (flag), 4 代表使用者为 super user
- S:代表这个程序的状态 (STAT),关于各 STAT 的意义将在内文介绍
- UID:程序被该 UID 所拥有
- PID:就是这个程序的 ID
- PPID:则是其上级父程序的ID
- C:CPU 使用的资源百分比
- PRI:这个是 Priority (优先执行序) 的缩写,详细后面介绍
- NI:这个是 Nice 值,在下一小节我们会持续介绍
- ADDR:这个是 kernel function,指出该程序在内存的那个部分。如果是个 running的程序,一般就是 “-”
- SZ:使用掉的内存大小
- WCHAN:目前这个程序是否正在运作当中,若为 - 表示正在运作
- TTY:登入者的终端机位置
- TIME:使用掉的 CPU 时间。
- CMD:所下达的指令为何
示例:
# 列出目前所有的正在内存当中的程序
ps aux
说明:
- USER:该 process 属于那个使用者账号的
- PID:该 process 的号码
- %CPU:该 process 使用掉的 CPU 资源百分比
- %MEM:该 process 所占用的物理内存百分比
- VSZ :该 process 使用掉的虚拟内存量 (Kbytes)
- RSS :该 process 占用的固定的内存量 (Kbytes)
- TTY :该 process 是在那个终端机上面运作,若与终端机无关,则显示 ?,另外, tty1-tty6 是本机上面的登入者程序,若为 pts/0 等等的,则表示为由网络连接进主机的程序。
- STAT:该程序目前的状态,主要的状态有
- R :该程序目前正在运作,或者是可被运作
- S :该程序目前正在睡眠当中 (可说是 idle 状态),但可被某些讯号 (signal) 唤醒。
- T :该程序目前正在侦测或者是停止了
- Z :该程序应该已经终止,但是其父程序却无法正常的终止他,造成 zombie (疆尸) 程序的状态
- START:该 process 被触发启动的时间
- TIME :该 process 实际使用 CPU 运作的时间
- COMMAND:该程序的实际指令
示例:
# 列出类似程序树的程序显示
ps -axjf
示例:
# 可以用 | 管道和 more 连接起来分页查看
ps -aux |more
可按 Ctrl + F
向下滚动一屏,详细操作可参考上述 more
命令
示例:
# 把所有进程显示出来,并输出到 aux20220222.txt文件
ps -aux > aux20220222.txt
示例:
# 输出指定的字段
ps -o pid,ppid,pgrp,session,tpgid,comm
示例:
# 显示系统中所有的进程信息
# 但是只展示 PID TTY TIME CMD
ps -A
参考博客:每天一个linux命令(41):ps命令
top:实时显示进程动态
用法:top [-] [d delay] [q] [c] [S] [s] [i] [n] [b]
常用参数:
参数 | 释义 |
---|---|
-d | 改变显示的更新速度,或是在交谈式指令列( interactive command)按 s |
-q | 没有任何延迟的显示速度,如果使用者是有 superuser 的权限,则 top 将会以最高的优先序执行 |
-c | 切换显示模式,共有两种模式,一是只显示执行档的名称,另一种是显示完整的路径与名称 |
-S | 累积模式,会将己完成或消失的子进程 ( dead child process ) 的 CPU time 累积起来 |
-s | 安全模式,将交谈式指令取消, 避免潜在的危机 |
-i | 不显示任何闲置 (idle) 或无用 (zombie) 的进程 |
-n | 更新的次数,完成后将会退出 top |
-b | 批次档模式,搭配 “n” 参数一起使用,可以用来将 top 的结果输出到档案内 |
-f | 进入字段显示配置模式,可增加或者移除显示字段,按相应的字母新增或去除 |
-M | 根据驻留内存大小进行排序 |
-P | 根据CPU使用百分比大小进行排序 |
-H | 显示线程 |
示例:
# 实时显示进程动态
top
- 第一行:系统运行时间和平均负载
当前时间、系统已运行时间、当前登录用户的数量、最近5、10、15分钟内的平均负载 - 第二行:任务
任务的总数、运行中(running)的任务、休眠(sleeping)中的任务、停止(stopped)的任务、僵尸状态(zombie)的任务 - 第三行:cpu状态
字段 | 释义 |
---|---|
us | user: 运行(未调整优先级的) 用户进程的CPU时间 |
sy | system: 运行内核进程的CPU时间 |
ni | niced:运行已调整优先级的用户进程的CPU时间 |
id | idle:空闲时间 |
wa | IO wait: 用于等待IO完成的CPU时间 |
hi | 处理硬件中断的CPU时间 |
si | 处理软件中断的CPU时间 |
st | 这个虚拟机被hypervisor偷去的CPU时间(译注:如果当前处于一个hypervisor下的vm,实际上hypervisor也是要消耗一部分CPU处理时间的) |
- 第四行:内存
全部可用内存、已使用内存、空闲内存、缓冲内存 - 第五行:swap
全部、已使用、空闲和缓冲交换空间 - 第七行至 N 行:各进程任务的的状态监控
字段 | 释义 |
---|---|
PID | 进程ID,进程的唯一标识符 |
USER | 进程所有者的实际用户名 |
PR | 进程的调度优先级。这个字段的一些值是’rt’。这意味这这些进程运行在实时态 |
NI | 进程的nice值(优先级)。越小的值意味着越高的优先级。负值表示高优先级,正值表示低优先级 |
VIRT | virtual memory usage 虚拟内存,进程使用的虚拟内存。进程使用的虚拟内存总量,单位kb。VIRT=SWAP+RES |
RES | resident memory usage 常驻内存,驻留内存大小。驻留内存是任务使用的非交换物理内存大小。进程使用的、未被换出的物理内存大小,单位kb。RES=CODE+DATA |
SHR | SHR:shared memory 共享内存 |
S | 这个是进程的状态。它有以下不同的值:D - 不可中断的睡眠态。 R – 运行态。S – 睡眠态。T – 被跟踪或已停止。Z – 僵尸态 |
%CPU | 自从上一次更新时到现在任务所使用的CPU时间百分比。%CPU显示的是进程占用一个核的百分比,而不是整个cpu(N核)的百分比,有时候可能大于100,那是因为该进程启用了多线程占用了多个核心,所以有时候我们看该值得时候会超过100%,但不会超过总核数*100 |
%MEM | 进程使用的可用物理内存百分比 |
TIME+ | 任务启动后到现在所使用的全部CPU时间,精确到百分之一秒 |
COMMAND | 运行进程所使用的命令。进程名称(命令名/命令行) |
按 h
或者 ?
会显示帮助,如下:
示例:
# 通过指定监控进程ID来仅仅监控某个进程的状态
top –p PID
结束监控快捷键:
(1)q
(2)Ctrl + z
示例:
# 显示某个进程所有活跃的线程消耗情况
top -H -p pid
按 f
、,P 代表”Last used CPU”
示例:
# 实时监控
# 与 top 相比,COMMAND 的显示方式有些不一样,相对于 top 命令更加完整
top -c
参考博客:Linux top 命令的用法详细详解
jps:列出本机所有的 Java 应用程序
用法:jps [-q] [-mlvV] [<hostId>]
查看命令详情:
jps --help
常用参数:
参数 | 释义 |
---|---|
-q | 只输出进程 ID |
-m | 输出传入 main 方法的参数 |
-l | 输出完全的包名,应用主类名,jar的完全路径名 |
-v | 输出 jvm 参数 |
-V | 输出通过 flag 文件传递到 JVM 中的参数 |
-Joption | 传递参数到vm,例如:-J-Xms48m |
示例:
# 显示进程的ID 和 类的名称
jps
示例:
# 只输出进程ID,而不显示出类的名称
jps -q
示例:
# 可以输出传递给 Java 进程(main 方法)的参数
jps -m
示例:
# 可以输出主函数的完整路径(类的全路径)
jps -l
示例:
# 可以显示传递给 Java 虚拟机的参数
jps -v
jps 支持查看远程服务上的 jvm 进程信息。如果需要查看其他机器上的 jvm 进程,需要在待查看机器上启动 jstatd 服务
创建 touch jstatd.all.policy
策略文件(需要在 jdk 下的 bin 目录创建)
vi jstatd.all.policy
添加以下内容
grant codebase "file:${java.home}/../lib/tools.jar" {
permission java.security.AllPermission;
};
保存
启动 jstatd 服务器
jstatd -J-Djava.security.policy=jstatd.all.policy -J-Djava.rmi.server.hostname=192.168.xxx.xxx
-J 参数是一个公共的参数,如 jps、 jstat 等命令都可以接收这个参数。 由于 jps、 jstat 命令本身也是 Java 应用程序, -J 参数可以为 jps 等命令本身设置 Java 虚拟机参数。
-Djava.security.policy:指定策略文件
-Djava.rmi.server.hostname:指定服务器的ip地址(可忽略)
默认情况下, jstatd 开启在 1099 端口上开启 RMI 服务器。
现在就可在本机上访问服务器上面的 java 进程情况
参考博客:jps-命令
七、磁盘管理相关
lsblk:列出磁盘的使用情况
用法:lsblk [参数选项]
常用参数:
参数 | 释义 |
---|---|
-f | 显示系统信息 |
示例:
# 列出磁盘的使用情况
lsblk
示例:
# 列出磁盘的使用情况,显示系统信息
lsblk -f
df:显示目前在 linux 系统上磁盘使用情况
用法:df [参数选项]
常用参数:
参数 | 释义 |
---|---|
–total | 显示所有的信息 |
-h | 换算成KB,MB,GB等形式进行展示(方便阅读) |
示例:
# 显示整个硬盘的使用情况
df
示例:
# 显示整个硬盘使用情况的详细信息
df --total
示例:
# 显示整个硬盘使用情况,换算成KB,MB,GB等形式
df -h
示例:
# 查看某个文件夹的磁盘使用情况
df /a-mike/
八、软件安装相关
rpm:管理套件(安装、升级、卸载)
用法:rpm [选项...]
rpm 命令是RPM软件包的管理工具。rpm 原本是Red Hat Linux发行版专门用来管理Linux各项套件的程序,由于它遵循GPL规则且功能强大方便,因而广受欢迎。逐渐受到其他发行版的采用。RPM套件管理方式的出现,让Linux易于安装,升级,间接提升了Linux的适用度。
查看使用详情:
rpm --help
常用参数:
参数 | 释义 |
---|---|
-a | 查询所有套件 |
-b | 设置包装套件的完成阶段,并指定套件档的文件名称 |
-c | 只列出组态配置文件,本参数需配合"-l"参数使用 |
-d | 只列出文本文件,本参数需配合"-l"参数使用 |
-e<套件档> | 或–erase<套件档>,删除指定的套件 |
-f<文件>+ | 查询拥有指定文件的套件 |
-h | 或–hash,件安装时列出标记 |
-i | 显示套件的相关信息 |
-i<套件档> | 或–install<套件档>,安装指定的套件档 |
-l | 显示套件的文件列表 |
-p<套件档>+ | 查询指定的RPM套件档 |
-q | 使用询问模式,当遇到任何问题时,rpm指令会先询问用户 |
-R | 显示套件的关联性信息 |
-s | 显示文件状态,本参数需配合"-l"参数使用 |
-U<套件档> | 或–upgrade<套件档>,升级指定的套件档 |
-v | 显示指令执行过程 |
-vv | 详细显示指令执行过程,便于排错 |
- -force | 即使覆盖其他包的文件也没强迫安装 |
- -nodeps | 即使依赖包没安装,也被强制安装 |
- -help | 在线帮助 |
- -version | 显示版本信息 |
示例:
# 直接安装
rpm -ivh xxx.rpm
示例:
# 忽略报错,强制安装
rpm --force -ivh xxx.rpm
示例:
# 查看 rpm 包信息
rpm -qpi xxxxx.rpm
示例:
# 查看 rpm 包依赖
rpm -qpR xxxxx.rpm
示例:
# rpm包中的文件安装的位置
rpm -ql tree
示例:
# 查看 rpm 包中包含那些文件
rpm -qlp xxxxx.rpm
# 可以加grep搜索
rpm -qlp xxxxx.rpm|grep spec
示例:
# 查询
rpm -ql tree
# 卸载
rpm -e tree
示例:
# 获取某个软件包的文件全名
# 查询一个rpm包是否被安装
rpm -q tree
示例:
# 列出所有安装过的包
rpm -qa
示例:
# 哪个软件包包含这个程序
# 返回软件包的全名
rpm -qf `程序名`
# 返回软件包的有关信息
rpm -qif `程序名`
# 返回软件包的文件列表
rpm -qlf `程序名`
示例:
# 查看rpm包里的pre和post install脚本
rpm -qp --scripts xxxxx.rpm
示例:
# 查看安装的过程中,代码的执行过程
rpm -ih -vv xxxxx.rpm
示例:
# 强制卸载rpm包(没有后缀)
rpm -e --nodeps xxxxx
yum:前端软件包管理器
用法:yum [options] [command] [package ...]
相比较 rpm
,rpm 只能安装已经下载到本地机器上的 rpm 包,yum 能在线下载并安装 rpm 包,能更新系统,且还能处理包与包之间的依赖问题,这个是 rpm 工具所部具备的
常用命令:
列出所有可能更新的软件清单命令:
yum check-update
更新所有软件命令:
yum update
仅安装指定的软件命令:
yum install <package name>
仅跟新指定的软件命令:
yum update <package name>
列出所有可安装的软件清单命令:
yum list
删除软件包命令:
yum remove <package name>
查找软件包命令:
yum search <keyword>
清除缓存目录下的软件包:
yum clean packages
清除缓存目录下的 headers:
yum clean headers
清除缓存目录下旧的 headers:
yum clean oldheaders
清除缓存目录下的软件包和旧的 headers:
yum clean,yum clean all
# 或者
yum clean packages,yum clean oldheaders
常用参数:
参数 | 释义 |
---|---|
-y | 安装时遇到的提示全选择 yes |
示例:
# 安装 tree
yum -y install tree
下载完毕,可以看到 tree
命令可以使用了
示例:
# 卸载 tree
yum remove tree
示例:
# 查找以 tom 开头的软件名称
yum list tom*
修改 yum 源
:使用 yum 下载软件,默认使用的是国外的 yum 源,我们使用 yum 命令一般会去修改 yum 源,改为国内的,比如:阿里、网易、搜狐等等。在换 yum 源之前需要先下载个 wget
插件
yum -y install wget
下载完毕之后,最好先将系统原来的 yum 相关的配置文件做一个备份
# 切换到 /etc/yum.repos.d/ 目录下
cd /etc/yum.repos.d/
# 将配置文件改一个名字(相当于做了一个备份 )
mv CentOS-Base.repo CentOS-Base.repo.back
# 使用 wget 下载工具下载阿里的 yum 源文件
wget -O CentOS-Base.repo http://mirrors.aliyun.com/repo/Centos-7.repo
可以去查看一下 阿里 yum 源的配置文件
cat CentOS-Base.repo
可以看到这里的地址都是换成阿里的了
但是还没有完成,还需要清理下之前的缓存,并且加载下现在的 yum 源
# 清理缓存
yum clean all
# 加载现在的 yum 源
yum makecache
怎么验证 yum 源已经配置好了呢?可以去查询一下
yum search tomcat
可以看到镜像已经换成是阿里的了