Linux 常用终端命令整理
linux系统中提供了大量的命令,该文整理了一份使用较为频繁的命令,并且我们对命令进行了一个详细的分类。
一 、Linux命令格式
1.1 Linux终端命令格式
终端命令格式:
command [options] [parameter]
说明:
- command :命令名,相应功能的英文单词或单词的缩写;
- [options] :选项,可用来对命令进行控制,也可以省略;
- parameter :传给命令的参数,可以是 零个、一个 或者 多个;
在linux命令行中,命令的参数有的时候是一个连字符,有的时候是两个连字符。
对于options类型参数可以有两种方式:
- 短选项(short options):顾名思义,就是短小参数。它们通常包含一个连字号和一个字母(大写或小写字母),例如:-s,-h等。
- 长选项(long options):长选项,包含了两个连字号和一些大小写字母组成的单词,例如:--size,--help等。
注:
-
一个程序通常会提供包括short options和long options两种参数形式的参数,short options一般是其对应的long options的开头字母。
-
-
和--
可以用来做区分sh是一个选项还是两个选项s和h的组合。-sh是s和h的组合 --sh则说明sh是单一的选项。
1.2 查阅命令帮助信息
--help:显示 command 命令的帮助信息;
[root@longmax2002 ~]# ls --help
Usage: ls [OPTION]... [FILE]...
List information about the FILEs (the current directory by default).
Sort entries alphabetically if none of -cftuvSUX nor --sort is specified.
Mandatory arguments to long options are mandatory for short options too.
-a, --all do not ignore entries starting with .
-A, --almost-all do not list implied . and ..
--author with -l, print the author of each file
-b, --escape print C-style escapes for nongraphic characters
--block-size=SIZE scale sizes by SIZE before printing them; e.g.,
'--block-size=M' prints sizes in units of
1,048,576 bytes; see SIZE format below
-B, --ignore-backups do not list implied entries ending with ~
-c with -lt: sort by, and show, ctime (time of last
man:查阅 command 命令的使用手册,man 是 manual 的缩写,是 Linux 提供的一个手册,包含了绝大部分的命令、函数的详细使用;
man pwd
使用 man 时的操作键:
- 空格键:显示手册页得下一屏;
- Enter键:一次滚动手册页得一行;
- b:回滚一屏;
- f:前滚一屏;
- q:退出;
- /word:搜索word字符串;
二、文件相关命令
2.1 创建文件(touch)
touch命令:创建文件或修改文件时间,如果文件不存在,可以创建一个空白文件,如果文件已经存在,可以修改文件的末次修改日期。
[root@longmax2002 zy]# touch test
[root@longmax2002 zy]# ll
total 0
-rw-r--r-- 1 root root 0 Sep 29 13:18 test
2.2 创建目录(mkdir)
mkdir命令:创建一个新的目录。
选项 | 含义 |
---|---|
-p | 可以递归创建目录 |
新建目录的名称不能与当前目录中已有的目录或文件同名。
[root@longmax2002 zy]# mkdir test
mkdir: cannot create directory ‘test’: File exists
2.3 删除文件/目录(rm)
rm命令:删除文件或目录,使用 rm 命令要小心,因为文件删除后不能恢复。
选项 | 含义 |
---|---|
-f | 强制删除,忽略不存在的文件,无需提示 |
-r | 递归地删除目录下的内容,删除文件夹时必须加此参数 |
rm -rf test
2.4 软/硬链接(ln)
命令:
ln -s 被链接的源文件 链接文件
建立文件的软链接,用通俗的方式讲类似于Windows下的快捷方式。
注意:
- 没有-s选项建立的是一个硬链接文件两个文件占用相同大小的硬盘空间,工作中几乎不会建立文件的硬链接。
- 源文件要使用绝对路径,不能使用相对路径,这样可以方便移动链接文件后,仍然能够正常使用。
在 Linux 中,文件名和文件的数据是分开存储的:
提示:
- 在 Linux 中,只有文件的 硬链接数 == 0 才会被删除。
- 使用 ls -l 可以查看一个文件的硬链接的数量。
- 在日常工作中,几乎不会建立文件的硬链接。
2.5 打包/解解包(tar)
打包压缩 是日常工作中备份文件的一种方式,在不同操作系统中,常用的打包压缩方式是不同的:
- Windows 常用 rar。
- Mac 常用 zip。
- Linux 常用 tar.gz。
tar 是 Linux 中最常用的备份工具,此命令可以把一系列文件打包到一个大文件中,也可以把一个打包的大文件恢复成一系列文件。
tar 的命令格式如下:
# 打包文件
tar -cvf 打包文件.tar 被打包的文件/路径...
# 解包文件
tar -xvf 打包文件.tar
tar选项说明:
选项 | 含义 |
---|---|
c | 生成档案文件,创建打包文件 |
x | 解开档案文件 |
v | 列出归档解档的详细过程,显示进度 |
f | 指定档案文件名称,f 后面一定是 .tar 文件,所以必须放选项最后 |
注意: f 选项必须放在最后,其他选项顺序可以随意。
2.6 压缩/解压缩(tar)
tar 与 gzip 命令结合可以使用实现文件打包和压缩,tar 只负责打包文件,但不压缩,用 gzip 压缩 tar 打包后的文件,其扩展名一般用 xxx.tar.gz。
在 Linux 中,最常见的压缩文件格式就是 xxx.tar.gz。
在 tar 命令中有一个选项 -z 可以调用 gzip ,从而可以方便的实现压缩和解压缩的。
功能命令格式如下:
# 压缩文件
tar -zcvf 打包文件.tar.gz 被压缩的文件/路径...
# 解压缩文件
tar -zxvf 打包文件.tar.gz
# 解压缩到指定路径
tar -zxvf 打包文件.tar.gz -C 目标路径
选项 | 含义 |
---|---|
-C | 解压缩到指定目录,注意:要解压缩的目录必须存在 |
tar 与 bzip2 命令结合可以使用实现文件打包和压缩(用法和 gzip 一样, tar 只负责打包文件,但不压缩,用 bzip2 压缩 tar 打包后的文件,其扩展名一般用 xxx.tar.bz2。
在 tar 命令中有一个选项 -j 可以调用 bzip2 ,从而可以方便的实现压缩和解压缩的功能。
命令格式如下:
# 压缩文件
tar -jcvf 打包文件.tar.bz2 被压缩的文件/路径...
# 解压缩文件
tar -jxvf 打包文件.tar.bz2
2.7 查看文件(cat、more)
cat 命令可以用来查看文件内容、创建文件、文件合并、追加文件内容 等功能。
cat 会一次显示所有的内容,适合查看内容较少的文本文件。
选项 | 含义 |
---|---|
-b | 对非空输出行编号 |
-n | 对输出的所有行编号 |
[root@longmax2002 zy]# cat -n test
1 222
2 3333
3 444
4 5655
5 67777
Linux 中还有一个 nl 的命令和 cat -b 的效果等价。
more 命令可以用于分屏显示文件内容,每次只显示一页内容,适合于 查看内容较多的文本文件。
操作键 | 功能 |
---|---|
空格键 | 显示手册页的下一屏 |
Enter | 键 一次滚动手册页的一行 |
b | 回滚一屏 |
f | 前滚一屏 |
q | 退出 |
/word | 搜索 word 字符串 |
2.8 查找文件(find)
find 命令功能非常强大,通常用来在特定的目录下,搜索符合条件的文件。
命令:
find [路径] -name “*.py”
查找指定路径下扩展名是 .py 的文件,包括子目录。
- 如果省略路径,表示在当前文件夹下查找;
- 通配符,在使用 find 命令时同时可用;
2.9 查看目录(ls)
ls 是英文单词 list 的简写,其功能为列出目录的内容,是用户最常用的命令之一,类似于 DOS下的 dir 命令。
- Linux 文件或者目录名称最长可以有 256 个字符参数;
- 以 . 开头的文件为隐藏文件,需要用 -a 参数才能显示;
- . 代表当前目录;
- … 代表上一级目录;
ls常用选项:
参数 | 含义 |
---|---|
-a | 显示指定目录下所有子目录与文件,包括隐藏文件 |
-l | 以列表方式显示文件的详细信息 |
-h | 配合 -l 以人性化的方式显示文件大小 |
ls通配符的使用:
通配符 | 含义 |
---|---|
* | 代表任意个数个字符 |
? | 代表任意一个字符,至少 1 个 |
[] | 表示可以匹配字符组中的任一一个 |
[abc] | 匹配 a、b、c 中的任意一个 |
[a-f] | 匹配从 a 到 f 范围内的的任意一个字符 |
注意:以 . 开头的文件为隐藏文件,需要用 -a 参数才能显示。
[root@longmax2002 ~]# ls *
node-v12.18.1-linux-x64.tar.xz
logs:
nacos
nacos:
naming
node-v12.18.1-linux-x64:
bin CHANGELOG.md include lib LICENSE README.md share
tree 命令可以以树状图列出文件目录结构:
选项 | 含义 |
---|---|
-d | 只显示目录 |
2.10 切换目录(cd)
cd 是英文单词 change directory 的简写,其功能为更改当前的工作目录,也是用户最常用的命令之一。
命令 | 含义 |
---|---|
cd | 切换到当前用户的主目录(/home/用户目录) |
cd ~ | 切换到当前用户的主目录(/home/用户目录) |
cd . | 保持在当前目录不变 |
cd … | 切换到上级目录 |
cd - | 可以在最近两次工作目录之间来回切换 |
相对路径和绝对路径:
- 相对路径 在输入路径时,最前面不是 / 或者 ~,表示相对当前目录所在的目录位置;
- 绝对路径 在输入路径时,最前面是 / 或者 ~,表示从根目录/家目录开始的具体目录位置;
2.11 复制文件(cp)
cp 命令的功能是将给出的文件或目录复制到另一个文件或目录 中,相当DOS 下的 copy命令。
选 项 | 含义 |
---|---|
-i | 覆盖文件前提示 |
-r | 若给出的源文件是目录文件,则 cp 将递归复制该目录下的所有子目录和文件,目标文件必 |
cp 源文件 目标文件(路径+可以重命名文件名)
2.12 移动文件(mv)
mv 命令可以用来移动文件或目录,也可以给文件或目录重命名。
选项 | 含义 |
---|---|
-i | 覆盖文件前提示 |
mv 源文件 目标文件(路径+文件名)
mv 源文件 目标路径/
2.13 文本搜索(grep)
grep [-abcEFGhHilLnqrsvVwxy][-A<显示行数>][-B<显示列数>][-C<显示列数>][-d<进行动作>][-e<范本样式>][-f<范本文件>][--help][范本样式][文件或目录...]
grep 命令用于查找文件里符合条件的字符串。
grep 指令用于查找内容包含指定的范本样式的文件,如果发现某文件的内容符合所指定的范本样式,预设 grep 指令会把含有范本样式的那一列显示出来。若不指定任何文件名称,或是所给予的文件名为 -,则 grep 指令会从标准输入设备读取数据。
选项 | 含义 |
---|---|
-n | 显示匹配行及行号 |
-v | 显示不包含匹配文本的所有行(相当于求反) |
-i | 忽略大小写 |
-q | 用于if判断,如果有匹配的内容立即返回0状态 |
-e | 从文件内容查找与正则表达式匹配的行 |
-r | 递归查找 |
常用的两种模式查找
参数 | 含义 |
---|---|
^a | 行首,搜寻以 a 开头的行 |
ke$ | 行尾,搜寻以 ke 结束的行 |
[root@longmax2002 zy]# cat -n test
1 222
2 3333
3 444
4 5655
5 67777
[root@longmax2002 zy]# ^C
[root@longmax2002 zy]# more test | grep -n -i 5655
4:5655
如果想在当前路径即子路径(R或者r参数)查找包含某个字符串的文件:
[root@VM-0-17-centos grep]# grep 222 * -nR 1.sh:3:if [[ `grep -q "222" "2222234"` ]];then test:1:1 222
2.14 文本分析(awk)
awk是一个强大的文本分析工具,相对于grep的查找,sed的编辑,awk在其对数据分析并生成报告时,显得尤为强大。简单来说awk就是把文件逐行的读入,以空格为默认分隔符将每行切片,切开的部分再进行各种分析处理。
awk [-F field-separator] 'commands' input-file(s)
其中,commands 是真正awk命令,[-F域分隔符]是可选的。 input-file(s) 是待处理的文件。
在awk中,文件的每一行中,由域分隔符分开的每一项称为一个域。通常,在不指名-F域分隔符的情况下,默认的域分隔符是空格。
假设ps -ef | grep nginx的输出如下:
[root@VM-0-17-centos grep]# ps -ef | grep nginx nobody 965 16561 0 18:55 ? 00:00:00 nginx: worker process root 10913 4865 0 21:38 pts/0 00:00:00 grep --color=auto nginx root 16561 1 0 2020 ? 00:00:00 nginx: master process ./nginx
如果只显示进程id:
[root@VM-0-17-centos grep]# ps -ef | grep nginx | awk '{print $2}' 965 12848 16561
awk工作流程是这样的:
- 读入有'\n'换行符分割的一条记录;
- 然后将记录按指定的域分隔符划分域;
- 填充域,$0则表示所有域,$1表示第一个域,$n表示第n个域。默认域分隔符是空格,所以$1表示登录用户,$2表示进程id,以此类推。
2.15 文本编辑(sed)
sed 命令是利用脚本来处理文本文件。sed 可依照脚本的指令来处理、编辑文本文件。
sed [-nefr] [动作]
选项与参数:
- -n :使用安静(silent)模式。在一般 sed 的用法中,所有来自 STDIN 的数据一般都会被列出到终端上。但如果加上 -n 参数后,则只有经过sed 特殊处理的那一行(或者动作)才会被列出来。
- -e :直接在命令列模式上进行 sed 的动作编辑;
- -f :直接将 sed 的动作写在一个文件内, -f filename 则可以运行 filename 内的 sed 动作;
- -r :sed 的动作支持的是延伸型正规表示法的语法。(默认是基础正规表示法语法)
- -i :直接修改读取的文件内容,而不是输出到终端。
动作说明: [n1[,n2]]function
- n1, n2 :不见得会存在,一般代表选择进行动作的行数,举例来说,如果我的动作是需要在 10 到 20 行之间进行的,则"10,20[动作行为] ";
function:
- a :新增, a 的后面可以接字串,而这些字串会在新的一行出现(下一行为新行);
- c :取代, c 的后面可以接字串,这些字串可以取代 n1,n2 之间的行;
- d :删除,因为是删除啊,所以 d 后面通常不接任何字符串;
- i :插入, i 的后面可以接字串,而这些字串会在新的一行出现(上一行为新行);
- p :列印,亦即将某个选择的数据印出。通常 p 会与参数 sed -n 一起运行;
- s :取代,可以直接进行取代的工作,通常这个 s 的动作可以搭配正则表达式;
这是1.txt的内容:
[root@VM-0-17-centos grep]# cat 1.txt d ddd #fff
修改1.text,将匹配到的第一个d替换成7523:
[root@VM-0-17-centos grep]# sed -i 's/d/7523/' 1.txt [root@VM-0-17-centos grep]# cat 1.txt 7523 7523dd #fff
修改1.text,将匹配到的所有d替换成7523:
[root@VM-0-17-centos grep]# sed -i 's/d/7523/g' 1.txt [root@VM-0-17-centos grep]# cat 1.txt 7523 752375237523 #fff
去掉 “行首” 带“@”的首字母@:
sed -i 's/^@//' file
特定字符串的行前插入新行:
sed -i '/特定字符串/i 新行字符串' file
特定字符串的行后插入新行:
sed -i '/特定字符串/a 新行字符串' file
[root@VM-0-17-centos grep]# sed -i '/#fff/a xxxxxx' 1.txt [root@VM-0-17-centos grep]# cat 1.txt d ddd #fff xxxxxx
特定字符串的删除:
sed -i '/字符串/d' file
删除第m到第n行:
sed -i 'm,nd file
三、进程、内存系统信息相关命令
3.1 查看系统
uname -a (Linux查看版本当前操作系统内核信息)
[root@longmax2002 yuncang]# uname -a
Linux longmax2002 3.10.0-862.14.4.el7.x86_64 #1 SMP Wed Sep 26 15:12:11 UTC 2018 x86_64 x86_64 x86_64 GNU/Linux
cat /proc/version (Linux查看当前操作系统版本信息)
[root@longmax2002 yuncang]# cat /proc/version
Linux version 3.10.0-862.14.4.el7.x86_64 (mockbuild@kbuilder.bsys.centos.org) (gcc version 4.8.5 20150623 (Red Hat 4.8.5-28) (GCC) ) #1 SMP Wed Sep 26 15:12:11 UTC 2018
cat /etc/issue 或cat /etc/redhat-release(Linux查看版本当前操作系统发行版信息)
[root@longmax2002 yuncang]# cat /etc/issue
\S
Kernel \r on an \m
.getconf LONG_BIT (Linux查看版本说明当前CPU运行在32bit模式下, 但不代表CPU不支持64bit)
hostname (查看服务器名称)
[root@longmax2002 yuncang]# hostname
longmax2002
cat /proc/cpuinfo( 查看CPU信息 )
[root@longmax2002 yuncang]# cat /proc/cpuinfo
processor : 0
vendor_id : GenuineIntel
cpu family : 6
model : 85
model name : Intel(R) Xeon(R) Platinum 8269CY CPU @ 2.50GHz
stepping : 7
microcode : 0x1
cpu MHz : 2500.016
cache size : 36608 KB
physical id : 0
siblings : 2
core id : 0
cpu cores : 1
apicid : 0
initial apicid : 0
fpu : yes
fpu_exception : yes
cpuid level : 22
wp : yes
3.2 时间和日期(date、cal)
3.2.1 date
date命令:查看系统时间。
[root@longmax2002 zy]# date
Wed Sep 29 13:41:41 CST 2021
3.2.2 cal
cal命令:calendar 查看日历, -y 选项可以查看一年的日历
[root@longmax2002 zy]# cal
September 2021
Su Mo Tu We Th Fr Sa
1 2 3 4
5 6 7 8 9 10 11
12 13 14 15 16 17 18
19 20 21 22 23 24 25
26 27 28 29 30
3.3 进程信息(ps、top、kill、pgrep)
所谓进程,通俗地说就是 当前正在执行的一个程序。
3.3.1 ps
Linux ps (英文全拼:process status)命令用于显示当前进程的状态,类似于 windows 的任务管理器。
ps [options] [--help]
选项 | 含义 |
---|---|
a | 显示终端上的所有进程 |
u | 显示进程的详细状态 |
x | 显示没有控制终端的进程 |
-A | 显示终端上的所有进程 |
-e | 等于"-A" |
e | 显示环境变量 |
f |
显示程序间的关系
|
ps aux:显示所有包含其他使用者的进程。
[root@longmax2002 yuncang]# ps aux
USER PID %CPU %MEM VSZ RSS TTY STAT START TIME COMMAND
root 1 0.0 0.0 51736 2712 ? Ss May10 5:03 /usr/lib/syste
root 2 0.0 0.0 0 0 ? S May10 0:00 [kthreadd]
root 3 0.0 0.0 0 0 ? S May10 0:13 [ksoftirqd/0]
root 5 0.0 0.0 0 0 ? S< May10 0:00 [kworker/0:0H]
root 7 0.0 0.0 0 0 ? S May10 0:05 [migration/0]
root 8 0.0 0.0 0 0 ? S May10 0:00 [rcu_bh]
root 9 0.0 0.0 0 0 ? S May10 39:39 [rcu_sched]
root 10 0.0 0.0 0 0 ? S< May10 0:00 [lru-add-drain
root 11 0.0 0.0 0 0 ? S May10 0:30 [watchdog/0]
root 12 0.0 0.0 0 0 ? S May10 0:20 [watchdog/1]
root 13 0.0 0.0 0 0 ? S May10 0:06 [migration/1]
root 14 0.0 0.0 0 0 ? S May10 0:20 [ksoftirqd/1]
root 16 0.0 0.0 0 0 ? S< May10 0:00 [kworker/1:0H]
root 18 0.0 0.0 0 0 ? S May10 0:00 [kdevtmpfs]
root 19 0.0 0.0 0 0 ? S< May10 0:00 [netns]
root 20 0.0 0.0 0 0 ? S May10 0:07 [khungtaskd]
root 21 0.0 0.0 0 0 ? S< May10 0:00 [writeback]
root 22 0.0 0.0 0 0 ? S< May10 0:00 [kintegrityd]
root 23 0.0 0.0 0 0 ? S< May10 0:00 [bioset]
root 24 0.0 0.0 0 0 ? S< May10 0:00 [bioset]
root 25 0.0 0.0 0 0 ? S< May10 0:00 [bioset]
root 26 0.0 0.0 0 0 ? S< May10 0:00 [kblockd]
root 27 0.0 0.0 0 0 ? S< May10 0:00 [md]
root 28 0.0 0.0 0 0 ? S< May10 0:00 [edac-poller]
root 35 0.0 0.0 0 0 ? S May10 58:07 [kswapd0]
查找指定进程:
ps -ef | grep 进程关键字
显示指定用户进程信息:
ps -u root
根据端口获取进程pid:
port=30999 #根据端口号查找对应的pid pid=$(netstat -nlp | grep :$port | awk '{print $7}' | awk -F"/" '{ print $1 }');
3.3.2 top
Linux top命令用于实时显示 process 的动态。
显示进程信息:
top - 14:26:38 up 141 days, 17:15, 1 user, load average: 0.00, 0.10, 0.27
Tasks: 86 total, 1 running, 85 sleeping, 0 stopped, 0 zombie
%Cpu(s): 0.2 us, 0.3 sy, 0.0 ni, 99.3 id, 0.2 wa, 0.0 hi, 0.0 si, 0.0 st
KiB Mem : 3880924 total, 682528 free, 1590964 used, 1607432 buff/cache
KiB Swap: 0 total, 0 free, 0 used. 2034188 avail Mem
PID USER PR NI VIRT RES SHR S %CPU %MEM TIME+ COMMAND
3441 mysql 20 0 1951624 639476 5048 S 0.3 16.5 518:43.85 mysqld
7515 root 10 -10 141776 18480 4532 S 0.3 0.5 65:36.51 AliYunDun
9827 root 10 -10 41932 1920 420 S 0.3 0.0 7:15.38 AliYunDunUpdate
29249 root 20 0 145308 1500 248 S 0.3 0.0 82:52.92 redis-server
1 root 20 0 51736 2712 1376 S 0.0 0.1 5:03.56 systemd
2 root 20 0 0 0 0 S 0.0 0.0 0:00.08 kthreadd
3 root 20 0 0 0 0 S 0.0 0.0 0:13.22 ksoftirqd/0
5 root 0 -20 0 0 0 S 0.0 0.0 0:00.00 kworker/0:0H
7 root rt 0 0 0 0 S 0.0 0.0 0:05.41 migration/0
8 root 20 0 0 0 0 S 0.0 0.0 0:00.00 rcu_bh
9 root 20 0 0 0 0 S 0.0 0.0 39:39.82 rcu_sched
10 root 0 -20 0 0 0 S 0.0 0.0 0:00.00 lru-add-drain
11 root rt 0 0 0 0 S 0.0 0.0 0:30.64 watchdog/0
12 root rt 0 0 0 0 S 0.0 0.0 0:20.67 watchdog/1
13 root rt 0 0 0 0 S 0.0 0.0 0:06.88 migration/1
14 root 20 0 0 0 0 S 0.0 0.0 0:20.14 ksoftirqd/1
显示完整命令:
top -c
3.3.3 kill
kill [-9] 进程代号:终止指定代号的进程, -9 表示强行终止。
使用 kill 命令时,最好只终止由当前用户开启的进程,而不要终止 root 身份开启的进程,否则可能导致系统经常要查看进程的信息,包括进程的是否已经消亡。
3.3.4 pgrep
通过pgrep来获得正在被调度的进程的相关信息。pgrep通过匹配其程序名,找到匹配的进程
选项 | 描述 |
---|---|
-o | 仅显示找到的最小(起始)进程号; |
-n | 仅显示找到的最大(结束)进程号; |
-l | 显示进程名称; |
-P | 指定父进程号; |
-g | 指定进程组; |
-t | 指定开启进程的终端; |
-f | 进程全名 |
-u | 指定进程的有效用户ID。 |
查看指定名称的进程信息:
[root@VM-0-17-centos server]# pgrep ngsp-cmc 8564
-n 当匹配多个进程时,显示进程号最大的那个:
[root@VM-0-17-centos server]# pgrep -n ngsp-cmc 8564
3.4 磁盘信息(df、du)
3.4.1 df
Linux df(英文全拼:disk free) 命令用于显示目前在 Linux 系统上的文件系统磁盘使用情况统计。
df [选项]... [FILE]...
参数 | 含义 |
---|---|
-a | 包含所有的具有 0 Blocks 的文件系统 |
--block-size={SIZE} | 使用 {SIZE} 大小的 Blocks |
-i | Inodes 列出 inode 资讯,不列出已使用 block |
-h | 使用人类可读的格式 |
显示文件系统的磁盘使用情况统计:
[root@longmax2002 zy]# df
Filesystem 1K-blocks Used Available Use% Mounted on
/dev/vda1 61794300 53811240 4821056 92% /
devtmpfs 1929864 0 1929864 0% /dev
tmpfs 1940460 0 1940460 0% /dev/shm
tmpfs 1940460 676 1939784 1% /run
tmpfs 1940460 0 1940460 0% /sys/fs/cgroup
tmpfs 388096 0 388096 0% /run/user/0
第一列指定文件系统的名称,第二列指定一个特定的文件系统1K-块1K是1024字节为单位的总内存。用和可用列正在使用中,分别指定的内存量。
使用列指定使用的内存的百分比,而最后一栏"安装在"指定的文件系统的挂载点。
用一个-i选项的df命令的输出显示inode信息而非块使用量。
Filesystem Inodes IUsed IFree IUse% Mounted on
/dev/vda1 3932160 83009 3849151 3% /
devtmpfs 482466 332 482134 1% /dev
tmpfs 485115 2 485113 1% /dev/shm
tmpfs 485115 480 484635 1% /run
tmpfs 485115 16 485099 1% /sys/fs/cgroup
tmpfs 485115 1 485114 1% /run/user/0
-h选项,通过它可以产生可读的格式df命令的输出:
Filesystem Size Used Avail Use% Mounted on
/dev/vda1 59G 52G 4.6G 92% /
devtmpfs 1.9G 0 1.9G 0% /dev
tmpfs 1.9G 0 1.9G 0% /dev/shm
tmpfs 1.9G 676K 1.9G 1% /run
tmpfs 1.9G 0 1.9G 0% /sys/fs/cgroup
tmpfs 379M 0 379M 0% /run/user/0
3.4.2 du
Linux du (英文全拼:disk usage)命令用于显示目录或文件的大小。du 会显示指定的目录或文件所占用的磁盘空间。
显示目录或者文件所占空间:
[root@bogon194 shell]# du
4 ./test
32 .
只显示当前目录下面的子目录的目录大小和当前目录的总的大小,最下面的32为当前目录的总大小
显示指定文件所占空间:
du log2012.log
方便阅读的格式显示test目录所占空间情况:
[root@bogon194 shell]# du -h
4.0K ./test
32K .
3.5 查看网卡信息
ifconfig:查看/配置计算机当前的网卡配置信息
[root@longmax2002 yuncang]# ifconfig
docker0: flags=4099<UP,BROADCAST,MULTICAST> mtu 1500
inet xxx.xx.0.1 netmask 255.255.0.0 broadcast 0.0.0.0
ether 02:42:e7:7c:76:74 txqueuelen 0 (Ethernet)
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
eth0: flags=4163<UP,BROADCAST,RUNNING,MULTICAST> mtu 1500
inet xxx.xx.xxx.47 netmask 255.255.240.0 broadcast xxx.xx.xxx.255
ether 00:16:3e:08:09:35 txqueuelen 1000 (Ethernet)
RX packets 32758819 bytes 10010046741 (9.3 GiB)
RX errors 0 dropped 0 overruns 0 frame 0
TX packets 27094266 bytes 8748881502 (8.1 GiB)
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
loop txqueuelen 1000 (Local Loopback)
RX packets 260063355 bytes 71415552425 (66.5 GiB)
RX errors 0 dropped 0 overruns 0 frame 0
TX packets 260063355 bytes 71415552425 (66.5 GiB)
TX errors 0 dropped 0 overruns 0 carrier 0 collisions 0
提示:一台计算机中有可能会有一个物理网卡和多个虚拟网卡,在 Linux 中物理网卡的名字通常以 ensX、ethx表示
127.0.0.1 被称为本地回环/环回地址,一般用来测试本机网卡是否正常。
ping 一般用于检测当前计算机到目标计算机之间的网络 是否通畅,数值越大,速度越慢。
# 检测到目标主机是否连接正常
$ ping IP地址
# 检测本地网卡工作正常
$ ping 127.0.0.1
3.6 netstat
Netstat 命令用于显示各种网络相关信息,如网络连接,路由表,接口状态 (Interface Statistics),masquerade 连接,多播成员 (Multicast Memberships) 等等。
常见参数:
- -a (all)显示所有选项,默认不显示LISTEN相关;
- -t (tcp)仅显示tcp相关选项;
- -u (udp)仅显示udp相关选项;
- -n 拒绝显示别名,能显示数字的全部转化成数字;
- -l 仅列出有在 Listen (监听) 的服务状态;
- -p 显示建立相关连接的程序名;
- -r 显示路由信息,路由表;
- -e 显示扩展信息,例如uid等;
- -s 按各个协议进行统计;
- -c 每隔一个固定时间,执行该netstat命令。
提示:LISTEN和LISTENING的状态只有用-a或者-l才能看到.。
列出所有端口 (包括监听和未监听的):
[root@bogon194 ~]# netstat -a | more
Active Internet connections (servers and established)
Proto Recv-Q Send-Q Local Address Foreign Address State
tcp 0 0 0.0.0.0:6379 0.0.0.0:* LISTEN
tcp 0 0 0.0.0.0:http 0.0.0.0:* LISTEN
tcp 0 0 0.0.0.0:ssh 0.0.0.0:* LISTEN
tcp 0 0 0.0.0.0:afs3-fileserver 0.0.0.0:* LISTEN
tcp 0 0 localhost:smtp 0.0.0.0:* LISTEN
tcp 0 0 bogon194:41320 10.64.200.219:29010 TIME_WAIT
tcp 0 0 bogon194:42544 10.64.200.219:29010 TIME_WAIT
tcp 0 0 bogon194:60106 10.64.200.219:29010 TIME_WAIT
列出所有 tcp 端口 netstat -at:
[root@bogon194 ~]# netstat -at | more
Active Internet connections (servers and established)
Proto Recv-Q Send-Q Local Address Foreign Address State
tcp 0 0 0.0.0.0:6379 0.0.0.0:* LISTEN
tcp 0 0 0.0.0.0:http 0.0.0.0:* LISTEN
tcp 0 0 0.0.0.0:ssh 0.0.0.0:* LISTEN
tcp 0 0 0.0.0.0:afs3-fileserver 0.0.0.0:* LISTEN
tcp 0 0 localhost:smtp 0.0.0.0:* LISTEN
tcp 0 0 bogon194:41320 10.64.200.219:29010 TIME_WAIT
tcp 0 0 bogon194:42544 10.64.200.219:29010 TIME_WAIT
tcp 0 0 bogon194:57808 10.64.200.219:29010 TIME_WAIT
列出所有 udp 端口 netstat -au:
[root@bogon194 ~]# netstat -au | more
列出所有监听 tcp 端口:
[root@bogon194 ~]# netstat -lt | more
Active Internet connections (only servers)
Proto Recv-Q Send-Q Local Address Foreign Address State
tcp 0 0 0.0.0.0:6379 0.0.0.0:* LISTEN
tcp 0 0 0.0.0.0:http 0.0.0.0:* LISTEN
tcp 0 0 0.0.0.0:ssh 0.0.0.0:* LISTEN
tcp 0 0 0.0.0.0:afs3-fileserver 0.0.0.0:* LISTEN
tcp 0 0 localhost:smtp 0.0.0.0:* LISTEN
tcp6 0 0 [::]:6379 [::]:* LISTEN
tcp6 0 0 [::]:6540 [::]:* LISTEN
四、用户权限相关命令
4.1 组管理
普通用戶创建组 / 删除组 的终端命令都需要通过 sudo 执行:
命令 | 作用 |
---|---|
groupadd 组名 | 添加组 |
groupdel 组名 | 删除组 |
cat /etc/group | 确认组信息 |
chgrp -R 组名 文件/目录名 | 递归修改文件/目录的所属组 |
组信息保存在 /etc/group 文件中,/etc 目录是专门用来保存 系统配置信息 的目录。
4.2 用户管理
普通用户创建用户 / 删除用户 / 修改其他用户密码 的终端命令都需要通过 sudo 执行。
命令 | 作用 |
---|---|
useradd -m -g 组名 新建用户名 |
添加新用户 -m 自动建立用户home路径 -g 指定用户所在的组,否则会新建一个同名的组 |
passwd 用户名 |
设置用户密码 如果是普通用户,直接用passwd可以修改自己的账号密码 |
userdel -r 用户名 |
删除用户 -r 自动删除用户home路径 |
cat /etc/passwd | grep 用户名 |
确认用户信息 新建用户后,用户信息会保存在/etc/passwd文件中 |
4.3 查看用户信息
id [用户名]:查看用户 UID 和 GID 信息。
[root@longmax2002 yuncang]# id root
uid=0(root) gid=0(root) groups=0(root)
who:查看当前所有登录的用户列表;
[root@longmax2002 yuncang]# who
root pts/1 2021-09-29 13:12 (xxx.xxx.xxxx.xx)
whoami:查看当前登录用户的账户名。
[root@longmax2002 yuncang]# whoami
root
4.4 which
which 命令可以查看执行命令所在位置,例如:
which ls
# 输出
# /bin/ls
which useradd
# 输出
# /usr/sbin/useradd
4.5 切换用户
su -用户名:切换用户,并且切换目录;
exit: 退出当前登录用户。
4.6 修改文件权限
chown:修改拥有者;
chgrp:修改组;
chmod:修改权限。
# 修改文件|目录的拥有者
chown 用户名 文件名|目录名
# 递归修改文件|目录的组
chgrp -R 组名 文件名|目录名
# 递归修改文件权限
chmod -R 755 文件名|目录名
五、远程管理相关命令
5.1 关机/重启
shutdown:关机/重新启动。
# 重新启动操作系统,其中 now 表示现在
$ shutdown -r now
# 立刻关机,其中 now 表示现在
$ shutdown now
# 系统在今天的 20:25 会关机
$ shutdown 20:25
# 系统再过十分钟后自动关机
$ shutdown +10
# 取消之前指定的关机计划
$ shutdown -c
5.2 ssh命令
在 Linux 中 SSH 是 非常常用 的工具,通过 SSH 客户端 我们可以连接到运行了SSH服务器 的远程机器上。
ssh的简单使用:
ssh [-p port] user@remote
- user 是在远程机器上的用户名,如果不指定的话默认为当前用户;
- remote 是远程机器的地址,可以是 IP/域名,或者是 后面会提到的别名;
- port 是 SSH Server 监听的端口,如果不指定,就为默认值 22;
5.3 scp命令
scp 就是 secure copy ,是一个在 Linux 下用来进行 远程拷贝文件 的命令,需要注意的是,在指定端口时用的是大写的 -P 而不是小写的。
# 把本地当前目录下的 01.py 文件 复制到远程目录下的 Desktop/01.py
# 注意:`:` 后面的路径如果不是绝对路径,则以用户的Home目录作为参照路径
scp -P port 01.py user@remote:Desktop/01.py
# 把远程目录下的Desktop/01.py 文件 复制到本地当前目录下的 01.py
scp -P port user@remote:Desktop/01.py 01.py
# 加上 -r 选项可以传送文件夹
# 把当前目录下的demo文件夹 复制到远程目录Desktop
scp -r demo user@remote:Desktop
# 把远程目录Desktop下的文件复制到当前目录下的demo文件夹
scp -r user@remote:Desktop demo
选 项 | 含义 |
---|---|
-r | 若给出的源文件是目录文件,则 scp 将递归复制该目录下的所有子目录和文件,目标文件必须为一个目录名 |
-P | 若远程 SSH 服务器的端口不是 22,需要使用大写字母 -P 选项指定端口 |
六、简单案例
6.1 通过端口停止一个spring boot web进程
#!/bin/bash
port=30999
#根据端口号查找对应的pid
pid=$(netstat -nlp | grep :$port | awk '{print $7}' | awk -F"/" '{ print $1 }');
#杀掉对应的进程(如果pid长度不为0)
if [ -n "$pid" ]; then
echo $pid;
kill -9 $pid;
fi
首先利用netstat -nlp,列出所有监听端口,然后通过grep :\$port过滤满足的行数据。利用awk '{print \$7}'输出文本第7项:
最后利用awk -F,对字符串按照'/'拆分,并获取得到pid。
6.2 start/stop/restart服务脚本
#!/bin/bash # 获取工作路径 WORKSPACE=`cd "$(dirname "$0")"/ || exist; pwd` #等价$(...) cd $WORKSPACE # 创建临时目录 mkdir -p var # 软件信息 app=app pid_file=var/app.pid log_file=var/app.log # 从pid文件获取进程pid function check_pid() { if [ -f $pid_file ];then pid=`cat $pid_file` if [[ -n $pid ]]; then return `pgrep -f $app | grep -cv "PID TTY"` fi fi return 0 } # 启动服务 function start() { check_pid # 获取进程pid pid=$? if [ $pid -gt 0 ];then echo -n "$app now is running already, pid=" echo $pid_file return 1 fi # 启动进程命令 nohup ./$app web &> $log_file & sleep 1 pid=`pgrep -f $app | grep -cv "PID TTY"` if [ $pid -gt 0 ];then echo $! > $pid_file echo "$app started..., pid=$!" else echo "$app failed to start." return 1 fi } # 停止服务 function stop() { pgrep -f $app | xargs kill -9 rm -f $pid_file echo "$app stopped..." } # 重启服务 function restart() { stop sleep 1 start } # 获取进程状态 function status() { check_pid pid=$? if [ $pid -gt 0 ];then echo started else echo stoped fi } # 帮助 function help() { echo "$0 start|stop|restart|status" } if [ "$1" == "" ]; then help elif [ "$1" == "stop" ];then stop elif [ "$1" == "start" ];then start elif [ "$1" == "restart" ];then restart elif [ "$1" == "status" ];then status else help fi
6.3 nginx安装
#!/bin/bash #installpath应用安装目录 installpath=/data function printPercent() { x=`expr $2 \* 100` p=`expr $x / $1` echo "percent:$p%" sleep 1 } #判断是否有nginx在运行 pids=`ps -ef | grep nginx | grep -v grep | grep -v ${installpath}| awk '{print $2}'` #正在运行 获取安装路径和配置文件路径 if [[ ${pids} ]];then echo "nginx已经安装,并且正在运行" # 获取安装路径和配置文件路径 for i in ${pids}; do echo $i # 获取nginx安装路径 path=`ls -l /proc/${i}/exe | awk '{print $11}'` if [[ -z $path ]];then echo "无法获取nginx安装路径" exit 1 else nginxPath=$path echo "获取nginx可执行文件路径 $nginxPath" nginxConfig=`${nginxPath} -t 2>&1 | grep configuration` if [[ ! -z $nginxConfig ]];then nginxtmp="${nginxConfig%%test*}" nginxConfigPath="${nginxtmp##*file}" echo "获取nginx配置文件 $nginxConfigPath" fi fi break done exit 1 fi # ------------------------------------------- 安装nginx -------------------------------------------i #成功完成步骤数 all=5 cd ${installpath}/components echo "-----------------------------------pcre开始安装-----------------------------------------" tar -zxvf pcre-8.45.tar.gz cd pcre-8.45 ./configure --prefix=${installpath}/pcre make make install # 分开 不分开可能异常 if [[ $? != 0 ]] ; then echo "pcre安装失败" exit 1 else echo "pcre安装成功" fi printPercent $all 1 cd .. echo "-----------------------------------openssl开始安装-----------------------------------------" tar -zxvf openssl-fips-2.0.16.tar.gz cd openssl-fips-2.0.16 ./config --prefix=${installpath}/openssl make make install # 麒麟系统可能安装失败 if [[ $? != 0 ]] ; then echo "openssl安装失败(可忽略)" # 麒麟3.3会安装失败 忽略失败。没有影响 else echo "openssl安装成功" fi printPercent $all 2 cd .. echo "-----------------------------------zlib开始安装-----------------------------------------" tar -zxvf zlib-1.2.11.tar.gz cd zlib-1.2.11 ./configure --prefix=${installpath}/zlib make make install if [[ $? != 0 ]] ; then echo "zlib安装失败" exit 1 else echo "zlib安装成功" fi printPercent $all 3 cd .. echo "-----------------------------------nginx开始安装-----------------------------------------" tar -zxvf nginx-1.12.0.tar.gz cd nginx-1.12.0 ./configure --prefix=${installpath}/nginx --with-http_ssl_module make make install if [[ $? != 0 ]] ; then echo "nginx安装失败" exit 1 else echo "nginx安装成功" fi printPercent $all 4 # 记录本次安装路径 echo "Record the installation info." echo "记录本次安装信息" printPercent $all 5 exit 0
将当前install.sh脚本和components文件拷贝到/data路径下,components包下载路径如下:https://files.cnblogs.com/files/zyly/nginx-components.rar?t=1656983137。然后运行安装脚本即可安装nginx。
6.4 mysql安装
#!/bin/bash # 参考 https://blog.csdn.net/atongmu2017/article/details/90610444 # mysql安装包路径 mysql_tar=/data/mysql-8.0.13-linux-glibc2.12-x86_64.tar.xz install_path=/data mysql_pwd=test123!@# if [[ ! -f ${mysql_tar} ]];then echo 'mysql安装包不存在' exit 0 fi if [[ -d ${install_path}/mysql ]];then echo 'mysql已经安装..................' exit 0 fi #解压 echo '开始解压mysql安装包................' tar -xvf ${mysql_tar} mv mysql-8.0.13-linux-glibc2.12-x86_64 mysql mv mysql ${install_path} # 创建用户和用户组 echo '开始创建用户和用户组..................' cd ${install_path} groupadd mysql useradd -r -g mysql mysql cd mysql chown -R mysql:mysql ./ passwd mysql ${mysql_pwd} #初始化数据库,并会自动生成随机密码,记下等下登陆要用 echo '开始初始化数据库...................' mkdir data password=`bin/mysqld --initialize --user=mysql --basedir=./ --datadir=./data 2>&1 | grep 'root@localhost:' | awk '{print $13}' ` if [[ $? != 0 ]] ; then echo 'mysql安装失败' else echo 密码是${password} fi #修改/usr/local/mysql当前目录得用户 chown -R root:root ./ chown -R mysql:mysql data #开始配置/etc/my.cnf mysql_cnf=/etc/my.cnf if [[ -f ${mysql_cnf} ]];then echo ${mysql_cnf}文件已经存在 mv ${mysql_cnf} ${mysql_cnf}.bak fi echo 开始创建${mysql_cnf}...... touch ${mysql_cnf} echo "[mysqld]" > ${mysql_cnf} echo "basedir = ${install_path}/mysql" >> ${mysql_cnf} echo "datadir = ${install_path}/mysql/data" >> ${mysql_cnf} echo "socket = /tmp/mysql.sock" >> ${mysql_cnf} echo "log-error = ${install_path}/mysql/data/error.log" >> ${mysql_cnf} echo "pid-file = ${install_path}/mysql/data/mysql.pid" >> ${mysql_cnf} echo "tmpdir = /tmp" >> ${mysql_cnf} echo "port = 3306" >> ${mysql_cnf} echo "max_allowed_packet=32M" >> ${mysql_cnf} echo "default-authentication-plugin = mysql_native_password" >> ${mysql_cnf} echo "log_bin_trust_function_creators = ON" >> ${mysql_cnf} echo "sql_mode=NO_ENGINE_SUBSTITUTION,STRICT_TRANS_TABLES" >> ${mysql_cnf} #开始自启动 echo '设置mysql开机自启动........' cd support-files cp mysql.server /etc/init.d/mysql chmod +x /etc/init.d/mysql if [[ -f ${install_path}/mysql/lib ]];then echo ${install_path}/mysql/lib文件已经存在 else echo "${install_path}/mysql/lib" >> /etc/ld.so.conf fi #配置环境变量 echo "export PATH="'$PATH'":${install_path}/mysql/bin:${install_path}/mysql/lib" >> /etc/profile source /etc/profile #启动服务 echo `service mysql start` #连接数据库 mysql -u root -p ${password} alter user 'root'@'localhost' identified by "${mysql_pwd}"; #开启navcat远程连接 use mysql; select host, user, authentication_string, plugin from user; update user set host='%' where user='root'; flush privileges; ALTER USER 'root'@'%' IDENTIFIED WITH mysql_native_password BY "${mysql_pwd}"; FLUSH PRIVILEGES; exit;
将当前install.sh脚本和mysql-8.0.13-linux-glibc2.12-x86_64.tar.xz文件拷贝到/data路径下,mysql-8.0.13-linux-glibc2.12-x86_64.tar.xz包下载路径如下:云盘下载链接:https://pan.baidu.com/s/1CwH3yKNoQ_dUX4Q2xrA5Aw ,提取码:jxbk。然后运行安装脚本即可安装nginx。