Linux系统命令

简单命令

# 清空日志文件
truncate -s 0 /var/www/php/nextcloud/data/nextcloud.log  # truncate:将文件的大小缩小或扩展到指定的大小。-s:设置或调整文件大小为指定字节

查看系统图形化桌面环境

echo $XDG_CURRENT_DESKTOP   # 仅在图形化界面有效,远程命令行无效
# 通过进程查看。图形化界面、远程命令行均有效
ps -e | grep -E '(gnome-session|startkde|xfce4-session|lxqt-session|mate-session|cinnamon|unity|deepin)'
# 通过
screenfetch

查看系统信息

# LSB( _Linux 标准库(Linux Standard Base)_)能够打印发行版的具体信息,包括发行版名称、版本号、代号等。
lsb_release -a 

# release 文件通常被视为操作系统的标识。在 `/etc` 目录下放置了很多记录着发行版各种信息的文件,每个发行版都各自有一套这样记录着相关信息的文件。
cat /etc/*-release
cat /etc/lsb-release
cat /etc/os-release
cat /etc/centos-release

# 打印系统信息的工具,包括内核名称、版本号、系统详细信息以及所运行的操作系统
uname -a
uname -r

# 记录了 Linux 内核的版本、用于编译内核的 gcc 的版本、内核编译的时间,以及内核编译者的用户名
cat /proc/version

# 用于查看和更改系统的主机名及相关设置
hostnamectl

# 查看系统小版本是多少
cat /etc/debian_version

ls

-a :显示所有文件及目录 (. 开头的隐藏文件也会列出)

-l :除了文件名之外,还将文件的权限、所有者、文件大小等信息详细列出来。

-h :以容易理解的格式列出文件大小 (例如 1 K 234 M 2 G)

-S :根据文件大小排序

文件类型 说明
b 块设备,是一些提供系统存取数据的接口设备,例如硬盘。
c 字符设备,是一些串行端口的接口设备,例如键盘、鼠标、打印机、tty 终端。
d 目录,类似于 Windows 的文件夹。
l 链接文件,类似于 Windows 的快捷方式。
s 套接字文件(socket),用于进程之间的通信。
- 文件,分纯文本文件(ASCII)和二进制文件(binary)

uname

语法 1: uname 获取操作系统的类型

语法 2: uname -a all,表示获取全部的系统信息(类型、全部主机名、内核版本、发布时间、开源计划)

hostname

hostname 没有选项,显示主机名字

hostname –d 显示机器所属域名

hostname –f 显示完整的主机名和域名

hostname –i 显示当前机器的 ip 地址

ln

创建快捷方式。(这是小写的 L)

-s:创建软连接,不加创建硬链接

ln -s 要创建的文件/文件夹快捷方式的存放路径

例如:ln -s /www/admin/localhost_80/wwwroot/ /root/Desktop/

建议全部使用绝对路径,以免出错

head 和 tail

head 命令可用于查看文件的开头部分的内容,有一个常用的参数 -n 用于显示行数,默认为 10,即显示 10 行的内容

  • -q 隐藏文件名
  • -v 显示文件名
  • -c<数目> 显示的字节数
  • -n<行数> 显示的行数

tail 命令用于显示文件的结尾的内容。在默认情况下,taild 命令显示文件的后 10 行内容。

  • -n<行数> 显示的行数

wc

用于计算文件的行数、字数和字节数

  • -l , --lines:显示行数
  • -w , --words:显示字数
  • -m , --chars:显示字符数
  • -c , --bytes:显示字节数
  • -L , --max-line-length:显示最长行的长度

例子:

root@debian11:~
 ># wc /etc/passwd                # 输出包含四项,分别代表:行数、字数、字节数、文件
  26   39 1410 /etc/passwd 
root@debian11:~
 ># wc /etc/passwd /etc/shadow    # 计算多个文件,每个文件输出一行,最后一行代表每一项的总量
  26   39 1410 /etc/passwd
  26   26  829 /etc/shadow
  52   65 2239 total
root@debian11:~
 ># wc -l /etc/passwd        # 行数和文件
26 /etc/passwd
root@debian11:~
 ># wc -w /etc/passwd       # 统计单词数时,是以一个或多个空格、制表符、换行符作为分隔符的,也就是说,只要连续的字符之间出现空格、制表符、换行符中任一个字符,都当做两个单词计数   
39 /etc/passwd
root@debian11:~
 ># wc -m /etc/passwd   # 输出包含两项,分别是字符数和文件
1410 /etc/passwd
root@debian11:~
 ># wc -c /etc/passwd   # 输出包含两项,分别是字节数和文件,这里一个字节存储一个字符,故计算出的字节数等于字符数,注意:一个汉字通常使用两个字节存储。
1410 /etc/passwd
root@debian11:~
 ># wc -L /etc/passwd
89 /etc/passwd
root@debian11:

find

1、按照文件名搜索

find 搜索路径 [选项] 搜索内容

选项:

-name: 按照文件名搜索

-iname: 按照文件名搜索,不区分文件名大小写

-inum: 按照 inode 号搜索

2、按照文件类型搜索

find 搜索路径 [选项] 搜索内容

选项:

-type d:查找目录

-type f:查找普通文件

-type l:查找软链接文件

例如:find /etc -type d

3、逻辑运算符

find 搜索路径 [选项] 搜索内容

选项:

-a:and 逻辑与

-o:or 逻辑或

-not:not 逻辑非

grep

参考: https://www.runoob.com/linux/linux-comm-grep.html

-v 或 --invert-match : 显示不包含匹配文本的所有行

-V 或 --version : 显示版本信息。

-A:除了显示符合样式的那一行之外,并显示该行之后的内容。

-B:除了显示符合样式的那一行之外,并显示该行之前的内容。

-c:计算符合样式的列数。

-w:全匹配

uniq

检查及删除文本文件中重复出现的行列,一般与 sort 命令结合使用

注意:当重复的行并不相邻时,uniq 命令是不起作用的,可以先使用 sort 命令进行排序

常用参数

  • -c 或--count:在每列旁边显示该行重复出现的次数。
  • -d 或--repeated:仅显示重复出现的行列。
root@debian11:~
 ># cat testfile
test 30
test 30
test 30
Hello 95
Hello 95
Hello 95
Hello 95
Linux 85
Linux 85
root@debian11:~
 ># uniq testfile
test 30
Hello 95
Linux 85
root@debian11:~
 ># uniq -c testfile
      3 test 30
      4 Hello 95
      2 Linux 85
root@debian11:~
 ># uniq -d testfile
test 30
Hello 95
Linux 85

lscpu

参考: https://blog.csdn.net/weixin_45910027/article/details/130526456

登录命令

1、ssh 远程登录

不指定用户

ssh 192.168.0.109

指定登录用户

ssh -l root 192.168.0.109
ssh root@192.168.0.109

指定端口登录:(12345:修改后的端口号)

ssh -p 12345 192.18.0.109
ssh -l root -p 12345 192.168.0.109
ssh -p 12345 root@192.168.0.109

2、mysql 数据库登录

-h:数据库主机 -u:用户 -p:密码 -P:端口号(大写 P)

mysql -h 127.0.0.1 -P 3306 -u root -p

注意,-p 后面不要加密码,会把密码当成数据库的库名

quit 或者 exit 退出 mysql

问题:

ERROR 2026 (HY000): TLS/SSL error: SSL is required, but the server does not support it

连接时添加参数 --ssl-mode=DISABLED

  • DISABLED 与参数 skip-ssl 一样,不使用 SSL/TLS 建立加密连接
  • PREFERRED 优先尝试使用 SSL/TLS 建立加密连接,如果无法建立则尝试建立非 SSL/TLS 连接
  • REQUIRED 只会尝试使用 SSL/TLS 建立加密连接
  • VERIFY_CA 与 REQUIRED 行为一样,与此同时会验证 server 端的证书是否有效
  • VERIFY_IDENTITY 与 VERIFY_CA 行为一样,与此同时验证 server 端证书的 host 是否与实际连接的 hostname 一致

3、ftp 登录

ftp user@192.168.0.211
# 匿名登录用户名 anonymous
ftp anonymous@192.168.0.211

常用 ftp 命令

dir:显示服务器目录和文件列表。可以使用通配符“_”和“?”,比如,显示当前目录中所有扩展名为jpg的文件,可使用命令 dir _.jpg。
ls:显示服务器简易的文件列表
cd:进入服务器指定的目录。cd命令中必须带目录名。比如 cd main 表示进入当前目录下的main子目录
pwd:查看FTP服务器上的当前工作目录
rename filename newfilename:重命名FTP服务器上的文件
deletefilename:删除FTP服务器上的文件
help[cmd]:显示FTP命令的帮助信息,cmd是命令名,如果不带参数,则显示所有FTP命令
close:结束与服务器的FTP会话  
quit:结束与服务器的FTP会话并退出FTP环境

# 下载文件
type:查看当前的传输方式  
ascii:设定传输方式为ASCII码方式  
binary:设定传输方式为二进制方式
get:下载指定文件 get filename [newname](filename为下载的FTP服务器上的文件名,newname为保存在本都计算机上时使用的名字,如果不指定newname,文件将以原名保存。
mget:下载多个文件mget filename [filename ....](mget命令支持通配符“”和“?”,比如:mget .mp3 表示下载FTP服务器当前目录下的所有扩展名为mp3的文件。)

# 上传文件
put:上传指定文件 put filename [newname]
send:上传指定文件 send filename [newname] 
# filename为上传的本地文件名,newname为上传至FTP服务器上时使用的名字,如果不指定newname,文件将以原名上传。
# 上传文件前,应该根据文件的类型设置传输方式,本机的工作目录也应该设置为上传文件所在的目录。
# 这里的send和put方法用法都基本相同,但是上传速度send却要比put快很多,有兴趣的人可以去研究下。

systemctl 命令

service命令:

service apache2 stop

systemctl命令:

确定是否可以使用systemctl命令

# 查看版本
systemctl --version
# 查看第一个
ps -p 1

简单使用

管理服务 命令
查看服务状态 systemctl status apache 2
启动服务 systemctl start apache 2
停止服务 systemctl stop apache 2
重启服务 systemctl restart apache 2
重新加载配置文件(不终止服务) systemctl reload apache 2
开机自启动 systemctl enable apache 2
禁止开机自启动 systemctl disable apache 2

要查看系统中所有的服务状态:systemctl list-units --type=service(启动(active)、已停止(inactive)、已禁用(disabled))

各种下载命令

Linux 的发行版本可以大体分为两类,一类是商业公司维护的发行版本 RedHat 系列,另一类是社区组织维护的发行版本 Debian 系列.

RedHat 系列:RHEL 和 CentOS

Debian 系列:Debian 和 Ubuntu

RedHat 系列

常见的安装包格式 rpm 包, 安装 rpm 包的命令是“rpm -参数”

包管理工具 yum

支持 tar 包

Debian 系列

常见的安装包格式 deb 包, 安装 deb 包的命令是“dpkg -参数”

包管理工具 apt-get

支持 tar 包

yum

yum 可以用于运作 rpm 包,例如在 Fedora 系统上对某个软件的管理:

1. 列出所有可更新的软件清单命令:yum check-update 
2. 更新所有软件命令:yum update 
3. 仅安装指定的软件命令:yum install <package_name> 
4. 仅更新指定的软件命令:yum update <package_name> 
5. 列出所有可安裝的软件清单命令:yum list 
6. 删除软件包命令:yum remove <package_name> 
7. 查找软件包命令:yum search <keyword>

apt-get 和 apt

命令一般需要root 权限执行,所以一般跟着 sudo 命令。

apt-get 可以用于运作 deb 包,apt 可以看作 apt-get 和 apt-cache 命令的子集, 可以为包管理提供必要的命令选项。apt-get 虽然没被弃用,但作为普通用户,还是应该首先使用 apt

apt update  # 列出所有可更新的软件清单命令,只检查,不更新
apt upgrade  # 升级软件包
apt list --upgradeable  # 列出可更新的软件包及版本信息
apt full-upgrade  # 升级软件包,删除旧包
apt update <package_name>  # 更新指定的软件命令
apt install --only-upgrade package_name  # 同上
apt clean  # 清除缓存
apt autoclean  # 与 clean 不同的是,autoclean 只删除那些无法从仓库中下载的包



安装指定的软件命令:sudo apt install <package_name> 
安装多个软件包:sudo apt install <package_1> <package_2> <package_3> 
显示软件包具体信息,例如:版本号,安装大小,依赖关系等等:sudo apt show <package_name> 
删除软件包命令:sudo apt remove <package_name> 
清理不再使用的依赖和库文件: sudo apt autoremove 
移除软件包及配置文件: sudo apt purge <package_name> 
查找软件包命令:sudo apt search <keyword> 
列出所有已安装的包:apt list --installed 
列出所有已安装的包的版本信息:apt list --all-versions

apt 和 apt-get 二者区别: https://blog.csdn.net/liudsl/article/details/79200134

apt update、upgrade、dist-upgrade、full-upgrade 的区别

实例: https://www.runoob.com/linux/linux-comm-apt.html

常用参数:

-s :不实际安装。模拟执行命令

-y :假定对所有的询问选 yes,不提示

查看已经安装的软件

apt list --installed

apt search -n nmap apt search --names-only nmap apt-cache madison package name :列出所有来源的版本 apt-cache policy package name :列出所有来源的版本。信息会比上面详细一点

dpkg

# 查询
dpkg -l  # 查看已安装软件包
dpkg -l vim  # 查询vim包信息
dpkg -l | grep name  # 查找完整软件包名
dpkg -L name  # 查看软件安装到什么地方
dpkg -s name  # 查看已安装的包的详细信息

# 安装
dpkg -i file.deb  # 安装软件 -i,--install 
dpkg -i --instdir=/to/your/customer/path ***.deb  # 安装在指定路径,默认在 /opt/目录下
dpkg -i --force-depends ***.deb  # 强制安装,忽略依赖

# 删除
dpkg -r name  # 卸载软件包,但是它的配置文件还存在
dpkg -P name  # # 卸载软件包,同时删除其配置文件

安装时报依赖错误,运行命令解决:apt -f install

wget

wget 不是安装方式,它是一种下载工具,类似于迅雷。

通过 HTTP、HTTPS、FTP 三个最常见的 TCP/IP 协议下载,并可以使用 HTTP 代理,名字是 World Wide Web”与“get”的结合。如果要下载一个软件, 可以直接运行:

wget 参数:

  • -O 文件名:将下载的文件保存为指定的文件名。
  • -P 目录:将下载的文件保存到指定的目录。

-O:将下载的文件存放到指定的文件夹下,同时重命名下载的文件

wget -O 1.tar.gz https://github.com/shack2/SNETCracker/archive/refs/tags/1.0.20190715.tar.gz

下载时提供用户名和密码

wget --user admin --password admin123 --no-check-certificate https://x.x.x.x/images/image-20221021192532311.png
# --no-check-certificate:不检查SSL证书的有效性

curl 命令

参考: https://www.ruanyifeng.com/blog/2019/09/curl-reference.html

-O:参数将服务器回应保存成文件,并将 URL 的最后部分当作文件名。

-o:参数将服务器的回应保存成文件,等同于 wget 命令

# 将 www.example.com保存成example.html 。
curl -o example.html https://www.example.com 

# 将服务器回应保存成文件,文件名为 bar.html。
curl -O https://www.example.com/foo/bar.html

-L:参数会让 HTTP 请求跟随服务器的重定向。curl 默认不跟随重定向

-v:输出通信的整个过程,用于调试

-s:参数将不输出错误和进度信息。命令一旦发生错误,不会显示错误信息。不发生错误的话,会正常显示运行结果。

打包/压缩命令

打包跟压缩的区别:

打包是指将多个文件或者目录放在一起,形成一个总的包,这样便于保存和传输,但是大小是没有变化的,压缩是指将一个或者多个大文件或者目录通过压缩算法使文件的体积变小以达到压缩的目的,可以节省存储空间,在压缩的时候通常是先打包再压缩;

linux 主要有三种压缩方式:

  • gzip:是公认的压缩这速度最快,压缩大文件的时候与其他的压缩方式相比更加明显,历史最久,应用最广泛的压缩方式

  • bzip:压缩形成的文件小,但是可用性不如 gzip

  • xz:是最新的压缩方式,可以自动提供最佳的压缩率

tar 命令

我一般使用 tar 命令就两种

打包压缩:tar -czvf 打包文件名 要打包的文件

解包解压缩:tar -xzvf 打包文件名  -C 解压到指定目录

tar 命令可以进行打包和压缩两种操作

-c  产生新的包

-C  解压到指定的目录

-x  解包

-f  指定包的文件名,用在最后一个参数 (必须放在后面)

-v  详细显示处理的文件

-z  用 gzip 属性压缩或解压

-j  有 bzip 2 属性压缩或解压

-r  像压缩归档文件末尾追加文件

-u  更新原压缩包中的文件,仅将较新的文件附加到存档中

-t  列出存档中文件的目录

打包操作:tar -cvf 打包文件名要打包的文件

例如:tar -cvf 11.tar ./*

解包操作:tar -xvf 打包文件名

tar -xvf 打包文件名  -C 解压到指定目录

压缩和解压缩操作

gzip 是 GNU 组织开发的一个压缩程序,. gz 结尾的文件就是 gzip 压缩的结果。与 gzip 相对的解压程序是 gunzip。 tar 中使用-z 这个参数来调用 gzip。

一般再用 tar 命令时都是打包和压缩一起用的,只不过多了一个压缩用的参数-z 或-j

tar -czvf 打包文件名要打包的文件

tar -xzvf 打包文件名

tar -xzvf 打包文件名  -C 解压到指定目录

注意:tar 命令打包压缩好的文件后缀是 xxx.tar. gz(方便你我他)

zip 和 unzip 命令

在使用 zip 跟 unzip 命令之前先查看系统有没有安装这两个命令的包,没有的话要自己安装

apt 安装

sudo apt install zip

sudo apt install unzip

yum 安装

yum install -y unzip zip

1、zip 命令

zip [参数] [压缩包名] [压缩的目录或者文件的路径]
-m 将文件压缩后,删除原文件
-q 安静模式,在压缩的时候不显示指令执行的过程
-r 递归压缩,将自定目录下的所有子文件以及文件一起处理
-x ”文件列表“,压缩时排除文件列表中的文件

zip   -qr   tr 1. zip   ./

zip  -qr  tr 2. zip   桌面   tr 1. zip

2、unzip 命令

参数 作用
-c 将解压缩的结果显示到屏幕上(显示每一个目录下的每一个文件的内容),同时对字符做适当的转换,但是并没有解压压缩包
-l 显示压缩文件内所包含的文件
-t 检查压缩文件是否正确
-v 显示压缩文件的详细信息
-q 安静模式,执行时不显示任何信息
-d 指定文件解压后存储的目录
-x 指定不要处理压缩文件中的那些文件

使用 -v 显示的信息比使用-l 显示的信息更加详细

unzip -q -d ./pikachu tt.zip

磁盘管理

du,disk usage, 是通过搜索文件来计算每个文件的大小然后累加,du 能看到的文件只是一些当前存在的,没有被删除的。他计算的大小就是当前他认为存在的所有文件大小的累加和。

df,disk free,通过文件系统来快速获取空间大小的信息,当我们删除一个文件的时候,这个文件不是马上就在文件系统当中消失了,而是暂时消失了,当所有程序都不用时,才会根据 OS 的规则释放掉已经删除的文件, df 记录的是通过文件系统获取到的文件的大小,他比 du 强的地方就是能够看到已经删除的文件,而且计算大小的时候,把这一部分的空间也加上了,更精确了。

当文件系统也确定删除了该文件后,这时候 du 与 df 就一致了。

df 的使用

df 以磁盘分区为单位查看文件系统,可以获取硬盘被占用了多少空间,目前还剩下多少空间等信息。

-h:人类可阅读的方式显示

字段名 含义
Filesystem 文件系统对应的设备文件的路径名
Size 分区大小
Used 已使用容量
Avail 还可以使用的容量
Use% 已用百分比
Mounted on 指定的文件系统的挂载点

du 的使用

du 的英文原义为 disk usage,含义为显示磁盘空间的使用情况,用于查看当前目录的总大小。

常用命令:

查看当前目录的大小

du -sh
-s或--summarize 仅显示指定目录或文件的总大小,而不显示其子目录的大小。
-h或--human-readable 以K,M,G为单位,提高信息的可读性。
-m或--megabytes 以1MB为单位

查询当前目录下每个文件或者目录的大小

 du -h --max-depth=1

--max-depth 代表的是查看的目录层级,1 代表查看一级目录

du -h 目录名:查看指定文件夹下的所有文件大小(包含子文件夹)

查看当前目录下每个文件及文件夹的大小

du -sh ./*

fdisk 的使用

fdisk 可以划分磁盘分区,需要在 root 用户下使用,可以看到整个硬盘的信息,包括 swap 分区

fdisk 允许我们在每块硬盘上创建最多四个主分区。它们中的其中一个可以作为扩展分区,并下设多个逻辑分区。1-4 扇区作为主分区被保留,逻辑分区从扇区 5 开始。

字段含义:

  • Device:分区的设备文件名。
  • Boot:是否为启动引导分区,在这里 /dev/vda 1 为启动引导分区。
  • Start:起始柱面,代表分区从哪里开始。
  • End:终止柱面,代表分区到哪里结束。
  • Blocks:分区的大小,单位是 KB。
  • id:分区内文件系统的 ID。在 fdisk 命令中,可以使用 "i" 查看。
  • System:分区内安装的系统是什么。

fdisk 命令: https://zhuanlan.zhihu.com/p/56273534https://www.cnblogs.com/yizhipanghu/p/10118983.html

free 命令

free 命令是 Linux 系统中最简单和最常用的内存查看命令

-b, –bytes: 以 Byte 为单位显示内存使用情况

-k, –kilo: 以 KB 为单位,这也是默认值

-m, –mega: 以 MB 为单位显示内容使用情况

-g, –giga: 以 GB 为单位显示内存使用情况

-h, –human,自动将数值转换为人类易读形式(常用)

-c, –count,展示结果 count 次,需与-s 配合使用

-s, –seconds,动态刷新内存使用情况的间隔

free -h -c 3 -s 2  # 刷新三次,间隔为两秒

各个字段的含义

Mem 行是内存的使用情况。

Swap 行是交换空间的使用情况

字段名 含义
total 内存总数
used 已经使用的内存数
free 空闲的内存数
shared 多个进程共享的内存总额
buffers 缓存内存数,可回收
cached 缓存内存数,可回收
available 显示还可以被应用程序使用的物理内存大小

free 与 available 区别 free 是真正尚未被使用的物理内存数量。至于 available 就比较有意思了,它是从应用程序的角度看到的可用内存数量。Linux 内核为了提升磁盘操作的性能,会消耗一部分内存去缓存磁盘数据,就是我们介绍的 buffer 和 cache。所以对于内核来说,buffer 和 cache 都属于已经被使用的内存。当应用程序需要内存时,如果没有足够的 free 内存可以用,内核就会从 buffer 和 cache 中回收内存来满足应用程序的请求。所以从应用程序的角度来说,available = free + buffer + cache。请注意,这只是一个很理想的计算方式,实际中的数据往往有较大的误差。

参考: https://blog.csdn.net/liuwkk/article/details/108820845

进程管理命令

ps 和 top 命令常用来查看 Linux 系统进程相关信息。kill用来结束进程

查看进程时的一些字段含义

字段名 含义
%CPU 占用 CPU 的使用率
%MEM 占用的内存的使用率
VSZ 进程的虚拟内存大小
RSS 驻留集的大小,可以理解为内存中页的数量
TTY 控制终端的 ID
STAT 也就是当前进程的状态,其中 S-睡眠,s-表示该进程是会话的先导进程,N-表示进程拥有比普通优先级更低的优先级,R-正在运行,D-短期等待,Z-僵死进程,T-被跟踪或者被停止等等
STRAT 这个很简单,就是该进程启动的时间
TIME 进程已经消耗的 CPU 时间,注意是消耗 CPU 的时间
COMMOND 命令的名称和参数

ps

ps 命令:可以查看进程的瞬间信息。

-A :显示所有进程

-u :查看指定用户下的进程

-a :显示 shell 前台运行命令的进程,但不包括 shell 本身

a :关于当前 shell 运行的所有进程

x :显示所有进程,不以终端机来区分。

-f :显示 UID, PPIP, C 与 STIME 栏位。

f :用 ASCII 字符显示树状结构,表达进程间的相互关系

-e :此参数的效果和指定"-A"参数相同。

e :列出进程时,显示每个进程所使用的环境变量。

常用实例:

ps -ef :和 grep 命令结合用来查找很方便

ps aux 或 ps -aux :显示的信息很全

ps auxc 或 ps -auxc

ps axjf 或 ps -axjf

ps axjfc 或 ps -axjfc

字段名 含义
%CPU 占用 CPU 的使用率
%MEM 占用的内存的使用率
VSZ 进程的虚拟内存大小
RSS 驻留集的大小,可以理解为内存中页的数量
TTY 控制终端的 ID
STAT 也就是当前进程的状态,其中 S-睡眠,s-表示该进程是会话的先导进程,N-表示进程拥有比普通优先级更低的优先级,R-正在运行,D-短期等待,Z-僵死进程,T-被跟踪或者被停止等等
STRAT 这个很简单,就是该进程启动的时间
TIME 进程已经消耗的 CPU 时间,注意是消耗 CPU 的时间
COMMOND 命令的名称和参数

top

top 命令 :可以持续的监视进程的信息。

先利用 top 命令进入视图,再 f 键看下全称信息,再 q 退出回到 top 视图

参考: https://www.jianshu.com/p/8a6754f919c5

  • -d 秒数:指定 top 命令每隔几秒更新。默认是 3 秒;
  • -b:使用批处理模式输出。一般和"-n"选项合用,用于把 top 命令重定向到文件中;
  • -n 次数:指定 top 命令执行的次数。一般和"-"选项合用;
  • -p 进程 PID:仅查看指定 ID 的进程;
  • -s:使 top 命令在安全模式中运行,避免在交互模式中出现错误;
  • -u 用户名:只监听某个用户的进程
  • q:退出 top 命令;

http://c.biancheng.net/view/1065.html

kill

常用命令

# 利用 pid 杀死进程
kill pid 编号

# 强制杀死
kill -kill Pid

网络管理命令

ifconfig、route、arp 和 netstat 等命令行工具(它们统称为 net-tools),管理和排查各种网络配置。这类工具原先起源于 BSD TCP/IP 工具箱,旨在配置老式 Linux 内核的网络功能。自 2001 年以后,它在 Linux 社区的发展就止步不前了。Debian ,Arch Linux ,CentOS/RHEL 7 等一些 Linux 发行版已经弃用了 net-tools,其他发行版计划弃用 net-tools,改而使用 iproute 2。

参考: https://blog.csdn.net/weixin_39094034/article/details/113479962

ifconfig

参考: https://juejin.cn/post/7029575246919237663

用户相关命令

一、用户查看命令

whoami、who、w、last

whoami 命令

打印当前登录的用户名称

root@kali :~# whoami
root

who 命令

who 命令用于显示系统中有哪些使用者正在上面,显示的资料包含了使用者 ID、使用的终端机、从哪边连上来的、上线时间、呆滞时间、CPU 使用量、动作等等

root@kali :~# who
root     tty 7         2022-03-04 12:27 (:0)

常用参数:

参数 作用
-u 列出已登录的用户
-H 或--heading 显示各栏位的标题信息列。
-l 列出任何登录进程。
-r 显示运行级别
-b 系统最近启动时间和日期

w 命令

用来查看登陆者的信息及他们的行为

参数:

参数 作用
-h 不显示标题
-V 显示版本信息
-s 简洁模式
-f 显示 FROM 选项,也就是远程主机名
-w 主要用于执行 su 命令后的情况

tty 命令

查看所连接的设备或终端

last 命令

查看最近一个月用户登录服务器的情况

二、用户管理命令

useradd

使用 useradd 时,如果后面不添加任何参数选项,例如:sudo useradd test 创建出来的用户将是默认“三无”用户:一无 Home Directory,二无密码,三无系统 Shell

  • -m:创建用户的家目录
  • -d:指定用户的家目录路径
  • -s:指定用户登入后所使用的shell。默认值为/bin/bash
useradd git -s /bin/git-bash -M
# 创建一个不能登录,没有家目录的用户 git

userdel

adduser

这是一个脚本,更加方便使用。

lsof 命令

lsof 是 List Open File 的缩写, 它主要用来获取被进程打开文件的信息,我们都知道,在 Linux 中,一切皆文件,lsof 命令可以查看所有已经打开了的文件,比如: 普通文件,目录,特殊的块文件,管道,socket 套接字,设备,Unix 域套接字等等,同时,它还可以结合 grep 以及 ps 命令进行更多的高级搜索

默认没有安装,需要权限进行安装:yum install -y lsof

由于 lsof 命令会输出很多信息,所以上面例子中使用了 lsof | more 来分页显示命令输出结果

使用 -u 选项可以列出指定用户已经打开的文件,该选项后面可以接多个用户名,每个用户名之间用空格隔开,表示列出所有指定用户已打开的所有文件

lsof -u tt | more

如果要排除指定用户已经打开的文件,可以在用户名前加 ^ 符号,下面的命令会列出除 tt 用户外其他所有用户已打开了的文件

lsof -u ^tt | more 

Linux下 lsof 命令详解 - Linux开发那些事儿 - 博客园 (cnblogs.com)

lastlog

lastlog 命令 用于显示系统中所有用户最近一次登录信息。

lastlog 文件在每次有用户登录时被查询。可以使用 lastlog 命令检查某特定用户上次登录的时间,并格式化输出上次登录日志 /var/log/lastlog 的内容。它根据 UID 排序显示登录名、端口号(tty)和上次登录时间。如果一个用户从未登录过,lastlog 显示 Never logged。注意需要以 root 身份运行该命令。

mount:挂载命令

-a:将 /etc/fstab 中定义的所有设备挂上

1)U 盘挂载

用“fdisk -l”命令查找可用的移动设备。假设找到的设备名为“/dev/sda 1”,用“mkdir /mnt/usb”命令建立一个用于挂载 U 盘的路径。

如果 U 盘是 FAT 的,则用以下命令挂载:

mount -t msdos /dev/sda 1 /mnt/usb

如果是 FAT 32 的,则用以下命令挂载:

mount -t vfat /dev/sda 1 /mnt/usb

2)安全移除 U 盘

由于刚才一直在 U 盘的目录下执行命令,现在要把路径切出去,否则无法移除

cd / (cd 命令切换到任意路径都行,只要别在 U 盘的路径下就可以。)

以下是移除命令(根据挂载路径移除):

umount -v /mnt/usb

或者也可以根据设备名移除:

umount -v /dev/sda 1

如果显示无法移除,那么可以查看一下挂载目录下是不是还有 U 盘下的程序在运行。

lsof | grep usb

查看进程相关信息,可以通过进程 PID 关闭进程:

kill -9 [PID]

也可以用延迟移除命令,等待程序进程关闭再移除:

umount -vl /mnt/usb 或 umount -vl /dev/sda 1

netstat 命令

netstat 在不同的操作系统下,个别参数代表的含义有差别

Linux 系统下

netstat 用于显示与 IP、TCP、UDP 和 ICMP 协议相关的统计数据,一般用于检验本机各端口的网络连接情况。

-a 或--all: 显示所有连线中的 Socket。

-n 或--numeric: 直接使用 IP 地址,而不通过域名服务器。

-p 或--programs: 显示正在使用 Socket 的程序识别码和程序名称

-t 或--tcp: 显示 TCP 传输协议的连线状况。

-u 或--udp: 显示 UDP 传输协议的连线状况。

-V 或--version: 显示版本信息。

State 状态说明:

LISTEN:侦听来自远方的 TCP 端口的连接请求

ESTABLISHED:代表一个打开的连接

SYN-SENT:再发送连接请求后等待匹配的连接请求(如果有大量这样的状态包,检查是否中招了)

SYN-RECEIVED:再收到和发送一个连接请求后等待对方对连接请求的确认(如有大量此状态,估计被 flood 攻击了)

FIN-WAIT-1:等待远程 TCP 连接中断请求,或先前的连接中断请求的确认

FIN-WAIT-2:从远程 TCP 等待连接中断请求

CLOSE-WAIT:等待从本地用户发来的连接中断请求

CLOSING:等待远程 TCP 对连接中断的确认

LAST-ACK:等待原来的发向远程 TCP 的连接中断请求的确认(不是什么好东西,此项出现,检查是否被攻击)

TIME-WAIT:等待足够的时间以确保远程 TCP 接收到连接中断请求的确认

CLOSED:没有任何连接状态

Windows 系统下

-a:显示所有连接和侦听端口。

-n:以数字形式显示地址和端口号。

-o:显示拥有的与每个连接关联的进程 ID。

# 查找端口号 9091
netstat -ano | findstr "9091"

防火墙

iptables 和 firewalld

详情介绍: https://blog.csdn.net/Bilise/article/details/105372667

iptables

netfilter/iptables(简称为 iptables)组成 Linux 平台下的包过滤防火墙,与大多数的 Linux 软件一样,这个包过滤防火墙是免费的,它可以代替昂贵的商业防火墙解决方案,完成封包过滤、封包重定向和网络地址转换(NAT)等功能

iptables -I INPUT -p tcp --dport 8080 -j ACCEPT # linux iptables 开放端口命令

Vim 命令

安装:apt install vim

1、模式转换图

2、默认模式

1)光标控制

【h、j、k、l】:分别控制光标左、下、上、右移一格

【ctrl+b】:屏幕往"后"移动一页

【ctrl+f】:屏幕往"前"移动一页

2)删除

【dd】:删除光标所在行

【ndd】:删除光标所在的向下 n 行

3)复制

【yy】:复制光标所在的那一行

【nyy】:复制光标所在的向下 n 列

4)粘贴

【p】:在光标所在行的下一行粘贴上

【P】(大写):则为贴在光标的上一行

选中文字复制粘贴:先在命令模式下按 v 进入 Visual Mode,然后用方向键或 hjkl 选择文本,再按 y 进行复制。

5)查找和替换

查找:直接输入 / 即可

/word:向光标向下寻找一个名称为 word 的字符串,按下回车键

?word:向光标向上寻找一个名称为 word 的字符

N/n:在搜索结果中切换上/下一个结果

替换:

: s/搜索的关键词/新的内容替换光标所在行的第一处符合条件的内容

: s/搜索的关键词/新的内容/g                        替换光标所在行的全部符合条件的内容

:%s/搜索的关键词/新的内容替换整个文档中每行第一个符合条件的内容

:%s/搜索的关键词/新的内容/g                        替换整个文档的符合条件的内容

3、末行模式

进入方式(英文输入):shift 和 :

1)保存退出

“: w” :保存文件

“:w  路径” :另存为

“: q” :退出文件

“: wq” :保存并且退出

“:q!” :表示强制退出,刚才做的修改操作不做保存

2)其它命令

”: set nu“ : 显示行号

“: set nonu” :与 set nu 相反,为取消行

“:r   filename” :在编辑的数据中,读入另一个文件的数据。将这个文件的内容加到光标所在行的下一行后面

4、编辑模式

进入方式:a、i、o

nano 命令

文本编辑工具,通过组合键实现功能

nano 默认情况下它会自动断行,即在一行中输入过长的内容时自动拆分成几行,但用这种方式来处理某些文件可能会带来问题,比如Linux系统的配置文件,自动断行就会使本来只能写在一行上的内容折断成多行了,有可能造成系统不灵了。因此,如果你想避免这种情况出现,就加上 -w 选项吧。

nano 路径/文件名  # 没有创建
nano -w 文件名   # 禁止自动换行

第一行是在声明 nano 的版本和文件名,最下面的三行,分别是文件的状态与两行命令说明。

常用快捷键:

  • Ctrl + A:光标移至行首
  • Ctrl + E:光标移至行尾
  • Ctrl + Y:向上滚动一页
  • Ctrl + V:向下滚动一页
  • Alt+6:复制一整行
  • ESC+6:复制一整行(Mac 按键:mac 使用 option + 6 打出来是特殊字符)
  • Ctrl+K:剪贴一整行
  • Ctrl+U:粘贴
  • Ctrl + O:保存文件
  • Ctrl + X:退出。如果你修改了文件,下面会询问你是否需要保存修改。输入 Y 确认保存,输入 N 不保存,按 Ctrl+C 取消返回。如果输入了 Y,下一步会让你输入想要保存的文件名。如果不需要修改文件名直接回车就行;若想要保存成别的名字(也就是另存为)则输入新名称然后确定。这个时候也可用 Ctrl+C 来取消返回

精确复制粘贴

Ctrl+6 标记开头位置,移动光标,选中文本,然后 Alt+6 进行复制所选区域,Ctrl+U 进行粘贴。(注意:Mac 需要使用 ESC+6 替换 Alt+6)

awk

指定分隔符输出

cat /etc/passwd | awk -F ':' '{print $1,$3,$4}'
# 以":"为分隔符,输出1,3,4列内容($0,打印每一行)
# 必须使用单引号

sed

删除特定行号

sed -i '8d' aaa.txt   # 删除第8行数据
sed -i '6,9d' filename  # 删除[6,9]都删除,6-9之间都删除
sed -i '$d' filename  # 删除最后一行
sed -i '/xxyy/d'  # 删除包含xxyy的行

xargs 命令

cor

定时任务

定时任务是自动化和定期执行任务的重要手段。其中,crontab 和 crond 是两个核心概念。crontab 是 Cron Table 的缩写,是一个用于设置、维护或检查用户的定时任务的命令。通过编辑 crontab 文件,用户可以指定在特定时间或间隔内要执行的命令或脚本。crond 是 Cron Daemon 的缩写,是 Linux 下的一个守护进程,它负责周期性地检查并执行 crontab 中定义的定时任务。

换句话说,crontab 定义了任务,而 crond 则负责执行这些任务。

启动 crond 服务

# 使用systemctl命令
systemctl status crond  # 查看是否启动
systemctl start crond   # 启动

# 或者使用service命令也一样
service crond start

crontab 基本用法

# 查看当前用户的crontab任务
crontab -l
# 查看某个用户的crontab任务
crontab -l -u username
# 查看所有用户的crontab任务(root执行)
cat /etc/passwd | cut -f 1 -d : |xargs -I {} crontab -l -u {}

# 添加或编辑当前用户的定时任务
crontab -e

# 删除当前用户的定时任务
crontab -r

如果输入 crontab -e 提示选择编辑器,选择常用的 vim 即可。如果选择错了,输入 select-editor 重新选择

格式说明:

*    *    *   *   *  mycommand
分  时  日  月  周  命令
  • *: 表示所有可能的值。例如,* * * * * 表示每分钟都运行一次。
  • */n: 表示每 n 个时间单位运行一次。例如,*/5 * * * * 表示每 5 分钟运行一次。
  • n: 表示特定的时间单位。例如,30 3 * * 1 表示在星期一的凌晨 3 点 30 分执行任务。

实例说明:

# 每一分钟执行一次 /bin/ls
* * * * * /bin/ls
*/1 * * * * /bin/ls  # 每一分钟
* */1 * * * /bin/ls    # 每一小时
10 2 */2 * * /sbin/shutdown -r  # # 每隔两天,在 2:10 重启


# 每晚的21:30重启smb
30 21 * * * /etc/init.d/smb restart

# 每一小时重启smb
0 */1 * * * /etc/init.d/smb restart

# 每周六、周日的1 : 10重启smb
10 1 * * 6,0 /etc/init.d/smb restart

参考: https://www.runoob.com/w3cnote/linux-crontab-tasks.html

其它写法

@reboot sleep 60; /root/my-script.sh  # 开机启动后,等60秒再启动脚本

# 其它参数
@yearly: 等同 0 0 1 1 * 写法,即每年一月一日零时零分。
@monthly: 在每月一号零时零分执行。
@daily: 每天零时零分
@hourly: 每小时零分执行。

查看系统启动时间

last reboot  # 查看系统历史启动的时间
who -b  # 查看最后一次系统启动的时间。
who -r  # 查看当前系统运行时间

htpasswd

安装 htpasswd 工具:yum install httpd-tools 或者 apt install apache2-utils

参数:

  • -c 创建 passwdfile。如果 passwdfile 已经存在,那么它会重新写入并删去原有内容。
htpasswd -c ./mypasswd adminuser  # 回车,然后输入adminuser的密码
htpasswd -c ./mypasswd adminuser  # 如果再来一遍,就会清空文件,重新写入。
# 可以创建多个用户,见参考或百度查询

参考: https://www.cnblogs.com/smail-bao/p/5673343.html

查看端口占用

lsof -i:端口号
netstat -nultp | grep 端口号