風子の空

Shell常用操作小结

分类:shell

下载

scp -r file1 userName@ip:/filePath //将file1复制到地址为ip的filePath路径下

rsync -av source_dir --exclude=core user@remote: //同步数据到另外一台机器

curl -O url  //下载url下的文件

//下载文件夹,并进行限速,在当前文件夹下生成一个名为xx.yy.com的文件夹,并且保持下载文件在该机器上的文件目录位置。可以进行mv或cp,最后把机器rm即可。
wget -r -l 0 --limit-rate=5m ftp://xx.yy.com:/aa/bb/cc

用量

du -sh xx.log //查询指定文件大小

du -sh '正则' | sort //查询文件名符合正则的文件大小, 并按照文件大小排序

du --exclude = '正则' -h //查询文件名不符合正则的文件大小和(MAC无效,linux有效)

du -sh //查询文件夹大小

ifconfig //查看ip

df -l  //查看硬盘用量

移动

mv a.php b.php c.php test //将三个文件移动到test文件夹中

mv {正则} ./log //移动所有文件名符合正则的文件到log文件夹中

mv /A ./B/ //将文件从A移动到B 

拼接

cat a.php b.php > c.php  // 拼接

cat *.php > all.php  //拼接所有.php 文件,生成新文件all.php

join a.txt b.txt //连接两个文件

paste a.txt b.txt //拼接两个文件为两列

裁剪



cut -d "&" -f 2,2 sortEasy.txt > sortEasy1.txt // 对sortEasy.txt按照&进行划分并且取第二列写入sortEasy1.txt文件中。

cut -d : -f a.txt //按照:剪切a.txt的第二列

grep . filename > newfilename //删除文件中的空格,并保存到新的文件中。

排序

sort xx_noabf.txt > sort.txt //对xx_noabf.txt进行排序,并写入到sort.txt文件中。

sort -n -k 1,1  sort_copy.txt > sortEasy.txt //对sort_copy按照第一列进行数值排序。-n:数值排序。-r:反序排列。-k:指定排序列号。

sort -t ';' +0 +3 a.txt -o b.txt //在a.txt中按照;为分列线,先按照第一列排序,再按照第二列排序,并将排序结果保存到文件b.txt中。

查询

 wc -l //查看文件的行数

grep 'abc' abc.txt //查看文件中包含的abc信息
	
grep -n "ABC" xx.log > abc.txt //移动所有包括ABC字符串的行到abc.txt文件中

grep -n -i "*[^abf]" xx.txt > xx_noabf.txt //移动所有不包括abf字符串的行到xx_noabf.txt文件中。-i:忽略字母大小写。

grep 'abc' abc.txt | grep -v '200'  //查询包含abc,但是不包含200的行

grep -oP '\d+%' abc.txt //查询符合正则表达式的行,并且截取符合条件的串-o

查看

查看文件有cat, more, less, head, tail, nl等。甚至于vi,但是在只是查看的情况下,务必不要用vi来打开大文件,特别是在线上,因为vi也是占用io的。
cat -n abc.txt //列出文件全部内容,并且标记行号。

more/less abc.txt //分页列出文件内容

head -n 20 abc.txt //列出文件前20行内容

tail -n 20 abc.txt //列出文件最后20行内容

head -n 30 abc.txt | tail -n 2 //列出文件29-30行文件内容。

tail -f abc.txt //实时监控文件内容变化。

nl abc.txt  //列出文件全部内容,并标记行号。

cd - //返回上一个目录

uniq -u filename //显示不同的行

uniq -d filename //显示重复的行

find ./ -name 'xx' //按照文件名称在路径下查找文件

find ./ -mtime -1 //查看一天以内的文件

find ./ -mtime +2 //查看两天以前的文件

区别

diff -r a b -q //递归比较a,b两个文件区别,并且不显示具体内容。

diff a b //<:第一个文件有,:>第二个文件有。

复制

cp xx_noabf.txt ./test //拷贝xx_noabf.txt到test文件中。

cp sort.txt sort_copy.txt //复制文件sort.txt

移除

rm -rf XX  //删除文件夹XX

rm xx //移除文件xx

//命令行中
control + w //删除光标前的所有文字

control + k //删除光标后的所有文字

control + h //删除光标前的单词

control + d //删除光标后的单词

屏蔽


~ vim 多行屏蔽
~ 屏蔽 ctrl+v 进入visual block, 使用上下键,选中要屏蔽的行,按下I键,选择要屏蔽的符号,按ESC,可以看到屏蔽结果。
~ 释放 ctrl+v 进入visual block, 使用上下键,选中要去除屏蔽的行。按d键,可看到屏蔽已去除。

批量

rename .txt .c *  //批量更改文件中后缀.txt 为.c,

软链

sudo ln -s /xx/yy rz  //添加软链  

跟踪

pstree -p  xyz  //查询用户xyz所有服务的进程编号,以树状显示。配以more/less。

strace -o output.txt -T -tt -e trace=all -p  pid //追踪该pid下的访问之行情况,并打印到output.txt

权限

sudo chmod 777 /xx-*  //改变权限

chown xx:yy filname

睡眠

sleep 1s/1m/1h //睡眠1s/1m/1h

分割

窗口分割

1.编辑窗口分割

横排:vsplit

竖排:split

窗口切换:ctrl + w

翻页:b,f

撤销:u

重复:.

2.命令窗口分割

竖排:command + d 

横排:command + shift + d

关闭:command + w

同窗口切换:command + option + 左右键

异窗口切换:command + 左右键 || command + 数字

活动


netstat -apn | grep 8011   //查看占用端口8011的应用

pgrep lighttpd    //查看lighttpd应用的所有进程id

ps -ef | grep lighttpd | grep -v grep | cut -c 9-15  //打印进程id,等于命令'pgrep lighttpd'

ps -ef | grep lighttpd | awk '{ print $2}'   //打印输出第二列,等于命令'pgrep lighttpd'

杀手


kill -9 1087   //杀死进程id为1087的应用

fuser -k -n tcp 8009    //杀死占用端口8009的tcp应用

pkill -9 lighttpd    // 杀死所有lighttpd进程,pkill = pgrep + kill

~ xargs 把前面命令的输出,作为kill -s 9的输入参数
ps -ef | grep lighttpd | grep -v grep | cut -c 9-15 | xargs kill -s 9 

ps -ef | grep lighttpd | grep -v grep | awk '{ print $2}' | xargs kill -s 9 

pgrep lighttpd | xargs kill -s 9

~ 也可以调换位置
kill -s 9 `ps -ef | grep lighttpd | grep -v grep | awk '{ print $2}' `

kill -s 9 `pgrep lighttpd` 

fuser -k -n tcp 8087//杀死占用8087的所有进程

卸载


diskutil unmount /Volumes/xx //对于xx已经卸载,但是连接还断不掉的情况,可以亲自移除

基本信息


操作系统:uname -a

本机ip: hostname -i 

任务管理器:top

环境变量:env

GCC选项


-O2 //二级优化

-Werror //警告视为错误

-Wall //显示警告信息

-pipe //定位到管道