shell 常用
iterm2 分屏快捷键
command + t :新建窗口
command + d:垂直分屏
command + shift + d:水平分屏
command + ] 和command + [ 在最近使用的分屏直接切换
command + alt + 方向键:切换到指定位置的分屏
command + 数字:切换标签页
command + 方向键:按方向切换标签页
shift + command + s:保存当前窗口快照
command + alt + b:快照回放。对你的操作根据时间轴进行回放。可以拖动下方的时间轴,也可以按左右方向键
命令行常用的快捷键:
ctrl + c 中断当前命令执行
ctrl + w 往回删除一个单词,光标放在最末尾
ctrl + u 删除光标以前的字符
ctrl + k 删除光标以后的字符
ctrl + a 移动光标至的字符头
ctrl + e 移动光标至的字符尾
ctrl + l 清屏
rename 重命名
rename -n 's/abc/def/' * //针对当前文件夹下的所有文件 把abc 替换为def -n并不执行
rename 's/abc/def/' * //针对当前文件夹下的所有文件 把abc 替换为def
rename 's/abc/def/g' * //针对当前文件夹下的所有文件 把所有abc 替换为def
支持通配符
? 可替代单个字符
* 可替代多个字符
例子 文件夹中有这些文件foo1, ..., foo9, foo10, ...foo111
rename foo foo0 foo? // foo1到foo9的文件重命名为foo01到foo09,重命名的文件只是有4个字符长度名称的文件,文件名中的foo被替换为foo0
rename 's/^\(//' *.png。 //将左括号"("去掉
rename 's/\.jpg$/\.png/' *.jpg //将后缀名.jpg改成.png
批量去掉隐藏文件名的第一个点.
ls -adl .* | awk '{print $NF}' | sed 's/^.//g' | xargs -i'{}' mv .{} {} //把所有隐藏的文件显示出来
ls -adl .* //列出.* 模式的普通文件 不包括 . ..文件夹
awk '{print $NF}' //列出最后一列
sed 's/^.//g' //替换以.开头的.
xargs -i'{}' mv .{} {} //把前边的输出作为命令行参数 传递给mv命令,-i'{}' 指定模版符号'{}' 表示前边传过来的参数
mac 命令行 批量把文件名前加'g21_'
ls -adl * | awk '{print $NF}' | xargs -I '{}' mv {} 'g21_'{}
mac杀死webstorm进程
ps aux | grep webstorm | awk 'NR==1,NR==2{print $2}' | xargs kill
分割文件
split -a 2 -l 100000 addItem.log child
//以-l =100000行 分割文件 分割后的文件名为childaa childab ...
//-b 20M 以20M 为单位分割
解压文件
tar -xjvf xxx.tbz //tbz格式
tar -xvf xxx.tar.gz //tar.gz
xz -d xxx.tar.xz //tar.xz
tar -xvf xxx.tar //tar
使用tar压缩文件
tar -zcvf test.tar.gz ./test/
tar -cvf test.tar ./test/
使用tar解压文件
tar -xzvf test.tar.gz
tar -xvf test.tar
删除指定日期的文件
find /tmp -mtime +0 -type f -name "test*" | xargs rm -rf
//删除/tmp文件夹下24小时以内类型为test 的文件
find /tmp -mtime +30 | xargs rm -f
//删除/tmp文件夹下30天以前的文件
ssh/scp
ssh -p 6000 root@xxx.com
ssh -i ~/xxx.pem root@xxx.com
scp -P 6000 root@xxx.com:/xxx.txt ./
scp -i ~/xxx.pem root@xxx.com:/xxx/xxx.txt ./
scp xxx.txt root@xxx.com:/xxx.txt
(-v detail info)
ssh/scp使用sock5代理连接
scp -P 8888 -o ProxyCommand="nc -x 127.0.0.1:1086 %h %p" root@ip:/root/xx.txt .
ssh -p 8888 -o ProxyCommand="nc -x 127.0.0.1:1086 %h %p" root@ip
traceroute 192.168.9.1 -n
telnet 192.168.1.2 8000 (only tcp, quit)
nc
nc -vzw 6 IP port (-w timeout time) //测试TCP端口
nc -vuzw 2 IP port //测试UDP端口
nc -l port //临时监听TCP端口
nc -lk port //永久监听TCP端口
nc -lu port //临时监听UDP
nc -luk port //永久监听UDP
linux 挂载 u盘
fdisk -l //查看当前插入的u盘
mkdir /mnt/udisk //创建挂载目录
mount /dev/xxx /mnt/udisk
umount /mnt/udisk
`dmesg`命令 在硬件的连接或断开连接时,可以看到硬件的检测或者断开连接的信息。
列出所有被检测到的硬件
dmesg | grep sda
实时监控dmesg日志输出
watch "dmesg | tail -20"
iperf3测速
测试方法:
Mac Mini(IP: 192.168.1.12) 执行命令 `iperf3 -s`
在不同的网络环境下,使用 MacBook Pro 执行 `iperf3 -c 192.168.1.12`
rsync copy file
1)拷贝本地文件。当SRC和DES路径信息都不包含有单个冒号":"分隔符时就启动这种工作模式。
如:rsync -a ./test.c /backup
2)使用一个远程shell程序(如rsh、ssh)来实现将本地机器的内容拷贝到远程机器。当DES路径地址包含单个冒号":"分隔符时启动该模式。
如:rsync -avz test.c user@172.16.0.11:/home/user/src
3)使用一个远程shell程序(如rsh、ssh)来实现将远程机器的内容拷贝到本地机器。当SRC地址路径包含单个冒号":"分隔符时启动该模式。
如:rsync -avz user@172.16.0.11:/home/user/src ./src
4)从远程rsync服务器中拷贝文件到本地机。当SRC路径信息包含"::"分隔符时启动该模式。
如:rsync -av user@172.16.0.11::www /databack
5)从本地机器拷贝文件到远程rsync服务器中。当DES路径信息包含"::"分隔符时启动该模式。
如:rsync -av /databack user@172.16.0.11::www
6)列远程机的文件列表。这类似于rsync传输,不过只要在命令中省略掉本地机信息即可。
如:rsync -v rsync://172.16.78.192 /www
-v, --verbose 详细模式输出
-a, --archive 归档模式,表示以递归方式传输文件,并保持所有文件属性,等于-rlptgoD
-z, --compress 对备份的文件在传输时进行压缩处理
lsof命令
通过list open file命令可以查看到当前打开文件,在linux中所有事物都是以文件形式存在,包括网络连接及硬件设备。
lsof -i:80
-i参数表示网络链接,:80指明端口号,该命令会同时列出PID,方便kill
查看所有进程监听的端口
sudo lsof -i -P | grep -i "listen"
netstat -nlp |grep LISTEN //查看当前所有监听端口·
netstat -nlp |grep 80 //查看所有80端口使用情况·
netstat -an | grep 3306 //查看所有3306端口使用情况·
dig www.baidu.com @127.0.0.1 -p 5353 //指定特定端口的dns服务 查ip
杀前6个有NODE 的进程:
ps aux | grep node | head -6 | awk '{print $2}' | xargs kill -9
统计已连接上的,状态为“established'
netstat -na|grep ESTABLISHED|wc -l
netstat -s命令
netstat -s | egrep "listen|LISTEN"
667399 times the listen queue of a socket overflowed
667399 SYNs to LISTEN sockets ignored
上面看到的 667399 times ,表示全连接队列溢出的次数,隔几秒钟执行下,如果这个数字一直在增加的话肯定全连接队列偶尔满了。
netstat -s | grep TCPBacklogDrop
查看 Accept queue 是否有溢出
ss命令
ss -lnt
State Recv-Q Send-Q Local Address:Port Peer Address:Port
LISTEN 0 128 *:6379 *:*
LISTEN 0 128 *:22 *:*
如果State是listen状态,Send-Q 表示第三列的listen端口上的全连接队列最大为50,第一列Recv-Q为全连接队列当前使用了多少。
非 LISTEN 状态中 Recv-Q 表示 receive queue 中的 bytes 数量;Send-Q 表示 send queue 中的 bytes 数值。
系统信息
cat /proc/cpuinfo
cat /proc/version
cat /etc/issue
cat /etc/lsb-release
uname -a
free -h
df -h
du
/var/log/wtmp //每个用户的登录次数和持续时间等信息
/var/log/btmp //详细,包括登录失败请求
/var/run/utmp //当前正在本系统中的用户的信息
将二进制文件转换为可编辑文件 wtmp.file
utmpdump /var/log/wtmp >/var/log/wtmp.file
将可编辑文件转换为二进制文件
utmpdump -r < /var/log/wtmp.file > /var/log/wtmp
crontab文件的含义:
六个字段,前五段是时间设定段,第六段是要执行的命令段,格式如下:
minute hour day month week command
其中:
minute: 表示分钟,可以是从0到59之间的任何整数。
hour:表示小时,可以是从0到23之间的任何整数。
day:表示日期,可以是从1到31之间的任何整数。
month:表示月份,可以是从1到12之间的任何整数。
week:表示星期几,可以是从0到7之间的任何整数,这里的0或7代表星期日。
command:要执行的命令,可以是系统命令,也可以是自己编写的脚本文件。
在以上各个字段中,还可以使用以下特殊字符:
星号(*):代表所有可能的值,例如month字段如果是星号,则表示在满足其它字段的制约条件后每月都执行该命令操作。
逗号(,):可以用逗号隔开的值指定一个列表范围,例如,“1,2,5,7,8,9”
中杠(-):可以用整数之间的中杠表示一个整数范围,例如“2-6”表示“2,3,4,5,6”
正斜线(/):可以用正斜线指定时间的间隔频率,例如“0-23/2”表示每两小时执行一次。同时正斜线可以和星号一起使用,例如*/10,如果用在minute字段,表示每十分钟执行一次。
*/60 * * * * ~/php-server-status.sh //每隔60分钟执行一次
*/1 * * * * ~/test.sh //每隔1分钟执行一次
glibc版本查看
ldd --version
strings /lib/arm-linux-gnueabihf/libc.so.6 | grep GLIBC_
ripgrep 常用语法
rg -l 仅仅显示匹配的文件名。
rg -i 大小写不敏感。
rg -v 反向匹配,即显示不匹配的结果。
rg NEEDLE README.md 在特定文件中查找。可以是一个或多个文件。
rg -c ‐‐sort path|modified|accessed|created NEEDLE 按特定顺序显示结果
rg -g ‘*.nuspec’ NEEDLE 查找特定文件
rg -e NEEDLE1 -e NEEDLE2 多重条件查找