天天看点

Linux: linux shell frequency

目录

一、磁盘空间、文件分区(挂载点)、大小、压缩

二、文件压缩与解压

三、查看进程、内存、cpu

四、find 查找文件、grep搜索文件内容

五、wc/more/cat/tail/head显示文件内容

六、Unclassified

八、shell案例

九、Other常用

一、磁盘空间、文件分区(挂载点)、大小、压缩

1.查看磁盘剩余空间大小

  • df -lh

2.查看文件夹/文件分区(挂载点)

  • df  <文件(夹)路径>

3.查看文件夹/文件大小

  • du log2012.log 显示指定文件所占空间
  • du -m scf 查看指定目录的所占空间
  • du -s 只显示总和的大小
  • du -h test 方便阅读的格式显示
  • du -ah test 文件和目录都显示
  • du -c log30.tar.gz log31.tar.gz 显示各自占用磁盘空间的大小,并统计它们总大小
  • du|sort -nr|more 按照空间大小排序
  • du -h --max-depth=1 输出当前目录下各个子目录所使用的空间
  • du -m xx.txt #以M单位显示大小
  • ls -lh xx.txt

4.列出文件夹内所有文件大小

  • ls -l #以K查看文件大小
  • ls -lh #以M查看文件大小
  • ll -h #以G查看文件大小
  • ls -lhS #按大到小排序

5.列出指定文件、统计指定文件数量

  • (1)查看当前目录下的文件数量(包含子目录中的文件) 注意:R,代表子目录
  • ls -lR|grep "^-"| wc -l
  • (2)# 查看当前目录下的文件数量(不包含子目录中的文件)
  • ls -l|grep "^-"| wc -l
  • (3)# 查看当前目录下的文件夹目录个数(不包含子目录中的目录),同上述理,如果需要查看子目录的,加上R
  • ls -l|grep "^d"| wc -l
  • (4)统计所有以“20161124”开头的目录下的全部文件数量
  • ls -lR 20161124*/|grep "^-"| wc -l
  • grep "^d"表示目录,"^-"表示文件

二、文件压缩与解压

1.rar压缩、unrar解压

  • (1)ubuntu下安装 rar/unrar
  • sudo apt-get install rar
  • sudo apt-get install unrar
  • (2)rar用于压缩,unrar用于解压
  • rar a test.rar
  • unrar x test.rar

2.shell常用压缩方法

  • tar –cvf jpg.tar *.jpg  将所有jpg文件打包成tar.jpg
  • tar –czf jpg.tar.gz *.jpg   将所有jpg文件打包成jpg.tar后,并用gzip压缩成jpg.tar.gz
  • tar –cjf jpg.tar.bz2 *.jpg 将所有jpg文件打包成jpg.tar后,并用bzip2压缩成jpg.tar.bz2
  • tar –cZf jpg.tar.Z *.jpg   将所有jpg文件打包成jpg.tar后,并用compress压缩成jpg.tar.Z
  • zip jpg.zip *.jpg   zip格式的压缩,需要先下载zip for linux 

3.shell常用解压方法

  • tar –xvf file.tar  解压 tar包
  • tar -xzvf file.tar.gz 解压tar.gz
  • tar -xjvf file.tar.bz2   解压 tar.bz2
  • tar –xZvf file.tar.Z   解压tar.Z
  • unrar e file.rar 解压rar
  • unzip file.zip 解压zip

三、查看进程、内存、cpu

1.top/htop 查看内存、cpu / q 退出

Linux: linux shell frequency

2.ps 查看当前所有进程

  • ps -ef
  • ps -ef | grep python
  • ps -aux

3.Linux僵尸进程排查

  • #yum install -y htop iotop smem
  • #查看进程使用的内存量
  • smem -k -s uss
  • #查看进程使用的内部百分比
  • smem -p -s uss
  • #查看每个用户使用的内存量
  • smem -u -k
  • #查看单个进程使用的内存量
  • smem -P ./perf -k
  • #获取内存使用最大的10个进程
  • ps aux|head -1;ps aux|sort -nr -k4|head -10
  • #获取CPU使用最大的10个进程
  • ps aux|head -1;ps aux|sort -nr -k3|head -10
  • #查找僵尸进程
  • ps -e -o stat,ppid,pid,cmd|grep -e '^[zZ]'
  • #杀死僵死进程
  • ps -e -o stat,ppid,pid,cmd|grep -e '^[zZ]'|awk '{print $2}'|xargs kill -9

四、find 查找文件、grep搜索文件内容

1.grep列出主目录下所有内容含有sku的文件

  • grep 'sku' -r /

2.find查找文件合集

  • find /etc/ -name passwd #查找/etc/下名称中带有passwd的文件
  • find /etc -maxdepth 1 -name passwd #查找/etc/下名称中带有passwd的文件,查找一层。
  • find /etc -name *.conf #查找/etc/下名称中带有*.conf的文件
  • find /etc -maxdepth 2 -name *.conf #查找/etc/下名称中带有*.conf的文件,且查找两层,包括一层
  • find /etc -maxdepth 2 -mindepth 2 -name *.conf #查找/etc/下名称中带有*.conf的文件,且只查找第二层
  • find /mnt -group tony #查找/mnt中所有组是tony用户的文件
  • find /mnt -user student -group student #查找/mnt中所有人和所有组都是student的文件
  • find /mnt -not -user student #查找/mnt中所有人不是student用户的文件
  • find /mnt -not -user student -o -group tony #查找/mnt中所有人不是student用户或者所有组是tony用户的文件
  • find /mnt -size 20K #查找/mnt文件大小近似20k的文件
  • find /mnt -size +20K #查找/mnt文件大小大于20k的文件
  • find /mnt -size -20K #查找/mnt文件大小小于20k的文件
  • find /mnt -type d #按type查找/mnt中目录
  • find /mnt -type f #按type查找/mnt中文件
  • find /mnt -cmin 10 #查找/mnt中十分钟左右修改的
  • find /mnt -cmin +10 #查找/mnt中十分钟以上修改的
  • find /mnt -cmin -10 #查找/mnt中十分钟以内修改的
  • find /mnt -ctime 10 #查找/mnt中十天左右修改的
  • find /mnt -ctime +10 #查找/mnt中十天以上修改的
  • find /mnt -ctime -10 #查找/mnt中十天以内修改的
  • find /mnt/ -perm 444 #查找/mnt文件权限为444的文件
  • find /mnt/ -perm -444 #查找/mnt中user有读的权限且group有读的权限且other有读的权限的文件。
  • find /mnt/ -perm -004 #查找/mnt中other有读权限的文件
  • find /mnt/ -perm -644 #查找/mnt中user有读写的权限且group至少有读权限且other有读的权限的文件

3.find按名字查找并搜索文件内容

  • find / -type f -name "*.log" | xargs grep "ERROR"
  • find ./ -name *sql | xargs grep sku
  • find . | xargs grep "custom"

4.find查找大于5000K的文件

  • find ./ -size +5000k -exec ls -ld {} \;

5.find查找小于5000K的csv文件

  • find ./*.csv -size -300k -exec ls -ld {} \;

6.find查找小于100K的csv文件并删除

  • find ./*.csv -size -300k -exec rm {} \;

7.find统计查找到的文件数量

  • find . -name "*.csv" | wc -l

8.find查找到指定权限的文件

  • find  ./ -user  lisq -exec chmod 775 {} \; (分号不可少)

9.find查找出一天前的文件并删除

  • find ./ -mtime +1 -name "*.html" -exec rm -rf {} \;
  • -mtime:标准语句写法
  • +10:查找10天前的文件,这里用数字代表天数,+30表示查找30天前的文件
  • -exec:固定写法
  • rm -rf:强制删除文件,包括目录
  • {} \; :固定写法,一对大括号+空格+/+;

10.find查找出文件并移走

  • find . -name '10-*.dat' -exec mv {} ../ \;
  • -exec mv {} /mnt/mp3 \; - 运行mv命令。
  • {} - 字符 '{}' 代表find到的所有内容。
  • ../表示当前用户目录的上一级目录
  • \; - 结束 /bin/mv 命令。
  • 11.mv移走文件夹中指定数量的文件
  • mv `ls | head -50000` ../html_2/

五、wc/more/cat/tail/head显示文件内容

1.wc -l 显示文件的行数           

  • wc -l test.txt  显示文件的行数     

2.ls -l | wc -l  显示目录下的文件数 

  • ls -l | wc -l 显示目录下的文件数 

3.tail 显示指定文件末尾内容

  • 例1:显示文件最后5行内容  tail -5 log2014.log
  • 例2:从第5行开始显示文件  tail -n +5 log2014.log
  • 例3:tail -f  log2014.log 该命令不断去读最新内容,这样有实时监视的效果,用Ctrl+c来终止       

4. head 显示档案的开头内容

  • 例1:显示文件的前n行  head -5 log2014.log
  • 例2:显示文件前n个字节  head -c 20 log2014.log
  • 例3:文件的除了最后n个字节以外的内容  head -c -32 log2014.log
  • 例4:输出文件除了最后n行的全部内容 head -n -6 log2014.log

5. cat 把档案串连接后传到基本输出

  •    (1)语法:cat [选项] [文件]
  •               -n 或 --number 由 1 开始对所有输出的行数编号
  •               -b 或 --number-nonblank 和 -n 相似,只不过对于空白行不编号
  •               -s 或 --squeeze-blank 当遇到有连续两行以上的空白行,就代换为一行的空白行
  •    (2)例子:  cat -n textfile1 > textfile2  把textfile1的内容加上行号后输入textfile2这个档案里
  •              cat -b textfile1 textfile2 >> textfile3  把textfile1和textfile2的内容加上行号(空白行不加)后将内容输入到textfile3这个档案里             

6.more按页查看文件内容

  • 实例1:显示文件中从第3行起的内容   more +3 log2012.log             
  • 实例2:从文件中查找第一个出现 "day3" 字符串的行,并从该处前两行开始显示输出   more +/day3 log2012.log                                           
  • 实例3:设定每屏显示行数   more -5 log2012.log     
  • 实例4:列一个目录下的文件,由于内容太多,我们应该学会用more来分页显示。这得和管道 | 结合起来    ls -l  | more -5                                             

六、Unclassified

1.cut 剪载文本

(1)命令格式

  • cut [option] filename
  • cat filename | cut [option]

(2)语法

  • -b:仅显示行中指定直接范围的内容;
  • -c:仅显示行中指定范围的字符;
  • -d:指定字段的分隔符,默认的字段分隔符为"TAB";
  • -f:显示指定字段的内容;
  • -n:与"-b"选项连用,不分割多字节字符;
  • --complement:补足被选择的字节、字符或字段;
  • --out-delimiter=<字段分隔符>:指定输出内容是的字段分割符;
  • --help:显示指令的帮助信息;
  • --version:显示指令的版本信息。

1)-f field_list:field_list为字段列表,指定需要提取的字段

2)-f N-:指从第N个字段到行尾

3)-f N-M:指从第N个字段到第M个字段

4)-f -N:指从行首到第N个字段

(3)案例

  • cut -d ', ' -f 2 text.txt 以逗号分隔,取第2列
  • cut -d ', ' -f1,2 text.txt 以逗号分隔,取第1,2列

2.split切割文件

  • split生成的文件按规律命名及添加扩展名
  • split p2_run.txt -l 1000 -d url_&&ls|grep url_|xargs -n1 -I {} mv {} {}.txt

八、shell案例

1.shell命令返回赋值给变量

(1)常用两种方式

  • A=`ls -la` 反引号,运行里面的命令,并把结果返回给变量A
  • A=$(ls -la) 等价于反引号

(2)例子

for element in $(ls -rlt GET_FBA_MYI_UNSUPPRESSED_INVENTORY_DATA-20200611*)

do

echo $element

done

#移走文件夹中1000个文件

for file in $(ls |head -1000)

do

mv $file /home/ubuntu/seo/csv/v1/

done

2.循环访问数组

my_array=(

GET_FBA_MYI_UNSUPPRESSED_INVENTORY_DATA-20200612-20200612.21203425722018425.juvo_us.txt

GET_FBA_MYI_UNSUPPRESSED_INVENTORY_DATA-20200612-20200612.21210780886018425.juvo_us.txt

GET_FBA_MYI_UNSUPPRESSED_INVENTORY_DATA-20200612-20200612.21199743596018425.juvo_us.txt

GET_FBA_MYI_UNSUPPRESSED_INVENTORY_DATA-20200612-20200612.21207515550018425.juvo_us.txt

)

for element in ${my_array[@]}

do

echo $element

grep B07YD1F2R8 $element

done

九、Other常用

1.linux查看与设定别名 

(1)永久设置别名方法

  • vi ~/.bashrc
  • alias 别名='原命令'
  • source ~/.bashrc #编辑完之后记得使环境变量生效

(2)删除别名

  • unalias 别名

2.screen多重视窗

(1)常用screen参数

  • screen -S yourname # 新建一个叫yourname的session
  • screen -ls # 列出当前所有的session
  • screen -r yourname # 回到yourname这个session
  • screen -d yourname # 远程detach某个session
  • screen -d -r yourname # 结束当前session并回到yourname这个session

(2)在session使用ctrl

  • C-a ? # 显示所有键绑定信息
  • C-a c # 创建一个新的运行shell的窗口并切换到该窗口
  • C-a n # Next,切换到下一个 window
  • C-a p # Previous,切换到前一个 window
  • C-a 0..9 # 切换到第 0..9 个 window
  • Ctrl+a [Space] # 由视窗0循序切换到视窗9
  • C-a C-a # 在两个最近使用的 window 间切换
  • C-a x # 锁住当前的 window,需用用户密码解锁
  • C-a d # detach,暂时离开当前session,screen session 转到后台执行
  • C-a z # 把当前session放到后台执行,用 shell 的 fg 命令则可回去。
  • C-a w # 显示所有窗口列表
  • C-a t # time,显示当前时间,和系统的 load
  • C-a k # kill window,强行关闭当前的 window
  • C-a [ # 进入 copy mode,在 copy mode 下可以回滚、搜索、复制就像用使用 vi 一样
  • C-b Backward,PageUp
  • C-f Forward,PageDown
  • H(大写) High,将光标移至左上角
  • L Low,将光标移至左下角
  • 0 移到行首
  • $ 行末
  • w forward one word,以字为单位往前移
  • b backward one word,以字为单位往后移
  • Space 第一次按为标记区起点,第二次按为终点
  • Esc 结束 copy mode
  • C-a ] # paste,把刚刚在 copy mode 选定的内容贴上

3.scp用于Linux 之间复制文件和目录

mac to wiki

  • scp -i /Users/lenhe/.ssh/id_rsa_us /Users/amzsearchme.zip [email protected]:/home/

wiki to mac

  • scp -i /Users/lenhe/.ssh/id_rsa_us [email protected]:/home/ec2-user/len/log.zip /Users/

4.export指定vi打开crontab

  • export EDITOR=vi;
  • 或 export EDITOR="/usr/bin/vim" ;

5. file  辨识文件类型

  • file xx.txt

6.diff  比较两文件差异 

  • 例1:比较两个文件 diff log2014.log log2013.log
  • 例2:并排格式输出 diff log2013.log log2014.log-y -W 50
  • 例3:上下文输出格式 diff log2013.log log2014.log-c
  • 例4:统一格式输出 diff log2014.log log2013.log-u
  • 例5:比较文件夹不同 difftest3 test6
  • 例6:比较两个文件不同,并生产补丁 diff -ruN log2013.log log2014.log >patch.log 

7.批量注释crontab

(1)全部注释

  • control + v
  • G  跳到最低
  • shift + i
  • 输入#
  • esc 键

(2)取消全部注释

  • control + v
  • G
  • d
  • esc 键

继续阅读