由于博客官网存在图片上传失败的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下面的` 不为'
用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
所以这两种方法都可以查看。
待续