Linux 常用终端命令整理
linux
系统中提供了大量的命令,该文整理了一份使用较为频繁的命令,并且我们对命令进行了一个详细的分类。
一 、Linux
命令格式
1.1 Linux
终端命令格式
终端命令格式:
command [options] [parameter]
说明:
command
:命令名,相应功能的英文单词或单词的缩写;- [
options
] :选项,可用来对命令进行控制,也可以省略; parameter
:传给命令的参数,可以是 零个、一个 或者 多个;
在linux
命令行中,命令的参数有的时候是一个连字符,有的时候是两个连字符。
对于options
类型参数可以有两种方式:
- 短选项(
short options
):顾名思义,就是短小参数。它们通常包含一个连字号和一个字母(大写或小写字母),例如:-s
,-h
等。 - 长选项(
long options
):长选项,包含了两个连字号和一些大小写字母组成的单词,例如:--size
,--help
等。
注:
1. 一个程序通常会提供包括`short options`和`long options`两种参数形式的参数,`short options`一般是其对应的`long options`的开头字母。
2. `-`和`--`可以用来做区分`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 文件操作
2.1.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.1.2 创建目录(mkdir
)
mkdir
命令:创建一个新的目录。
选项 | 含义 |
---|---|
-p | 可以递归创建目录 |
新建目录的名称不能与当前目录中已有的目录或文件同名。
[root@longmax2002 zy]# mkdir test
mkdir: cannot create directory ‘test’: File exists
2.1.3 删除文件/目录(rm
)
rm
命令:删除文件或目录,使用rm
命令要小心,因为文件删除后不能恢复。
选项 | 含义 |
---|---|
-f | 强制删除,忽略不存在的文件,无需提示 |
-r | 递归地删除目录下的内容,删除文件夹时必须加此参数 |
rm -rf test
2.1.4 软/硬链接(ln
)
命令:
ln -s 被链接的源文件 链接文件
建立文件的软链接,用通俗的方式讲类似于Windows
下的快捷方式。
注意:
1. 没有`-s`选项建立的是一个硬链接文件两个文件占用相同大小的硬盘空间,工作中几乎不会建立文件的硬链接。
2. 源文件要使用绝对路径,不能使用相对路径,这样可以方便移动链接文件后,仍然能够正常使用。
在Linux
中,文件名和文件的数据是分开存储的:
提示:
- 在
Linux
中,只有文件的硬链接数== 0
才会被删除。 - 使用
ls -l
可以查看一个文件的硬链接的数量。 - 在日常工作中,几乎不会建立文件的硬链接。
2.1.5 查看文件(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.1.6 查看目录(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.1.7 切换目录(cd
)
cd
是英文单词change directory
的简写,其功能为更改当前的工作目录,也是用户最常用的命令之一。
命令 | 含义 |
---|---|
cd | 切换到当前用户的主目录(/home/用户目录) |
cd ~ | 切换到当前用户的主目录(/home/用户目录) |
cd . | 保持在当前目录不变 |
cd … | 切换到上级目录 |
cd - | 可以在最近两次工作目录之间来回切换 |
相对路径和绝对路径:
- 相对路径 在输入路径时,最前面不是 / 或者 ~,表示相对当前目录所在的目录位置;
- 绝对路径 在输入路径时,最前面是 / 或者 ~,表示从根目录/家目录开始的具体目录位置;
2.1.8 复制文件(cp
)
cp
命令的功能是将给出的文件或目录复制到另一个文件或目录 中,相当DOS
下的copy
命令。
选 项 | 含义 |
---|---|
-i | 覆盖文件前提示 |
-r | 若给出的源文件是目录文件,则 cp 将递归复制该目录下的所有子目录和文件,目标文件必 |
cp 源文件 目标文件(路径+可以重命名文件名)
2.1.9 移动文件(mv
)
mv
命令可以用来移动文件或目录,也可以给文件或目录重命名。
选项 | 含义 |
---|---|
-i | 覆盖文件前提示 |
mv 源文件 目标文件(路径+文件名)
mv 源文件 目标路径/
2.2 打包/解包(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.3 压缩/解压缩(gzip
)
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.4 查找/搜索
2.4.1 查找文件(find
)
find
命令功能非常强大,通常用来在特定的目录下,搜索符合条件的文件。
命令:
find [路径] -name “*.py”
查找指定路径下扩展名是.py
的文件,包括子目录。
- 如果省略路径,表示在当前文件夹下查找;
- 通配符,在使用
find
命令时同时可用;
2.4.2 文本搜索(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.4.3 文本分析(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.4.4 文本编辑(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} 大小的 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
端口:
[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 用户名 |
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 通过端口停止进程
#!/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/1HTwF8nVxrg1JCUt5MEOxbg?pwd=j9nr
提取码:j9nr
。然后运行安装脚本即可安装mysql
。
参考文章