切换工作目录 (cd)

  1. # 切换到/home目录
  2. cd /home
  3. # 从哪来回哪去
  4. cd -
  5. # 切换到当前用户目录
  6. cd ~

显示当前工作目录 (pwd)

  1. pwd

显示进程状态 (ps)

ps 的参数非常多, 在此仅列出几个常用的参数并大略介绍含义

  • -A 列出所有的进程
  • -w 显示加宽可以显示较多的资讯
  • -au 显示较详细的资讯
  • -aux 显示所有包含其他使用者的行程

au(x) 输出格式:

  1. USER PID %CPU %MEM VSZ RSS TTY STAT START TIME COMMAND
  2. 含义如下:
  3. USER: 进程拥有者
  4. PID: pid
  5. %CPU: 占用的 CPU 使用率
  6. %MEM: 占用的记忆体使用率
  7. VSZ: 占用的虚拟记忆体大小
  8. RSS: 占用的记忆体大小
  9. TTY: 终端的次要装置号码 (minor device number of tty)
  10. STAT: 该行程的状态:
  11. D: 无法中断的休眠状态 (通常 IO 的进程)
  12. R: 正在执行中
  13. S: 静止状态
  14. T: 暂停执行
  15. Z: 不存在但暂时无法消除
  16. W: 没有足够的记忆体分页可分配
  17. <: 高优先序的行程
  18. N: 低优先序的行程
  19. L: 有记忆体分页分配并锁在记忆体内 (实时系统或捱A I/O)
  20. START: 行程开始时间
  21. TIME: 执行的时间
  22. COMMAND:所执行的指令

示例:

  1. # 查找指定进程状态
  2. ps -ef | grep 进程关键字

显示内存使用情况 (free)

  1. free -m

显示磁盘使用情况 (df)

  1. df -h

移动文件或者将文件改名 (mv)

  1. # 文件改名,将file.txt改名为file1.txt
  2. mv file.txt file1.txt
  3. # 文件移动,将test.txt移动到/home目录下
  4. mv test.txt /home/
  5. # 文件改名并移动,将test.txt移动到/home目录下并改名为test1.txt
  6. mv test.txt /home/test1.txt
  7. # 移动当前文件夹下的所有文件到上一级目录
  8. mv * ../

复制 (cp)

使用该指令复制目录时,必须使用参数 -r 或者 -R

  1. # 将file.txt复制到/tmp/目录下,主要末尾要带"/"
  2. cp file.txt /tmp/
  3. # 改名复制,将file.txt复制到/tmp目录下并改名为file1.txt
  4. cp file.txt /tmp/file1.txt
  5. # 将a目录下所有文件复制到b中
  6. cp r a/ b/

压缩/解压文件 (gzip)

注意:该命令只能压缩一个文件。

gzip 文件 压缩
gzip -dv 压缩文件 解压并打印执行过程
gzip -c 待压缩文件 > 带压缩文件.gz 压缩文件并保留源文件
gzip * 批量压缩
gzip -dv * 批量解压
  1. # 压缩并删除原有a.txt
  2. gzip a.txt

打包/解压文件 (tar)

注意:打包不是压缩,打包是指将一大堆文件或目录变成一个总的文件;压缩则是将一个大的文件通过一些压缩算法变成一个小文件。当你想要压缩一大堆文件时,你得先将这一大堆文件先打成一个包(tar命令),然后再用压缩程序进行压缩(gzip bzip2命令)。
常见文件格式的压缩/解压命令:

  1. .tar
  2. 解包:tar xvf FileName.tar
  3. 打包:tar cvf FileName.tar DirName
  4. (注:tar是打包,不是压缩, x表示从中提取,c表示创建,v表示显示操作过程,f表示指定压缩包)
  5. .gz
  6. 解压1gzip FileName.gz
  7. 解压2gzip -d FileName.gz
  8. 压缩:gzip FileName
  9. .tar.gz .tgz
  10. 解压:tar zxvf FileName.tar.gz
  11. 压缩:tar zcvf FileName.tar.gz DirName
  12. .bz2
  13. 解压1bzip2 -d FileName.bz2
  14. 解压2bunzip2 FileName.bz2
  15. 压缩: bzip2 -z FileName
  16. .tar.bz2
  17. 解压:tar jxvf FileName.tar.bz2
  18. 压缩:tar jcvf FileName.tar.bz2 DirName
  19. .bz
  20. 解压1bzip2 -d FileName.bz
  21. 解压2bunzip2 FileName.bz
  22. 压缩:未知
  23. .tar.bz
  24. 解压:tar jxvf FileName.tar.bz
  25. 压缩:未知
  26. .Z
  27. 解压:uncompress FileName.Z
  28. 压缩:compress FileName
  29. .tar.Z
  30. 解压:tar Zxvf FileName.tar.Z
  31. 压缩:tar Zcvf FileName.tar.Z DirName
  32. .zip
  33. 解压:unzip FileName.zip
  34. 压缩:zip FileName.zip DirName
  35. .rar
  36. 解压:rar x FileName.rar
  37. 压缩:rar a FileName.rar DirName

修改文件或者目录的时间属性 (touch)

  1. # 创建不存在的文件
  2. touch a.txt
  3. # 修改文件时间属性为当前系统时间
  4. touch a.txt
  5. # 设定文件的时间戳, 时间格式是YYYYMMDDhhmm[.SS]
  6. touch -t 201211142234.50 a.txt

显示文件内容 (cat)

  1. # 一次显示整个文件
  2. cat filename
  3. # 从键盘创建一个文件
  4. cat > filename
  5. # 将几个文件合并为一个文件
  6. cat file1 file2 > file
  7. # 反向展示文件内容
  8. tac log.txt

查看文件尾部内容 (tail)

tail 命令可用于查看文件的内容,有一个常用的参数 -f 常用于查阅正在改变的日志文件。
tail -f filename 会把 filename 文件里的最尾部的内容显示在屏幕上,并且不断刷新,只要 filename 更新就可以看到最新的文件内容。

  1. # 查看log最后100行内容且不断循环刷新的读取。-f循环读取,-n指定行数
  2. tail -f -n 100 log2021.log

删除文件中重复的行 (uniq)

当重复的行并不相邻时,uniq 命令是不起作用的,这时候需要用到sort命令,先进行排序再删除重复的行。

  1. # 删除file文件中的重复行
  2. uniq file
  3. # 删除重复的行并显示重复的次数
  4. uniq -c file
  5. # 先排序,再删除重复的行
  6. sort file | uniq
  7. # 删除fruit文件中的重复行并将结果保存到newfruit文件中
  8. uniq file newfile
  9. # 在文件中找出重复的行
  10. sort file | uniq -d
  11. # 统计各行在文件中出现的次数
  12. sort file | uniq -c

逐页阅读 (more)

more会以一页一页的显示方便使用者逐页阅读,而最基本的指令就是按空白键(space)就往下一页显示,按 b 键就会往回(back)一页显示,而且还有搜寻字串的功能 。more命令从前向后读取文件,因此在启动时就加载整个文件。

  1. # 逐页显示 testfile 文档内容,如有连续两行以上空白行则以一行空白行显示。
  2. more -s testfile
  3. # 从第 20 行开始显示 testfile 之文档内容。
  4. more +20 testfile
  5. # 从文件中查找第一个出现"abc"字符串的行,并从该处前两行开始显示输出
  6. more +/abc testfile
  7. # 每页显示5行
  8. more -5 testfile
  9. # 从第20行开始显示,每页显示5条
  10. more +20 -5 testfile

修改用户对文件的权限(chmod)

chmod(英文全拼:change mode)命令是控制用户对文件的权限的命令,
Linux/Unix 的文件调用权限分为三级 : 文件所有者(Owner)、用户组(Group)、其它用户(Other Users)。
r表示read读,w表示write写,x表示excute执行。
image.png
只有文件所有者和超级用户可以修改文件或目录的权限。可以使用绝对模式(八进制数字模式),符号模式指定文件的权限。这两种模式表示方法不同,效果等同的。

符号模式语法

语法格式是 :用户类型+操作符+权限,可以给指定的用户类型加减权限。
用户类型有四种:

  • u 表示user,文件所有者
  • g 表示group,文件所有者所在组
  • o 表示other,其他用户
  • a 表示all,所有用户

操作符有三种:

    • 增加指定的权限
    • 去除指定的权限
  • = 重新设置指定的权限给用户

权限符号有六种,常用的三种就是r(read)、w(write)、x(excute),下面是所有的权限符号:

  • r 读,设置为可读权限
  • w 写,设置为可写权限
  • x 执行,设置为可执行权限
  • X 特殊执行权限,只有当文件为目录文件,或者其他类型的用户有可执行权限时,才将文件权限设置可执行
  • s setuid/gid,当文件被执行时,根据who参数指定的用户类型设置文件的setuid或者setgid权限
  • t 粘贴位,设置粘贴位,只有超级用户可以设置该位,只有文件所有者u可以使用该位

示例:

  1. # 设置file1.txt增加所有人可读取的权限
  2. chmod ugo+r file1.txt
  3. # 设置file1.txt增加所有人可读取的权限
  4. chmod a+r file1.txt
  5. # 设置文件所有者和组用户可读可写可执行,其他用户只能执行
  6. chmod ug=rwx,o=x file
  7. # 设置file1.txt文件所有者和所在组用户增加可写权限,其他用户不可写
  8. chmod ug+w,o-w file1.txt
  9. # 为文件所有者增加可执行权限。
  10. chmod u+x ex1.py

8进制语法

也就是权限表示这里可以用0-7的数字表示,文件所有者,所在组用户,其他用户分别用一个数字表示。
表示方法:
执行表示数字1,写表示数字2,读表示数字4,这三个数字之间可以做加法。
无权限:0
执行:1
写:2
写+执行:1+2 = 3
读:4
读+执行:4+1=5
读+写:4+2=6
读+写+执行:4+2+1=7
比如:chmod 765 file,这三个数字分别表示文件所有者用户,所在的组用户,和其他用户的权限,
7表示文件所有者拥有完全读写执行权限,6表示组用户拥有读写权限,5表示其他用户拥有读和执行的权限。
示例:

  1. # 设置file.txt权限为所有用户都拥有完全的读、写、执行权限,等同于chmod a+rwx file1.txt
  2. chmod 777 file.txt
  3. # 设置file.txt权限为所有者用户和组用户拥有所有权限,其他用户只能执行,等同于chmod ug=rwx,o=x file
  4. chmod 771 file.txt

文本搜索 (grep)

grep全称是Global Regular Expression Print,表示全局正则表达式印刷,它的使用权限是所有用户。

  1. # 查找指定的名称为java的进程(这条命令本身也会形成一个进程)
  2. ps -ef | grep java
  3. # 从文件中读取关键词进行搜索
  4. cat config.php | grep -f object.txt
  5. # 从文件中读取关键词进行搜索 且显示行号
  6. cat config.php | grep -nf object.txt // 注意nf的位置不能调换
  7. # 从文件中查找关键词
  8. grep 'api' config.php // 注意是区分大小写的
  9. # 还可以从多个文件中查找
  10. grep 'linux' test.txt test2.txt
  11. # grep不显示本身进程 (加-v就是显示除匹配之外的)
  12. ps aux | grep ssh | grep -v "grep"

防火墙 (firewalld)

systemctl使用

  1. systemctl unmask firewalld #执行命令,即可实现取消服务的锁定
  2. systemctl mask firewalld # 下次需要锁定该服务时执行
  3. systemctl start firewalld.service #启动防火墙
  4. systemctl stop firewalld.service #停止防火墙
  5. systemctl reloadt firewalld.service #重载配置
  6. systemctl restart firewalld.service #重启服务
  7. systemctl status firewalld.service #显示服务的状态
  8. systemctl enable firewalld.service #在开机时启用服务
  9. systemctl disable firewalld.service #在开机时禁用服务
  10. systemctl is-enabled firewalld.service #查看服务是否开机启动
  11. systemctl list-unit-files|grep enabled #查看已启动的服务列表
  12. systemctl --failed #查看启动失败的服务列表

firewall-cmd使用

  1. #状态相关
  2. firewall-cmd --state #查看防火墙状态
  3. firewall-cmd --reload #更新防火墙规则
  4. firewall-cmd --state #查看防火墙状态
  5. firewall-cmd --reload #重载防火墙规则
  6. firewall-cmd --list-ports #查看所有打开的端口
  7. firewall-cmd --list-services #查看所有允许的服务
  8. firewall-cmd --get-services #获取所有支持的服务
  9. #区域相关
  10. firewall-cmd --list-all-zones #查看所有区域信息
  11. firewall-cmd --get-active-zones #查看活动区域信息
  12. firewall-cmd --set-default-zone=public #设置public为默认区域
  13. firewall-cmd --get-default-zone #查看默认区域信息
  14. firewall-cmd --zone=public --add-interface=eth0 #将接口eth0加入区域public
  15. #接口相关
  16. firewall-cmd --zone=public --remove-interface=eth0 #从区域public中删除接口
  17. firewall-cmd --zone=default --change-interface=eth0 #修改接口eth0所属区域为default
  18. firewall-cmd --get-zone-of-interface=eth0 #查看接口eth0所属区域

firewall-cmd用例

  1. firewall-cmd --query-port=8080/tcp # 查询端口是否开放
  2. firewall-cmd --add-port=80/tcp --permanent #永久添加80端口例外(全局)
  3. firewall-cmd --remove-port=80/tcp --permanent #永久删除80端口例外(全局)
  4. firewall-cmd --add-port=65001-65010/tcp --permanent #永久增加65001-65010例外(全局)
  5. firewall-cmd --zone=public --add-port=80/tcp --permanent #永久添加80端口例外(区域public)
  6. firewall-cmd --zone=public --remove-port=80/tcp --permanent #永久删除80端口例外(区域public)
  7. firewall-cmd --zone=public --add-port=65001-65010/tcp --permanent #永久增加65001-65010例外(区域public)
  8. firewall-cmd --reload #重启防火墙(修改配置后要重启防火墙)

查找进程和端口号相关

查看关键词对应的进程,获取进程号(pid)

  1. # 查找java相关的进程
  2. ps -ef|grep java

根据进程pid查找对应的端口

  1. lsof -i | grep pid
  2. # 或
  3. netstat -anp | grep pid

根据端口查是否有相关进程(查看端口是否被占用),如有则获取pid

  1. lsof -i:port
  2. # 或
  3. netstat -anp | grep port

结束/杀死进程

有两种可以帮我们杀死错误的进程的信息。

  • 进程的名字
  • 进程的 ID (PID)

kill - 通过进程 ID 来结束进程
killall - 通过进程名字来结束进程
另外需要给kill指令发送信号来告诉他如何结束这个进程,比如是挂起还是直接杀死
kill -l 查看所有结束进程的信号
常用结束进程的信号如下:

Signal Name Single Value Effect
SIGHUP 1 挂起
SIGINT 2 键盘的中断信号
SIGKILL 9 发出杀死信号
SIGTERM 15 发出终止信号
SIGSTOP 17, 19, 23 停止进程

可以用信号的Value代替Name,这样不用记住所有的信号名称。
kill -9 PID 是操作系统从内核级别强制杀死一个进程。
kill -15 PID 可以理解为操作系统发送一个通知告诉应用主动关闭。
kill的默认信号是15。
优雅关闭进程一般是发出终止信号,让应用程序进行关闭前的清理工作。

  1. kill -15 pid

等待一会,再次查询进程信息,如果还没停止,可以强制杀死进程。

  1. kill -9 pid

重启 (reboot)

  1. reboot

参考

https://www.runoob.com/linux/linux-command-manual.html