Linux 命令

more 分页显示大文本文件

格式:

  more [-OPTION] [FILE]

参数:

  -f:强制打开特殊文件,如目录或二进制文件

  -n:每页行数。(可以理解为每按一下空格,跳转的行数)

  +n:从第n行开始显示

  -s:将连续空行显示为一行

  +/pattern: 搜索字符串(pattern), more的搜索功能好难用,还是用less的吧。

操作:

  空格键:下一页

  Enter:向下一行

  q:退出

less 分页显示大文本文件,支持后退到上一页

格式:

  less [-OPTION] [FILE]

参数:

  -f:强制打开特殊文件,如目录或二进制文件

  -i: 忽略搜索时的大小写

  -s:将连续空行显示为一行

  -N:显示行号

操作:

  空格键:向下滚动一页

  Enter:向下滚动一行

  pageup:向上滚动一页

  pagedown:向下滚动一页

  ?:向上搜索字符串

  /:向下搜索字符串

  n:上一个搜索结果

  N:下一个搜索结果

more和less区别

  1.  less可以按键盘上下方向键显示上下内容,more不能通过上下方向键控制显示

  2.  less不必读整个文件,加载速度会比more更快

  3.  less退出后shell不会留下刚显示的内容,而more退出后会在shell上留下刚显示的内容

firewall防火墙相关命令

firewall-cmd --state ##查看防火墙状态,是否是running
firewall-cmd --reload ##重新载入配置,比如添加规则之后,需要执行此命令
firewall-cmd --get-zones ##列出支持的zone
firewall-cmd --get-services ##列出支持的服务,在列表中的服务是放行的
firewall-cmd --query-service ftp ##查看ftp服务是否支持,返回yes或者no
firewall-cmd --add-service=ftp ##临时开放ftp服务
firewall-cmd --add-service=ftp --permanent ##永久开放ftp服务
firewall-cmd --remove-service=ftp --permanent ##永久移除ftp服务
firewall-cmd --add-port=80/tcp --permanent ##永久添加80端口
iptables -L -n ##查看规则,这个命令是和iptables的相同的
man firewall-cmd ##查看帮助
systemctl status firewalld.service ##查看防火墙状态
systemctl [start|stop|restart] firewalld.service ##启动|关闭|重新启动 防火墙

##查询端口号80 是否开启
firewall-cmd --query-port=80/tcp

nohup

nohup命令用于不挂断地运行命令(关闭当前session不会中断改程序,只能通过kill等命令删除)。
使用nohup命令提交作业,那么在缺省情况下该作业的所有输出都被重定向到一个名为nohup.out的文件中,除非另外指定了输出文件。

&

&用于后台执行程序,但是关闭当前session程序也会结束

2>&1

bash中:

  • /dev/null 表示空设备文件(详解
  • 0 代表STDIN_FILENO 标准输入(一般是键盘),
  • 1 代表STDOUT_FILENO 标准输出(一般是显示屏,准确的说是用户终端控制台),
  • 2 三代表STDERR_FILENO (标准错误(出错信息输出)。

2>&1就是用来将标准错误2重定向到标准输出1中的。此处1前面的&就是为了让bash将1解释成标准输出而不是文件1。

网络分析 - tcpdump \ telnet \ (netstat \ ss \ lsof) \ nload

netstat  

常用参数

-a (all) 显示所有选项,默认不显示LISTEN相关。
-t (tcp) 仅显示tcp相关选项。
-u (udp) 仅显示udp相关选项。
-n 拒绝显示别名,能显示数字的全部转化成数字。
-l 仅列出有在 Listen (监听) 的服务状态。

-p 显示建立相关链接的程序名
-r 显示路由信息,路由表
-e 显示扩展信息,例如uid等
-s 按各个协议进行统计
-c 每隔一个固定时间,执行该netstat命令。

LISTEN和LISTENING的状态只有用-a或者-l才能看到

ss ( Socket Statistics)

ss 命令可以用来获取 socket 统计信息,它显示的内容和 netstat 类似。但 ss 的优势在于它能够显示更多更详细的有关 TCP 和连接状态的信息,而且比 netstat 更快。

  • ss -pl 查看每个进程及其监听的端口

  • ss -t -a 查看所有的tcp连接

  • ss -u -a 查看所有的udp连接

lsof(list open files)

 是一个列出当前系统打开文件的工具

命令参数:

-a 列出打开文件存在的进程

-c<进程名> 列出指定进程所打开的文件

-g  列出GID号进程详情

-d<文件号> 列出占用该文件号的进程

+d<目录>  列出目录下被打开的文件

+D<目录>  递归列出目录下被打开的文件

-n<目录>  列出使用NFS的文件

-i<条件>  列出符合条件的进程。(4、6、协议、:端口、 @ip )

-p<进程号> 列出指定进程号所打开的文件

-u  列出UID号进程详情

-h 显示帮助信息

-v 显示版本信息

lsof输出各列信息的意义如下:

COMMAND:进程的名称
PID:进程标识符
USER:进程所有者
FD:文件描述符,应用程序通过文件描述符识别该文件。如cwd、txt等
TYPE:文件类型,如DIR、REG等
DEVICE:指定磁盘的名称
SIZE:文件的大小
NODE:索引节点(文件在磁盘上的标识)
NAME:打开文件的确切名称

列出谁在使用某个端口

命令:lsof -i :3306

 网络传输 - scp \ rsync \ (rz \ sz) \ nc

内存检查 - free \ meminfo

系统监控 - vmstat \ iostat \ top \ ps \ sar \ dstat

top

 

 

第一行:系统运行信息,显示系统运行当前时间是16:51分,系统运行了34days,当前有2个用户登录,系统平均负载压力情况为0.46(1min的平均负载压力)、0.9.0(5min的平均负载压力)、0.9.0(15min的平均负载压力)
注:load average:每隔5s检查一次活跃的进程数,然后按特定算法计算出来的。一般当这个数值除以CPU的核数得到的值大于3~5时,就标明系统的负载压力已经很高了。
第二行:显示的是任务信息,总共256个进程,1个进程正在执行,255个进程正在休眠,0个进程停止,0个进程假死
第三行:显示的是CPU运行信息,3.5us表示用户模式下CPU占比为3.5%,1.0sy标识系统模式下CPU占比1.0%,0.0ni表示改变过优先级的进程的CPU占比为0.0%,93.3id表示空闲状态的CPU占比为93.3%,2.1wa表示因为I/O等待造成的CPU占用比为2.1%,0.0st表示CPU等待虚拟机调度的时间占比,这个指标一般在虚拟机中才有,在物理机中该值一般为0
第四行:显示的是内存信息,16343540 total显示的是物理内存总量,16144616 used显示已使用的物理内存,198924 free表示空闲物理内存,171348 buffers 表示用于缓存内存大小,以上单位都是kb
第五行:显示虚拟内存使用信息,29355004 total 表示虚拟内存空间总大小,504536 used 表示虚拟内存使用大小,28850468 free 表示空闲虚拟内存,11936408 cached Mem表示缓存虚拟内存,以上单位都是kb

 第六行:

列说明

序号列名含义
a PID 进程id
b PPID 父进程id
c RUSER Real user name
d UID 进程所有者的用户id
e USER 进程所有者的用户名
f GROUP 进程所有者的组名
g TTY 启动进程的终端名。不是从终端启动的进程则显示为 ?
h PR 优先级
i NI nice值。越小优先级越高,最小-20,最大20(用户设置最大19)
j P 最后使用的CPU,仅在多CPU环境下有意义
k %CPU 上次更新到现在的CPU时间占用百分比
l TIME 进程使用的CPU时间总计,单位秒
m TIME+ 进程使用的CPU时间总计,单位1/100秒
n %MEM 进程使用的物理内存百分比
o VIRT 进程使用的虚拟内存总量,单位kb。VIRT=SWAP+RES
p SWAP 进程使用的虚拟内存中,被换出的大小,单位kb
q RES 进程使用的、未被换出的物理内存大小,单位kb。RES=CODE+DATA
r CODE 可执行代码占用的物理内存大小,单位kb
s DATA 可执行代码以外的部分(数据段+栈)占用的物理内存大小,单位kb
t SHR 共享内存大小,单位kb
u nFLT 页面错误次数
v nDRT 最后一次写入到现在,被修改过的页面数
w S 进程状态
D:不可中断的睡眠状态
R:运行
S:睡眠
T:跟踪/停止
Z:僵尸进程
x COMMAND 命令名/命令行
y WCHAN 若该进程在睡眠,则显示睡眠中的系统函数名
z Flags 任务标志,参考 sched.h

 

vmstat

vmstat命令是最常见的Linux/Unix监控工具,可以展现给定时间间隔的服务器的状态值,包括服务器的CPU使用率,内存使用,虚拟内存交换情况,IO读写情况。

一般vmstat工具的使用是通过两个数字参数来完成的,第一个参数是采样的时间间隔数,单位是秒,第二个参数是采样的次数,如图没2s采样一次,直到停止

procs

r:运行队列中进程的数量,这些进程都是可运行状态,都在等待CPU的分配

  解释:当这个值超过了CPU数目,就会出现CPU瓶颈,如果运行队列过大,表示你的CPU很繁忙,一般会造成CPU使用率很高

b:被blocked(阻塞)的进程数,正在等待IO

memory

swpd:使用的虚拟内存的大小,单位是KB

  解释:如果该值大于0,表示你的机器物理内存不足了,如果不是程序内存泄露的原因,那么你该升级内存了或者把耗内存的任务迁移到其他机器

free:可用的物理内存大小,单位是KB

buff:物理内存用来缓存读写操作的buffer大小,单位是KB

cache:物理内存用来缓存进程地址空间的cache大小,单位是KB

swap

si(换入):每秒从SWAP(交换分区)读入到RAM(swap in)的大小,单位是KB

so(换出):每秒从RAM写出到SWAP(swap out)的大小,单位是KB

  解释:内存够用的时候,这2个值都是0,如果这2个值长期大于0时,系统性能会受到影响。有些朋友看到空闲内存(free)很少时,就认为内存不够用了,不能光看这一点,还要结合si和so,如果free很少,但是si和so也很少(大多时候是0),那么不用担心,系统性能这时不会受到影响。

io

bi:每秒从文件系统或SWAP读入到RAM(blocks in)的块数,block(1KB磁盘块)为单位

bo:每秒从RAM写出到文件系统或SWAP(blocks out)的块数,block(1KB磁盘块)为单位

  解释:随机磁盘读写的时候,这2个值越大(如超出1024k),能看到CPU在IO等待的值也会越大。

system

in:每秒的中断数

cs:系统每秒进行上下文切换的次数

  解释:cs表示每秒上下文切换的次数,例如,当我们调用系统函数,就要进行上下文切换;当进行线程的切换,也要进行上下文切换,这个值越小越好。例如在apache和nginx这种web服务器中,我们一般做性能测试时会进行几千并发甚至几万并发的测试,选择web服务器的进程可以由进程或者线程的峰值一直下调,压测,直到cs到一个比较小的值,这个进程或线程数就是比较合适的值了。系统调用也是如此,每次调用系统函数,我们的代码就会进入到内核空间(内核态),导致上下文切换,这个过程很耗资源,所以要尽量避免频繁的系统调用。上下文切换次数过多表示你的CPU大部分时间浪费在上下文切换中,导致CPU干正经事的时间少了。

cpu

us:用户空间占用CPU的百分比

  解释:us的值比较高时,说明用户进程消耗的CPU时间比较多,但是如果长期超过50%,那么我们就该考虑优化程序算法或者进行加速。

sy:内核空间占用CPU的百分比

  解释:sy的值高时,说明系统内核消耗的CPU资源多,这并不是良性表现,我们应该检查原因。

id:CPU空闲的百分比

wa:CPU等待IO的百分比

  解释:wa的值高时,说明CPU等待IO的时间比较多,这可能是大量的磁盘随机访问造成的,也有可能是磁盘出现瓶颈。

st:来自于虚拟机偷取的CPU所占的百分比

 

系统调用追踪 - strace \ gcore

文件相关 - find \ awk \ sed \ grep \ tail \ df \ du \ locate

awk

https://blog.csdn.net/bocai8058/article/details/82934177

du

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

du [-ahskm] 文件或目录名称

常用参数

-s : 列出总量而已,而不列出每个个别的目录占用容量 !!!!

-h : 以易读的方式(G/M)显示

-a : 列出所有的文件与目录容量,默认仅统计目录下的文件量

-S: 不包括目录下的总计,与-s 有差别

-k: 以KB列出容量显示

-m: 以MB列出容量显示

–exclude=<目录或文件> 略过指定的目录或文件
–max-depth=<目录层数> 超过指定层数的目录后,予以忽略

例:

1.查看当前目录下user目录的大小,并不想看其他目录以及其子目录:
  du -sh user
  -s表示总结的意思,即只列出一个总结的值
  du -h --max-depth=0 user
  –max-depth=n表示只深入到第n层目录,此处设置为0,即表示不深入到子目录

2.列出当前目录中的目录名不包括xyz字符串的目录的大小:
  du -h --exclude=‘xyz

3.查看各文件夹大小:du -h --max-depth=1

df

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

df [-ahikHTm] [目录或者文件夹]

参数:

-h : 以交较易识别的方式展示使用量 1111000KB -> XXXMB , 默认以KB的方式显示

-i : 不使用磁盘容量,用inode 的数量来显示

-a : 列出所有的文件系统, 包括系统特有的 /proc 等文件系统

-k : 以KB的容量显示 文件系统 (默认)

-m: 以MB的容量显示 文件系统

-H : 以 1000的进制代替1024的进制方式

-T : 连同该分区的文件系统的名称(ext3)等也列出

开发效率 - tmux

service network restart  重启网卡

dd

用指定大小的块拷贝一个文件,并在拷贝的同时进行指定的转换。

参数注释:

  1. if=文件名:输入文件名,缺省为标准输入。即指定源文件。< if=input file >
  2. of=文件名:输出文件名,缺省为标准输出。即指定目的文件。< of=output file >
  3. ibs=bytes:一次读入bytes个字节,即指定一个块大小为bytes个字节。
    obs=bytes:一次输出bytes个字节,即指定一个块大小为bytes个字节。
    bs=bytes:同时设置读入/输出的块大小为bytes个字节。
  4. cbs=bytes:一次转换bytes个字节,即指定转换缓冲区大小。
  5. skip=blocks:从输入文件开头跳过blocks个块后再开始复制。
  6. seek=blocks:从输出文件开头跳过blocks个块后再开始复制。
    注意:通常只用当输出文件是磁盘或磁带时才有效,即备份到磁盘或磁带时才有效。
  7. count=blocks:仅拷贝blocks个块,块大小等于ibs指定的字节数。
  8. conv=conversion:用指定的参数转换文件。
    • ascii:转换ebcdic为ascii
    • ebcdic:转换ascii为ebcdic
    • ibm:转换ascii为alternate ebcdic
    • block:把每一行转换为长度为cbs,不足部分用空格填充
    • unblock:使每一行的长度都为cbs,不足部分用空格填充
    • lcase:把大写字符转换为小写字符
    • ucase:把小写字符转换为大写字符
    • swab:交换输入的每对字节
    • noerror:出错时不停止
    • notrunc:不截短输出文件
    • sync:将每个输入块填充到ibs个字节,不足部分用空(NUL)字符补齐。

实例:

1.将本地的/dev/hdb整盘备份到/dev/hdd      dd if=/dev/hdb of=/dev/hdd

2.销毁磁盘数据    dd if=/dev/urandom of=/dev/hda1  ( /dev/urandom 生成随机数据 详细说明  )

 历史命令使用技巧

  • !!:重复执行上条命令;
  • !N:重复执行 history 历史中第 N 条命令,N 可以通过 history 查看;
  • !pw:重复执行最近一次,以pw开头的历史命令,这个非常有用,小编使用非常高频;
  • !$:表示最近一次命令的最后一个参数;

!$ 使用例子

$ vim /root/sniffer/src/main.c
$ mv !$ !$.bak
# 相当于
$ mv /root/sniffer/src/main.c /root/sniffer/src/main.c.bak

快速搜索历史命令  Ctrl + r

 

sort

可针对文本文件的内容,以行为单位来排序。

语法

sort [-bcdfimMnr][-o<输出文件>][-t<分隔字符>][+<起始栏位>-<结束栏位>][--help][--verison][文件][-k field1[,field2]]

参数说明

  • -b 忽略每行前面开始出的空格字符。
  • -c 检查文件是否已经按照顺序排序。
  • -d 排序时,处理英文字母、数字及空格字符外,忽略其他的字符。
  • -f 排序时,将小写字母视为大写字母。
  • -i 排序时,除了040至176之间的ASCII字符外,忽略其他的字符。
  • -m 将几个排序好的文件进行合并。
  • -M 将前面3个字母依照月份的缩写进行排序。
  • -n 依照数值的大小排序。
  • -u 意味着是唯一的(unique),输出的结果是去完重了的。
  • -o<输出文件> 将排序后的结果存入指定的文件。
  • -r 以相反的顺序来排序。
  • -t<分隔字符> 指定排序时所用的栏位分隔字符。
  • +<起始栏位>-<结束栏位> 以指定的栏位来排序,范围由起始栏位到结束栏位的前一栏位。
  • --help 显示帮助。
  • --version 显示版本信息。
  • [-k field1[,field2]] 按指定的列进行排序。

sort 参数 详解:https://www.cnblogs.com/51linux/archive/2012/05/23/2515299.html

 

posted on 2021-09-28 10:25  无言寒冰  阅读(83)  评论(0编辑  收藏  举报