Contents

操作系统-linux-常用命令

ubuntu官方文档

ubuntu 18.04 server官方文档

linux265

菜鸟教程 命令大全

菜鸟教程Linux 常用命令集合

掘金 小图子 玩转Linux操作系统

博客园 单界

通常都需要配合管道符|和重定向符>>><

补充一下:linux的程序有3个默认设备,标准输入0,标准输出1和标准错误2

运行命令时可以使用重定向符号定位到文件里面,有一个特殊用法 2>&1,将标准错误也重定向到标准输出,当这三个默认设备作为重定向到目标文件时得加上&

常用快捷键

  • ctrl+alt+t:打开一个新的终端,这种方式打开的终端是不同的pts,但是属于同一个tty
  • ctrl+z:将当前进程放到后台,后台任务可以通过fg重新放到前台执行
  • ctrl+c:中断当前终端
  • ctrl+d:发送EOF给当前终端,相当于exit命令
  • ctrl+s:暂停当前终端
  • ctrl+q:取消暂停的终端

bg

查看后台任务及任务号

fg

将后台任务放到前台执行

1
fg 任务号

shell编程

Shell 有两种执行命令的方式交互式和批处理

第一行 #!/bin/bash 表示使用的shell程序

Shell变量

CSDN weixin_39686634 CSDN Dust_Evc

  • set命令显示当前shell的变量,包括当前用户的变量
  • env命令显示当前用户的变量
  • export命令显示当前导出成用户变量的shell变量

定义变量,中间不能有空格

1
2
3
variable=value
variable='value' # 原样输出
variable="value" # 解析动态变量

使用变量:${variable},当variable不和其他字符串一起使用时可以去掉花括号,反例是:${variable}xxx

动态变量使用命令输出作为变量:$()或反引号。其实就是开启一个子进程执行命令,并将标准输出返回

只读变量:readonly variable

删除变量:unset variable,不能删除只读变量

Shell数组

只支持一维数组

定义数组:array_name=(xxx xxx)

读取数组:${array_name[index]}

将数组中的元素全部输出:$arrs[*]$arrs[@],因为shell里面都是识别字符串(不识别数组类型),所以for in遍历时得通过这种方式来遍历数组

获取数组长度:#运算符,该运算符也可以计算字符串中单词个数或字符串中字符个数,所以:

1
2
3
len=${#arrs}
len=${#arrs[*]}
len=${#arrs[@]}

删除数组中的元素:unset arrs[n]

删除数组:unset arrs

拼接数组:arr3=(${arr1[@]} ${arr2[@]})

Shell运算符

原生bash不支持算术运算,只支持逻辑运算

算术运算符+-*/%使用awk和expr命令(expr不支持浮点运算)使用动态变量进行计算:val=$(expr 1 + 2)

条件表达式要放在方括号之间,并且要有空格:[ $a == $b ]

不过一般使用关系运算符-eq(equal),-ne(not equal),-gt(greater than),-lt(less than),-ge(greater equal)和-le(less equal)

逻辑运算符:!(not),-o(or),-a(and),使用两个方括号括起来的条件表达式[[ ]]可以直接用&&(and)和||(or)

字符串运算符和文件运算符见linux264教程

Shell结构命令

if else-if else 语句

1
2
3
4
5
6
7
8
9
if condition1
then
    command1
elif condition2 
then 
    command2
else
    commandN
fi

for 循环

1
2
3
4
5
6
7
for var in item1 item2 ... itemN
do
    command1
    command2
    ...
    commandN
done

while 语句(condition为true表示无限循环)

1
2
3
4
while condition
do
    command
done

until 循环

1
2
3
4
until condition
do
    command
done

case,星号 * 捕获该值,类似default

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
15
16
17
case 值 in
模式1)
    command1
    command2
    command3
    ;;
模式2)
    command1
    command2
    command3
    ;;
*)
    command1
    command2
    command3
    ;;
esac

跳出循环,break和continue

循环k次使用seq命令返回值来进行统计

1
2
3
4
for i in $(seq 1 $1)
do
  ...
done

Shell函数

1
2
3
4
funname (){
    action;
    [return int;]
}

可以显式return,如果没有return则以最后一条命令的输出为返回值(取值为0-255)

函数参数:${n}获取第n个参数

参数个数:$#

读取返回值:$?

CSDN weixin_33898876

alias别名默认不允许传入参数,可以通过alias定义一个函数来使用

1
alias tcstart='new() { /root/bin/tc-single-start "$1"; /root/bin/tclog "$1"; }; new'

Shell输入/输出重定向

  • <:输入重定向
  • >:输出重定向,重写
  • >>:输出重定向,追加

0为输入Stdin,1为输出Stdout,2为Stderr

当需要区分错误输出重定向和输出重定向时可以:cmd 1>xxx 2>xxx

Shell文件包含

source filename

执行子shell命令

  • $()``:新建子进程执行命令
  • exec:使用当前shell执行命令

shell快捷键

  • shift+左右:按单词移动光标

ctrl系列命令,相对字符操作

  • ctrl+a:到当前行首(ahead)
  • ctrl+e:到当前行尾(end)
  • ctrl+f:往右移动一个字符(forward)
  • ctrl+b:往左移动一个字符(backward)
  • ctrl+u:删除该行光标所在位置以及左边的所有字符
  • ctrl+k:删除…..右边….

alt系列命令,相对单词操作

  • alt+f:往右移动一个单词(forward)
  • alt+b:往左移动一个单词(backward)
  • alt+d:删除光标所在位置到右边的一个单词(delete)

gnome-terminal

CSDN 宗而研之

该命令默认启动一个新的pts,图形化界面很方便,且新pts的pwd与当前终端的pwd一致

常用选项

  • –maximize:打开后自动最大化
  • –full-screen:打开后全屏
  • –title=“new title”:设置标题
  • –window 和 –tab:打开多个终端,多个tab
  • –:要执行的命令,通常是gnome-terminal -- bash -c 'ls; exec bash',如果要传递参数给gnome则将参数添加到后面,比如gnome-terminal -- bash -c 'ls;echo $0;exec bash' $a,这里要注意是从0开始计数的

可以通过read命令来避免直接关闭

seq

CSDN 一只小菜鸡1111

1
seq start sep end

常用选项

  • -s :使用指定字符串分隔数字,默认是换行符

date

CSDN 恒悦sunsite

当前系统时间

1
date [选项]... [+格式]

以下是常用的以纳秒为单位的unix时间戳

1
date +%s%N

&

后台运行命令

nohup

nohup 命令运行由 Command参数和任何相关的 Arg参数指定的命令,忽略所有挂断(SIGHUP)信号。通常和后台运行命令&一起使用

如果不将 nohup 命令的输出重定向,输出将附加到当前目录的 nohup.out 文件中。

三剑客

grep

菜鸟教程

查找文件里符合条件的行并显示前n行,该行以及后m行

1
grep -B n -A m pattern file

awk

菜鸟教程

AWK 是一种处理文本文件的语言,是一个强大的文本分析工具

常见用法,提取符合正则表达式的行的某些字段

action 通常是print $n$n是内建变量表示选择第n个字段

pattern也可以是布尔表达式

awk '{[pattern] action}' filenames

# 输出第二列包含 "th",并打印第二列与第四列
$ awk '$2 ~ /th/ {print $2,$4}' log.txt

# 输出包含 "re" 的行
$ awk '/re/ ' log.txt

# 忽略大小写
$ awk 'BEGIN{IGNORECASE=1} /this/' log.txt

# 过滤第一列大于2的行
$ awk '$1==2 {print $1,$3}' log.txt    #命令

不使用print默认输出整行

-f file,file 为 awk 脚本

  • BEGIN{ 这里面放的是执行前的语句 }
  • END {这里面放的是处理完所有的行后要执行的语句 }
  • {这里面放的是处理每一行时要执行的语句}

sed

菜鸟教程

以行为单位编辑文本

sed会修改源文件内容,所以尽量使用管道来实现不修改原文内容

1
nl testfile | sed '2,5d'

其中nl是给每行添加行号后输出,另外也可以使用cat

1
sed [-hnV][-e<script>][-f<script文件>][文本文件]

-n或–quiet或–silent 仅显示script处理后的结果

动作说明:

  • a :新增, a 的后面可以接字串,而这些字串会在新的一行出现(目前的下一行)
  • c :取代, c 的后面可以接字串,这些字串可以取代 n1,n2 之间的行
  • d :删除,因为是删除啊,所以 d 后面通常不接任何东东
  • i :插入, i 的后面可以接字串,而这些字串会在新的一行出现(目前的上一行)
  • p :打印,亦即将某个选择的数据印出。通常 p 会与参数 sed -n 一起运行
  • s :取代,可以直接进行取代的工作哩!通常这个 s 的动作可以搭配正则表达式!例如 1,20s/old/new/g 就是啦

sort

菜鸟教程

从第n个字段将文本文件内容行加以排序并输出

1
sort file -k n

wc

统计指定文件中的字节数、字数、行数,并将统计结果显示输出。

1
wc test.txt

显示顺序为行数,单词数和字节数

计划任务

at系列,只执行一次

  • at - 将任务排队,在指定的时间执行。
  • atq - 查看待执行的任务队列。
  • atrm - 从队列中删除待执行的任务:atrm +at的id号

at 5pm+3days

时间点(hh:mm(小时:分钟),now,5pm,month day(月 日)或mm/dd/yy(月/日/年)或dd.mm.yy(日.月.年)),today(今天),tomorrow(明天) + 数字 + time_units(minutes(分钟)、hours(小时)、days(天)、weeks(星期))

-f 执行文件.sh

crontab

  • -e : 执行文字编辑器来设定时程表,内定的文字编辑器是 VI,如果你想用别的文字编辑器,则请先设定 VISUAL 环境变数来指定使用那个文字编辑器(比如说 setenv VISUAL joe)
  • -r : 删除目前的时程表
  • -l : 列出目前的时程表

时间格式如下:

1
2
# f1 是表示分钟,f2 表示小时,f3 表示一个月份中的第几日,f4 表示月份,f5 表示一个星期中的第几天。
f1 f2 f3 f4 f5 [user-name] program

在 /etc/crontab 中添加环境变量,在可执行命令之前添加命令 . /etc/profile;/bin/sh,使得环境变量生效,例如:

1
20 03 * * * . /etc/profile;/bin/sh /var/www/runoob/test.sh

和crontab相关的文件在/etc目录下,通过修改/etc目录下的crontab文件也能够定制计划任务

@reboot标记的条目表示开机运行

1
@reboot /home/ok/auto_run_script.sh

crontab 可以执行多条命令,所以我们可以通过cd来决定去哪里执行命令

1
20 03 * * * cd xxx;/bin/sh /var/www/runoob/test.sh

管道和重定向的坑

labuladong 博客

管道符连接的多个命令是并行执行的

对同一个文件进行读写

1
2
# 先把数据写入临时文件,然后覆盖原始文件
cat file.txt | head -n 2 > temp.txt && mv temp.txt file.txt

update-alternatives

简书 蚂蚁少儿编程

update-alternatives 命令用于处理 Linux 系统中软件版本的切换,使其多版本共存。通过软链接的方式对版本进行管理。

该命令很简单但是作用很大,最典型的用法就是linux中的python版本管理,当然也可以用anaconda,但是update-alternative还可以用于其他软件的版本管理

  • display 参数显示关于 Python 替换组的信息:update-alternatives --display python
  • config 参数选择候选项:update-alternatives --config python
  • install 参数用于添加一个命令的link值:update-alternatives --install /usr/bin/python python /usr/bin/python2.7 2
  • remove 参数用于删除一个命令的link值,其附带的slave也将一起删除:update-alternatives –remove python /usr/bin/python2.7

信号相关命令

CSDN Happinesspills linux之信号

  • kill -l(前31个信号为常规信号,其余为实时信号)查看系统定义的信号列表
  • man 7 signal 查看信号的详细信息
  • ulimit -a 列出所有的参数选项

kill 可以使用程序名,:kill %python

可以使用ps命令、管道、grep和awk发送关闭信号:kill $(ps -a | grep chrome | awk '{print $1}')

CSDN 鸣凯维 linux下kill指令默认信号,Linux基础命令之kill命令

默认信号是SIGTERM

使用pkill可以使用进程名发送信号,基于正则匹配的方式,比如kill fire会将名字匹配fire的进程关闭,类似上面的组合命令但是更简单,推荐使用pkill

常用信号

  • SIGINT:程序终止信号。当用户按下CRTL+C时通知前台进程组终止进程。
  • SIGKILL:用来立即结束程序的运行。不能被捕捉、阻塞或忽略,只能执行默认动作。

vim

zhihu Flavin vim中的正则表达查找和替换

linux中国 Vim快捷键速查表

复制粘贴

  1. v选定文字,V选定行,ctrl+v选定块,选择的时候可以用13里面的光标跳转快捷键
  2. shift+方向键按单词移动光标
  3. d剪切,dd剪切1行,dn加方向键向上向下删除n+1行,dw删除光标所在位置往右一个单词如果是空白则删除所有空白,dG删除到文件末尾,d0删除到文件起始
  4. y复制,和d一样
  5. p粘贴,默认粘贴当前行
  6. u撤销
  7. ctrl+r 重做上一个操作,用于取消撤销
  8. :[range]s/from/to/[flags]:替换,flag:i大小写不敏感,I大小写敏感,g全局如果没有每行只能替换一次,c每次替换询问,range常用%
  9. :/word:搜索,n搜索下一个,N搜索上一个,也可以是?word
  10. :noh:取消高亮
  11. :set nu:显示行号
  12. :set nonu:不显示行号
  13. gg光标回到起点,G光标回到末尾,$行末,0行首
  14. ctrl+n提词器,重复按选下一个,ctrl+N网上回一个
  15. ctrl+e屏幕向下滚动一行,ctrl+y屏幕向上滚动一行
  16. 行号+enter:转到行号所在行
  17. 选定文字shift+>右缩进,shift+<左缩进
  18. ctrl+v选定块按I,在首行插入字符,按esc插入的字符会在选定的行都插入,可用于多行注释
  19. :set fileencoding 查看当前文件编码方式,对其赋值可以修改当前文件编码方式 : set fileencoding = xxx
  20. sp filename:垂直分割打开新窗口,filename为空则打开当前窗口
  21. vsp filename:水平分割
  22. close:关闭窗口,其实也可以用q
  23. ctrl+w :按 上下左右,切换窗口;按+-><增加减少高度和宽度,如果先输入数字会增加相应的行数;_垂直最大化,|水平最大化;=设置为相同大小
  24. %(shift+%) :找到对应的另一个括号

vimdiff

1
vimdiff a.txt b.txt

source

执行一遍shell脚本 通常用于覆盖配置:source ~/.bashrc

passwd

配置密码,配合sudo配置root密码

iperf测试网络状态

服务端

iperf -s

客户端

iperf -c 10.0.0.1

dpkg

菜鸟教程Linux 常用命令集合

安装debian系列操作系统的.deb软件,ubuntu是基于debian的

1
2
3
4
#安装
sudo dpkg -i /path/to/package.deb
# 卸载
sudo dpkg -r /path/to/package.deb

systemd

阮一峰的网络日志

https://www.ruanyifeng.com/blogimg/asset/2016/bg2016030703.png
systemd命令组

systemctl为系统的启动和管理提供一套完整的解决方案

系统管理

systemctl是 Systemd 的主命令,用于管理系统

  • sudo systemctl reboot:重启系统
  • sudo systemctl poweroff:关闭系统,切断电源
  • sudo systemctl halt:CPU停止工作
  • sudo systemctl suspend:暂停系统
  • sudo systemctl rescue:启动进入救援状态(单用户状态)

systemd-analyze命令用于查看启动耗时

  • systemd-analyze:查看启动耗时
  • systemd-analyze blame:查看每个服务的启动耗时
  • systemd-analyze critical-chain:显示瀑布状的启动过程流
  • systemd-analyze critical-chain atd.service:显示指定服务的启动流

hostnamectl命令用于查看当前主机的信息

  • hostnamectl:显示当前主机的信息
  • sudo hostnamectl set-hostname xxx:设置主机名

loginctl命令用于查看当前登录的用户

  • loginctl list-sessions:列出当前session
  • loginctl list-users:列出当前登录用户
  • loginctl show-user xxx:列出显示指定用户的信息

Unit

Systemd 可以管理所有系统资源。不同的资源统称为 Unit(单位)

systemctl list-units命令可以查看当前系统的所有 Unit:systemctl list-units --all

systemctl status命令用于查看系统状态和单个 Unit 的状态

  • systemctl status:显示系统状态
  • systemctl status bluetooth.service:显示单个 Unit 的状态
  • systemctl -H root@rhel7.example.com status httpd.service:显示远程主机的某个 Unit 的状态

启动和停止 Unit(主要是 service)

  • sudo systemctl start apache.service:立即启动一个服务
  • sudo systemctl stop apache.service:立即停止一个服务
  • sudo systemctl restart apache.service:重启一个服务
  • sudo systemctl kill apache.service:杀死一个服务的所有子进程
  • sudo systemctl daemon-reload:重载所有修改过的配置文件
  • sudo systemctl reload apache.service:重新加载一个服务的配置文件
  • systemctl show httpd.service:显示某个 Unit 的所有底层参数

Unit 之间存在依赖关系:A 依赖于 B,就意味着 Systemd 在启动 A 的时候,同时会去启动 B

  • systemctl list-dependencies –all nginx.service:列出一个 Unit 的所有依赖

Unit 的配置文件

每一个 Unit 都有一个配置文件,告诉 Systemd 怎么启动这个 Unit

Systemd 默认从目录/etc/systemd/system/读取配置文件,但是里面存放的大部分文件都是符号链接,指向目录/usr/lib/systemd/system/,真正的配置文件存放在那个目录,systemctl enable和systemctl disable命令用于在上面两个目录之间,建立和撤销符号链接关系(只有配置了WantedBy或RequiredBy的install区块的unit)。

你自己定义的unit配置文件可以手动添加到/etc/systemd/system/目录,来让systemd读取

配置文件的后缀名,就是该 Unit 的种类,比如sshd.socket,如果省略,Systemd 默认后缀名为.service

systemctl list-unit-files命令用于列出所有配置文件,–type参数列出指定类型

配置文件的状态,一共有四种:enabled已建立启动链接;disabled没建立启动链接;static该配置文件没有[Install]部分(无法执行),只能作为其他配置文件的依赖;masked该配置文件被禁止建立启动链接

配置文件的格式:

1
2
3
4
5
6
7
8
9
[Unit]
Description=ATD daemon

[Service]
Type=forking
ExecStart=/usr/bin/atd

[Install]
WantedBy=multi-user.target
  • [Unit]区块通常是配置文件的第一个区块,用来定义 Unit 的元数据,以及配置与其他 Unit 的关系
  • [Service]区块用来 Service 的配置,只有 Service 类型的 Unit 才有这个区块
  • [Install]通常是配置文件的最后一个区块,用来定义如何启动,以及是否开机启动(systemd开机默认会启动/etc/systemd/system里面的unit,配置了WantedBy或RequiredBy的unit在enable的时候会和前面说的一样自动建立符号链接,这样就能开机启动了)

Target

  • systemctl list-unit-files –type=target:查看当前系统的所有 Target
  • systemctl list-dependencies multi-user.target:查看一个 Target 包含的所有 Unit
  • systemctl get-default:查看启动时的默认 Target
  • sudo systemctl set-default multi-user.target:设置启动时的默认 Target
  • sudo systemctl isolate multi-user.target:关闭前一个 Target 里面所有不属于后一个 Target 的进程,启动后一个Target

Target 与 传统 init RunLevel 的对应关系如下

1
2
3
4
5
6
7
8
9
Traditional runlevel      New target name     Symbolically linked to...

Runlevel 0           |    runlevel0.target -> poweroff.target
Runlevel 1           |    runlevel1.target -> rescue.target
Runlevel 2           |    runlevel2.target -> multi-user.target
Runlevel 3           |    runlevel3.target -> multi-user.target
Runlevel 4           |    runlevel4.target -> multi-user.target
Runlevel 5           |    runlevel5.target -> graphical.target
Runlevel 6           |    runlevel6.target -> reboot.target
  1. 默认的 RunLevel(在/etc/inittab文件设置)现在被默认的 Target 取代,位置是/etc/systemd/system/default.target
  2. 启动脚本的位置,以前是/etc/init.d目录,符号链接到不同的 RunLevel 目录 (比如/etc/rc3.d、/etc/rc5.d等),现在则存放在/lib/systemd/system和/etc/systemd/system目录
  3. 配置文件的位置,以前init进程的配置文件是/etc/inittab,各种服务的配置文件存放在/etc/sysconfig目录。现在的配置文件主要存放在/lib/systemd目录,在/etc/systemd目录里面的修改可以覆盖原始设置

日志管理

可以只用journalctl一个命令,查看所有日志(内核日志和应用日志)

  • sudo journalctl:查看所有日志(默认情况下 ,只保存本次启动的日志)
  • sudo journalctl -k:查看内核日志(不显示应用日志)
  • sudo journalctl -b -0:查看系统本次启动的日志
  • sudo journalctl -b -1:查看上一次启动的日志(需更改设置)
  • sudo journalctl -f:实时滚动显示最新日志
  • sudo journalctl _PID=1:查看指定进程的日志
  • journalctl -u nginx.service -u php-fpm.service –since today:合并显示多个 Unit 的日志

alias

设置命令的别名,对于很长且常用的命令可以在.bashrc文件使用这个命令来定义别名

1
2
3
alias fatebash="docker container exec -it 2fe0497f6846 /bin/bash"
alias fatestart="docker container start 2fe0497f6846"
alias fatestop="docker container stop 2fe0497f6846"

CSDN weixin_33898876

alias默认不支持传参,可以使用alias定义一个函数来实现传参

1
alias tcstart='new() { /root/bin/tc-single-start "$1"; /root/bin/tclog "$1"; }; new'

export

在当前bash导出环境变量,当放到.bashrc文件时则每次启动bash都有该环境变量

1
export a="xxx"

free

查看内存使用情况

1
free

fdisk

此命令用于磁盘管理

查看所有磁盘使用情况

1
fdisk -l

df

此命令用于管理文件系统

查看文件系统的挂载点以及挂载点存储使用情况

1
df -h /

nautilus

打开文件资源管理器,常用命令:nautilus `pwd`

netstat和ss

CSDN 奋斗的啊强 Ubuntu常用命令[3]——netstat,systemctl,echo,chown

CSDN 云中漫步87 替代netstat的命令之一【ss】 使用实例

netstat和ss查看协议栈相关信息

尽量使用ss

1
ss [选项]
  • -a:显示所有套接字
  • -n:不解析服务名
  • -l:只显示监听套接字
  • -t:仅显示 TCP 套接字
  • -u:仅显示 UDP 套接字
  • -p:显示套接字使用的进程

最常用选项

1
2
3
4
# 全部
ss -anp
# 仅列举listen
ss -anpl

输出

  • Netid:套接字的类型
  • state:套接字的状态
  • Recv-Q:连接到此套接字的用户程序未复制的字节数
  • Send-Q:远程主机未确认的字节数

ps

百度百科

1
ps -aux

通常和三剑客一起使用

查看父进程

1
ps -O ppid

ps中5种进程状态

  1. R运行状态(正在运行或就绪)
  2. S中断状态(休眠中, 等待某个条件的形成或接受到信号)
  3. U不可中断状态(收到信号不唤醒和不可运行, 必须等中断发生)
  4. Z僵死状态(进程已停止, 但进程描述符存在, 直到父进程调用wait4()系统调用后释放)
  5. T停止状态(收到SIGSTOP, SIGSTP, SIGTIN, SIGTOU信号后停止运行)

pstree

pstree查看进程树

1
2
# 查看pid 为n的进程树
pstree -p n

find

查找文件并进行相应的操作,复制删除等 ƒ

1
2
3
find [path] [expression]
# 常用
find . -name 'xxx'

选项

  • -name:按照文件名匹配文件
  • -type:按照文件类型匹配文件,如 -type f 表示查找普通文件,-type d 表示查找目录
  • -size:按照文件大小匹配文件,如-size +1M
  • -mtime:按照修改时间匹配文件
  • -exec:对查找到的文件执行指定的命令

top

微信公众号 网络工程师俱乐部

CSDN ghimi top 命令使用教程

top命令经常用来监控linux的系统状况,能够通过读取/proc/stat文件实时显示系统中各个进程的资源占用情况

选项

  • -d:刷新间隔,单位为秒
  • -p:指定特定的pid进程号进行观察
  • -bn:按批次执行top

显式页面操作

  • ?:所有命令
  • P:以CPU的使用资源排序进程
  • M:以内存
  • m:显示内存详情
  • N:以pid
  • T:以使用时间
  • k:给pid发送信号
  • r:给pid一个nice值
  • q:退出
  • 1:显示和关闭CPU每个核心的状态
  • o:过滤,比如PID>100
  • Ctrl+o 显示当前生效的过滤器
  • = 重置当前窗口的过滤器
  • + 重置全部窗口的过滤器

列信息

  • pr,ni:优先级
  • virt:虚拟内存
  • res:物理内存
  • shr:共享内存

sar

CSDN 上单carrry sar命令详解

sar命令用于监控系统资源如CPU,内存,磁盘,IO和网络

命令格式:sar -类型 类型参数 采集间隔 采集次数

  • -o:保存结果
  • -f:读取结果

CPU

  • sar -u 1 3 :实时采集系统CPU负载
  • sar -p:查看当天的数据
  • sar -q 1 3 :实时采集进程CPU负载

内存

  • sar -r 1 3:系统内存负载
  • sar -W 1 3:进程内存负载

I/O和传送速率监控与磁盘使用情况

  • sar -b 1 3:设备IO信息
  • sar -d 1 3 -p:设备磁盘负载也有IO信息

网络

  • sar -n DEV 1 3

ab

ab 可以进行压力测试

1
ab -c 客户端数 -n 总请求数 目标地址

lsof

查看打开的文件描述符

1
lsof -np pid

iptables

用于控制linux内核的netfilter防火墙

基础概念

CSDN 腾讯数据架构师 iptable详解概念

朱双印个人日志

/images/操作系统/linux/常用命令/iptable.png

这五个处理阶段都有自己的规则链,所以处理阶段也可以被称作链,规则其实就是匹配表

可以自定义链,自定义链只能被默认链引用来使用

默认定义的表有4种

  • filter表:负责过滤功能,防火墙;内核模块:iptables_filter
  • nat表:network address translation,网络地址转换功能;内核模块:iptable_nat
  • mangle表:拆解报文,做出修改,并重新封装 的功能;iptable_mangle
  • raw表:关闭nat表上启用的连接追踪机制;iptable_raw

链对应的规则表类型

  • PREROUTING 的规则可以存在于:raw表,mangle表,nat表
  • INPUT 的规则可以存在于:mangle表,filter表,(centos7中还有nat表,centos6中没有)
  • FORWARD 的规则可以存在于:mangle表,filter表
  • OUTPUT 的规则可以存在于:raw表mangle表,nat表,filter表
  • POSTROUTING 的规则可以存在于:mangle表,nat表

表的条目中

  1. 匹配条件分为基本匹配条件与扩展匹配条件:基本匹配条件有源地址Source IP,目标地址 Destination IP,扩展匹配条件有源端口Source Port, 目标端口Destination Port等
  2. 处理动作:ACCEPT:允许数据包通过;DROP:直接丢弃数据包,不给任何回应信息;REJECT:拒绝数据包通过,必要时会给数据发送端一个响应的信息;SNAT:源地址转换,解决内网用户用同一个公网地址上网的问题等

具体命令

列举表条目

  • iptables -t 表名
  • iptables -L 链名
  • iptables -t 表名 -L 链名

特殊选项

  • -v:表示verbose,表示详细的,冗长的,当使用-v选项时,会显示出”计数器”的信息
  • -n:表示不解析IP地址
  • -x:表示显示计数器的精确值

规则管理

  • -F:清空链的规则
  • -I:添加规则,需要指明匹配条件和动作,比如iptables -t filter -I INPUT -s 192.168.1.146 -j DROP,-s为source之意,表示源地址,-j选项,指明当”匹配条件”被满足时,所对应的动作,添加序号可以在指定规则后面添加iptables -t 表名 -I 链名 规则序号 匹配条件 -j 动作
  • -D:删除规则,根据表种规则的序号删除对应规则
  • -R:修改规则,根据序号
  • -P:修改默认规则

保存规则

  • service iptables save:使规则永久生效,保存到/etc/sysconfig/iptables,也可以使用iptables-save > /etc/sysconfig/iptables
  • iptables-restore:从文件重载规则,iptables-restore < /etc/sysconfig/iptables

file

查看文件类型

1
file path/to/file

perf

博客园 寒冰宇若

查看系统性能,硬件事件或软件事件

1
Perf top

history

查看历史命令,和grep一起用

1
history | grep xxx

nsenter

进入子namespace,但是可以运行本地的命令

1
nsenter --net=nsid

dd和hexdump

将磁盘的某块dump下来查看内容

mkdir

1
2
//-p 生成子文件夹
mkdir -p xxx/yyy

chmod

在Linux中,可以使用chmod命令为文件或目录添加文件操作权限标记,这些标记通常由字母组成,表示不同的用户或用户组的权限。以下是一些常见的文件操作权限标记及其含义:

  1. u:代表文件的所有者(用户)。
  2. g:代表文件的所属组。
  3. o:代表其他用户。
  4. a:代表所有用户,即所有者、所属组和其他用户。

这些权限标记可以与操作符结合使用,操作符包括:

  • +:添加权限。
  • -:移除权限。
  • =:设置权限(用指定的权限完全替代原有权限)。

然后,您可以为每个权限标记分配不同的权限:

  • r:读权限。
  • w:写权限。
  • x:执行权限。

以下是一些示例,说明如何使用这些权限标记为文件添加权限:

  1. 为文件 example.txt 的所有者添加读权限:

    1
    
    chmod u+r example.txt
    
  2. 为文件 example.txt 的所属组添加写权限:

    1
    
    chmod g+w example.txt
    
  3. 为文件 example.txt 的其他用户添加执行权限:

    1
    
    chmod o+x example.txt
    
  4. 为文件 example.txt 的所有用户同时添加读、写、执行权限:

    1
    
    chmod a+rwx example.txt
    

请根据需要选择适当的权限标记和操作符,以及要分配的权限,以确保文件的访问权限满足您的需求。

 |