Linux常用命令for QA-数据脱敏版2

由于博客官网存在图片上传失败的bug  https://blogdev.blog.csdn.net/article/details/94006575   故此我之前的【Linux常用命令】的博客不可以编辑了https://blog.csdn.net/weixin_42498050/article/details/81037479,故此新建个博客吧~~

8. 批量替换文件夹子文件夹的文件xx为yy

sed -i 's/xx/yy/g' `grep xx -rl ./`

注:后面为esc下面的` 不为'

 

7. linux命令统计文件中某个字符串出现的次数

用vim打开目标文件,在命令模式下,输入::%s/object/&/gn

&代表s// 搜索出来的内容
g代表全局替换(而非仅仅当前行)
n代表不执行,只是预览一下会有什么情况发生

执行前效果和执行后效果如图所示:

:%s/xx/&/gn

非vim模式:

zgrep -c 'xx' 1.txt

grep -c 'xx' 1.txt

grep 'xx' 1.txt |wc -l

6. top命令

用 'top -i' 看看有多少进程处于 Running 状态,可能系统存在内存或 I/O 瓶颈,用 free 看看系统内存使用情况,swap 是否被占用很多,用 iostat 看看 I/O 负载情况...

还有一种办法是 ps -ef | sort -k7 ,将进程按运行时间排序,看哪个进程消耗的cpu时间最多

free
1.作用
free命令用来显示内存的使用情况,使用权限是所有用户


**2.格式 **

free [-b-k-m] [-o] [-s delay] [-t] [-V] 

**3.主要参数 **

-b -k -m -g:分别以字节(KB、MB、GB)为单位显示内存使用情况。 
-s delay:显示每隔多少秒数来显示一次内存使用情况。 
-t:显示内存总和列。 
-o:不显示缓冲区调节列。 

uptime

18:59:15 up 25 min, 2 users, load average: 1.23, 1.32, 1.21 
现在的时间 
系统开机运转到现在经过的时间 
连线的使用者数量 
最近一分钟,五分钟和十五分钟的系统负载 
参数: -V 显示版本资讯。 

vmstat

procs -----------memory---------- ---swap-- -----io---- --system-- ----cpu---- 
r b swpd free buff cache si so bi bo in cs us sy id wa 
0 1 24980 10792 8296 47316 5 19 205 52 1161 698 26 3 1 70 

**1 观察磁盘活动情况 **
磁盘活动情况主要从以下几个指标了解:

bi:表示从磁盘每秒读取的块数(blocks/s)。数字越大,表示读磁盘的活动越多。 
bo:表示每秒写到磁盘的块数(blocks/s)。数字越大,表示写磁盘的活动越多。 
wa:cpu等待磁盘I/O(未决的磁盘IO)的时间比例。数字越大,表示文件系统活动阻碍cpu的情况越严重,因为cpu在等待慢速的磁盘系统提供数据。wa为0是最理想的。如果wa经常大于10,可能文件系统就需要进行性能调整了。 

**2 观察cpu活动情况 **
vmstat比top更能反映出cpu的使用情况:

us:用户程序使用cpu的时间比例。这个数字越大,表示用户进程越繁忙。 
sy: 系统调用使用cpu的时间比例。注意,NFS由于是在内核里面运行的,所以NFS活动所占用的cpu时间反映在sy里面。这个数字经常很大的话,就需要注 意是否某个内核进程,比如NFS任务比较繁重。如果us和sy同时都比较大的话,就需要考虑将某些用户程序分离到另外的服务器上面,以免互相影响。 
id:cpu空闲的时间比例。 
wa:cpu等待未决的磁盘IO的时间比例。 

iostat
用于统计CPU的使用情况及tty设备、硬盘和CD-ROM的I/0量

查看RAM使用情况最简单的方法是通过/proc/meminfo。这个动态更新的虚拟文件实际上是许多其他内存相关工具(如:free / ps / top)等的组合显示。/proc/meminfo列出了所有你想了解的内存的使用情况。进程的内存使用信息也可以通过/proc/<pid>/statm 和 /proc/<pid>/status 来查看

$ cat /proc/meminfo
MemTotal:        8388608 kB
MemFree:           19404 kB
MemAvailable:    8647836 kB
Buffers:               0 kB
Cached:          3883764 kB
SwapCached:            0 kB
Active:          6426584 kB
Inactive:        1942564 kB
Active(anon):    4485496 kB
Inactive(anon):     1008 kB
Active(file):    1941088 kB
Inactive(file):  1941556 kB
Unevictable:           0 kB
Mlocked:               0 kB
SwapTotal:             0 kB
SwapFree:              0 kB
Dirty:             16880 kB
Writeback:             0 kB
AnonPages:      114106472 kB
Mapped:          3026292 kB
Shmem:            301604 kB
Slab:            7141536 kB
SReclaimable:    6245764 kB
SUnreclaim:       895772 kB
KernelStack:      350208 kB
PageTables:       484640 kB
NFS_Unstable:          0 kB
Bounce:                0 kB
WritebackTmp:          0 kB
CommitLimit:    98901520 kB
Committed_AS:   273028180 kB
VmallocTotal:   34359738367 kB
VmallocUsed:      714472 kB
VmallocChunk:   34358872316 kB
HardwareCorrupted:     0 kB
AnonHugePages:         0 kB
HugePages_Total:       0
HugePages_Free:        0
HugePages_Rsvd:        0
HugePages_Surp:        0
Hugepagesize:       2048 kB
DirectMap4k:      343960 kB
DirectMap2M:    41486336 kB
DirectMap1G:    161480704 kB

 

5. 根据端口号查找进程号查找程序路径

netstat -nlp | grep 端口号

如下图所示,查询28180端口对应的进程PID-netstat -nlp | grep 28180

得到的8161就是进程PID

然后通过下面命令查询对应的程序路径

ll /proc/进程号/cwd

cwd — 指向当前进程运行目录的一个符号链接 

exe — 指向启动当前进程的可执行文件(完整路径)的符号链接,通过/proc/N/exe可以启动当前进程的一个拷贝 

 

4 .在文件最后一列加,逗号

sed 's/$/\,/g' a.txt   

sed 's/$/\,/g' -i a.txt

或者不需要转义   sed 's/$/,/g' a.txt

"^"代表行首,"$"代表行尾

字符g代表每行出现的字符全部替换

如果想导出文件,在命令末尾加"> outfile_name"

sed 's/$/,/g' a.txt > b.txt

vim模式:

:%s/$/,/g

3. 去除文件第一列和最后一列

 了解 Hadoop,Hive,Hbase。
 了解前端技术 html,css 和 javascript 以及基本的使用。
 熟练掌握core Java 。

以上文本想实现效果:

了解 Hadoop,Hive,Hbase
了解前端技术 html,css 和 javascript 以及基本的使用
 熟练掌握core Java

sed -e "s/ /""/g" -e "s/。/""/g" 1.txt   

-e :直接在命令行模式上进行sed动作编辑,此为默认选项  -e : 可以在同一行里执行多条命令

awk '{$1="";print $0}' 1.txt   去除第一列

公司解析简历的系统很。。。。。。。
去除文件的第一列以及最后一列

sed -e "s/[^ ] /""/g" -e "s/。/""/g" 1.txt  

2. Mac下解压rar文件

使用Homebrew安装unrar(有关Homebrew的安装和使用见Homebrew)

brew install unrar  

unrar x filename.rar

1. 打开自动化运行后的测试报告,除了直接在idea中右击report.html文件Reveal in Finder外,还可以Copy Path,在iterm中用命令打开。不是说这个有多难,而是换一种思维方式,多种方法思考问题

open /Users/lishan/Desktop/code/UICheck/report.html

 

统计文件夹下文件个数

ls -LR|grep -i 'jpg'|wc -l

ls |grep -i 'jpg'|wc -l

参考ls博客:https://blog.csdn.net/zhouxiangbai/article/details/80510834

-L 列出链接文件名而不是链接到的文件。 
-N 不限制文件长度。 
-Q 把输出的文件名用双引号括起来。 
-R 列出所有子目录下的文件。 
-S 以文件大小排序。 
-X 以文件的扩展名(最后一个 . 后的字符)排序。 
-1 一行只输出一个文件

 

xattr 复制的文件属性去除  发现复制或者下载的文件属性为-rw-------@

这里的@貌似是mac特有的,第一次使用file_put_contents往根目录添加文件成功,
再次添加就提示
failed to open stream: Permission denied

解决方法:
mac终端下执行
xattr -c -r *

 

 

执行完merge操作后,没有修改代码

1、命令

1. git reflog
查看merge操作的上一个提交记录的版本号

2. git reset –hard 版本号
这样可以回滚到merge之前的状态

2、示例
误将dev合并到了master分支,现要回滚merge操作
1. 首先git reflog
ee0ee93 HEAD@{0}: merge dev: Merge made by the ‘recursive’ strategy.
7335548 HEAD@{1}: checkout: moving from dev to master
可以看到需要回滚到 7335548 这个提交记录上

2. 执行git reset --hard 7335548
再次查看提交记录:
7335548 HEAD@{0}: reset: moving to 7335548
ee0ee93 HEAD@{1}: merge dev: Merge made by the ‘recursive’ strategy.

 

亲自实践:

master代码合并到自己的分支clientreq,但想回滚 

git reflog
git reset --hard d91b25a
 

 

统计字符串出现次数Linux

这里统计某个字符串在文件里出现的次数使用到了-c参数,请见下图案例:

语法:grep -c  'object'   fileName

 

如何通过端口查找出进程所在目录?

一、找到端口对应的进程的号(PID)

[root@benbang ~]# ss -lntup|grep 6379
tcp    LISTEN     0      511    127.0.0.1:6379                  *:*                   users:(("redis-server",pid=914,fd=6))

二、显示/proc/进程号/cwd

cwd符号链接的是进程运行的目录

[root@benbang ~]# ll /proc/914/cwd
lrwxrwxrwx 1 redis redis 0 Aug  1 15:53 /proc/914/cwd -> /usr/local/redis/var

exe符号链接的是执行程序的绝对路径;

[root@benbang ~]# ll /proc/914/exe 
lrwxrwxrwx 1 redis redis 0 Jul 22 21:57 /proc/914/exe -> /usr/local/redis/bin/redis-server

cmdline就是程序运行时输入的命令行命令;
environ记录了进程运行时的环境变量;
fd目录下是进程打开或使用的文件的符号连接

复制代码

[root@benbang ~]# ll /proc/914/fd
total 0
lrwx------ 1 redis redis 64 Jul 22 21:58 0 -> /dev/null
lrwx------ 1 redis redis 64 Jul 22 21:58 1 -> /dev/null
lrwx------ 1 redis redis 64 Jul 22 21:58 2 -> /dev/null
lr-x------ 1 redis redis 64 Jul 22 21:58 3 -> pipe:[13725]
l-wx------ 1 redis redis 64 Jul 22 21:58 4 -> pipe:[13725]
lrwx------ 1 redis redis 64 Jul 22 21:58 5 -> anon_inode:[eventpoll]
lrwx------ 1 redis redis 64 Jul 22 21:58 6 -> socket:[13739]

 

1、lsof -i

lsof(list open files)是一个列出当前系统打开文件的工具。在linux环境下,任何事物都以文件的形式存在,通过文件不仅仅可以访问常规数据,还可以访问网络连接和硬件。所以如传输控制协议 (TCP) 和用户数据报协议 (UDP) 套接字等,系统在后台都为该应用程序分配了一个文件描述符,无论这个文件的本质如何,该文件描述符为应用程序与基础操作系统之间的交互提供了通用接口。因为应用程序打开文件的描述符列表提供了大量关于这个应用程序本身的信息,因此通过lsof工具能够查看这个列表对系统监测以及排错将是很有帮助的。

COMMAND     PID        USER   FD      TYPE             DEVICE SIZE/OFF       NODE NAME init          1        root  cwd       DIR                8,1     4096          2 / init          1        root  rtd       DIR                8,1     4096          2 / init          1        root  txt       REG                8,1   150584     654127 /sbin/init udevd       415        root    0u      CHR                1,3      0t0       6254 /dev/null udevd       415        root    1u      CHR                1,3      0t0       6254 /dev/null udevd       415        root    2u      CHR                1,3      0t0       6254 /dev/null udevd       690        root  mem       REG                8,1    51736     302589 /lib/x86_64-linux-gnu/libnss_files-2.13.so syslogd    1246      syslog    2w      REG                8,1    10187     245418 /var/log/auth.log syslogd    1246      syslog    3w      REG                8,1    10118     245342 /var/log/syslog dd         1271        root    0r      REG                0,3        0 4026532038 /proc/kmsg dd         1271        root    1w     FIFO               0,15      0t0        409 /run/klogd/kmsg dd         1271        root    2u      CHR                1,3      0t0       6254 /dev/null

 

 详细了解lsof,可以参考:https://www.cnblogs.com/sparkbj/p/7161669.html

2、netstat命令是一个监控TCP/IP网络的非常有用的工具,它可以显示路由表、实际的网络连接以及每一个网络接口设备的状态信息

     netstat -tunlp 显示tcp,udp的端口和进程等相关情况

     netstat -anp 也可以显示系统端口使用情况

netstat [选项]
 
-a或--all:显示所有连线中的Socket; 
-A<网络类型>或--<网络类型>:列出该网络类型连线中的相关地址; 
-c或--continuous:持续列出网络状态; 
-C或--cache:显示路由器配置的快取信息; 
-e或--extend:显示网络其他相关信息; 
-F或--fib:显示FIB; 
-g或--groups:显示多重广播功能群组组员名单; 
-h或--help:在线帮助; 
-i或--interfaces:显示网络界面信息表单; 
-l或--listening:显示监控中的服务器的Socket; 
-M或--masquerade:显示伪装的网络连线; 
-n或--numeric:直接使用ip地址,而不通过域名服务器; 
-N或--netlink或--symbolic:显示网络硬件外围设备的符号连接名称; 
-o或--timers:显示计时器; 
-p或--programs:显示正在使用Socket的程序识别码和程序名称; 
-r或--route:显示Routing Table; 
-s或--statistice:显示网络工作信息统计表; 
-t或--tcp:显示TCP传输协议的连线状况; 
-u或--udp:显示UDP传输协议的连线状况; 
-v或--verbose:显示指令执行过程; 
-V或--version:显示版本信息; 
-w或--raw:显示RAW传输协议的连线状况; 
-x或--unix:此参数的效果和指定"-A unix"参数相同; 
--ip或--inet:此参数的效果和指定"-A inet"参数相同。
方法1: lsof -i 用以显示符合条件的进程情况,lsof(list open files)是一个列出当前系统打开文件的工具。

            以root用户来执行lsof -i命令,如下:

[root@hadoop01 yum.repos.d]# lsof -i
COMMAND     PID    USER   FD   TYPE DEVICE SIZE/OFF NODE NAME
rpcbind    1873     rpc    6u  IPv4  15228      0t0  UDP *:sunrpc 
rpcbind    1873     rpc    7u  IPv4  15230      0t0  UDP *:wpages 
rpcbind    1873     rpc    8u  IPv4  15231      0t0  TCP *:sunrpc (LISTEN)
rpcbind    1873     rpc    9u  IPv6  15233      0t0  UDP *:sunrpc 
rpcbind    1873     rpc   10u  IPv6  15235      0t0  UDP *:wpages 
rpcbind    1873     rpc   11u  IPv6  15236      0t0  TCP *:sunrpc (LISTEN)
rpc.statd  2017 rpcuser    5r  IPv4  15556      0t0  UDP *:921 
rpc.statd  2017 rpcuser    8u  IPv4  15563      0t0  UDP *:32846 
rpc.statd  2017 rpcuser    9u  IPv4  15567      0t0  TCP *:42335 (LISTEN)
rpc.statd  2017 rpcuser   10u  IPv6  15571      0t0  UDP *:41231 
rpc.statd  2017 rpcuser   11u  IPv6  15575      0t0  TCP *:56522 (LISTEN)
cupsd      2072    root    6u  IPv6  15795      0t0  TCP localhost:ipp (LISTEN)

nginx     11914  nobody   11u  IPv4  35803      0t0  TCP *:distinct (LISTEN)
 加端口号,查看端口被谁占用

lsof -i:端口号
例如:

注意:这里的9999端口是我自己打开的一个,前面博客提到过,如果自己没有此端口,请更换端口号

[root@hadoop01 yum.repos.d]# lsof -i:9999
COMMAND   PID   USER   FD   TYPE DEVICE SIZE/OFF NODE NAME
nginx    3953   root   11u  IPv4  35803      0t0  TCP *:distinct (LISTEN)
nginx   11914 nobody   11u  IPv4  35803      0t0  TCP *:distinct (LISTEN)
 

方法2: netstat -tunlp命令用于显示tcp,udp的端口和进程等相关情况

[root@hadoop01 yum.repos.d]# netstat -tunpl
Active Internet connections (only servers)
Proto Recv-Q Send-Q Local Address               Foreign Address             State       PID/Program name   
tcp        0      0 0.0.0.0:9999                0.0.0.0:*                   LISTEN      3953/nginx          
tcp        0      0 0.0.0.0:111                 0.0.0.0:*                   LISTEN      1873/rpcbind        
tcp        0      0 0.0.0.0:22                  0.0.0.0:*                   LISTEN      2191/sshd           
tcp        0      0 127.0.0.1:631               0.0.0.0:*                   LISTEN      2072/cupsd          
tcp        0      0 127.0.0.1:6010              0.0.0.0:*                   LISTEN      11504/sshd          
tcp        0      0 127.0.0.1:6011              0.0.0.0:*                   LISTEN      11716/sshd          
tcp        0      0 0.0.0.0:42335               0.0.0.0:*                   LISTEN      2017/rpc.statd      
tcp        0      0 0.0.0.0:3306                0.0.0.0:*                   LISTEN      2379/mysqld         
tcp        0      0 :::111                      :::*                        LISTEN      1873/rpcbind        
tcp        0      0 :::22                       :::*                        LISTEN      2191/sshd           
tcp        0      0 ::1:631                     :::*                        LISTEN      2072/cupsd          
tcp        0      0 ::1:6010                    :::*                        LISTEN      11504/sshd          

netstat -tunlp 会显示所有端口和所有对应的程序,用grep管道可以过滤出想要的关键字段,

列一下9999端口占用的程序:

注意:这里的9999端口是我自己打开的一个,前面博客提到过,如果自己没有此端口,请更换端口号

netstat -tunplp | grep 端口号
例如:

[root@hadoop01 yum.repos.d]# netstat -tunplp | grep 9999
tcp        0      0 0.0.0.0:9999                0.0.0.0:*                   LISTEN      3953/nginx  
使用netstat -anp进行查看

[root@hadoop01 yum.repos.d]# netstat -anp|grep 9999
tcp        0      0 0.0.0.0:9999                0.0.0.0:*                   LISTEN      3953/nginx  
所以这两种方法都可以查看。
 

 

待续

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章