# 命令行 - 场景应用

# 进程管理

lsof -p pid1,pid2 #进程打开的文件

# 文本格式

cat -n file.t 或 nl file.t # 输出文件行号
>filename #清空文件内容或创建空文件 #注意:文件存在会被清空,文件不存在会新建一个名为filename的文件。

# 文本查询

grep "XXX" . -rl  #查询符合包含 “XXX”字符串的文件,输出多行文件名

# 目录操作


# 文件查找

find . -type f #输出多行文件名
find . -type f -print0 #输出文件列表

ls -d */ 或 find -type d -maxdepth 1 #仅列出当前目录下所有的一级子目录

cp filename{,.bak} #快速备份文件

# 文件属性

readlink -f [file path] #获取文件绝对路径

ls -l --time-style '+%Y/%m/%d %H:%M:%S' #修改ls显示的时间格式,也可以修改变量 TIME_STYLE
find . -type f -ls # 查看一个目录树里的文件的大小和修改日期,相当于挨个目录做”ls -l”,而且输出的形式比用”ls -lR”更可读

# 文件传输

rsync -av --exclude "logs/"  /data/dc star@10.3.111.111:/home/deploy

# 文件删除

rm `find ./IPTV -name *.zh` -f      #删除目录下指定文件
ls |grep -v img|grep -v info|xargs rm   #删除指定文件以外的其他文件,例中文件名含有img和info的文件需要保留,其他文件删除。
ls >filelist && vi filelist  再 cat filelist |xargs rm  #适用于需要保留的文件没有特征的情况
> /path/to/file.log 再 rm /path/to/file.log #删除一个大文件
/bin/rm -f "$(tar ztf /path/to/file.tar.gz)" # 删除意外在当前文件夹下解压的文件

# 压缩解压

ls  | grep -E '^[0-9]{1,2}$' | xargs tar -cvf num.tar # 打包所有以两位数字命名的文件

# 网络信息

lsof -i:[port] #通过网络端口号,查找运行进程

# 网络管理

lsof -i 4 #IPv4协议的网络文件
lsof -i 6

# 操作系统

whereis eclipse #查找软件安装

# 输入输出

$df | column -t  #让输出更易读

# 脚本编程

read -a #将读取到的元素存入数组

# QUICK CMD LINE

text {
    # output with number line
    cat -n file.t 或 nl file.t
}

process {
    #进程456打开的文件
    lsof -p 456,123 
}

network {
    #IPv6协议的网络文件。
 	
    #没有ssh的情况下传输文件,配合tar真心好用
    nc 
}

file or directory {
    #仅列出当前目录下所有的一级子目录
    ls -d */ 或 find -type d -maxdepth 1
    #快速备份文件
    cp filename{,.bak}
}

ouput {
    #让输出更易读
    df | column -t
}

command {
    #替换上一条命令中的第一个匹配,并执行
    ^an^ount^
}

code { 
    #将读取到的元素存入数组
    read -a
}