常用LINUX命令

1. 查找文件中重复的值

文件中的值

111
222
888
999
111

命令:

sort ./test.log | uniq -d 

输出:

111

sort命令的常见用法:https://www.cnblogs.com/fulucky/p/8022718.html

2.   查看文件行数

wc -l vocab.en.txt 

3. 查看字符串“-”所在的行数

grep -n "–" vocab.en.txt 

4. 查看文件的某几行的内容

sed -n '27,27p' vocab.zh.txt  显示文件vocab.zh.txt第27行的内容 

sed -n '27,30p' vocab.zh.txt 

5. 查看当前文件夹下有多少行

ls -l |wc -l

6.带行号查看文件

cat -n testZh3.txt 

7. 将一个文件的前500000行copy到另一个文件    

head -n 500000 train.en > train.en1

8. 对一个文件重命名:

mv -f train.en1 ./test/train.en

9.合并2个文件:

cat corpus.bpe32k.en corpus.bpe32k.de > corpus.bpe32k.all   将.en和.de合并到.all中

10.vim一个文件时,显示行号:

 :set nu

11.查找文件中关键字所在的行:

grep -c "Validating model at step" ./nohup.out   在nohup.out中查找包含"validating---”的行

 grep -nr "Validating model at step" ./nohup.out  在nohup.out中查找包含"validating---”的行及其对应的行号

 cat nohup.out |head -n 6000 |tail -n +5000 显示nohup.out中5000-6000行对应的内容

从第3000行开始,显示1000行。即显示3000~3999行

cat filename | tail -n +3000 | head -n 1000

12. 查找文件所在位置

find . -name "loadEn.py"

13.常用的文件压缩、解压命令

  • 解压全部命令参考:

    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

  • linux下解压命令大全

  • .tar

    解包:tar xvf FileName.tar

    打包:tar cvf FileName.tar DirName

    (注:tar是打包,不是压缩!)

    ———————————————

  • .gz

    解压1:gunzip FileName.gz

    解压2:gzip -d FileName.gz

    压缩:gzip FileName

    .tar.gz 和 .tgz

    解压:tar zxvf FileName.tar.gz

    压缩:tar zcvf FileName.tar.gz DirName

    ———————————————

  • .bz2

    解压1:bzip2 -d FileName.bz2

    解压2:bunzip2 FileName.bz2

    压缩: bzip2 -z FileName

  • .tar.bz2

    解压:tar jxvf FileName.tar.bz2

    压缩:tar jcvf FileName.tar.bz2 DirName

    ———————————————

  • .bz

    解压1:bzip2 -d FileName.bz

    解压2:bunzip2 FileName.bz

    压缩:未知

  • .tar.bz

    解压:tar jxvf FileName.tar.bz

    压缩:未知

14.查看文件夹下文件大小

du -sh *


15.下载文件到本地Windows以及本地上传

使用xshell登录方便,操作也比较方面。传文件 就是使用rz,sz 首先,服务器要安装了rz,sz yum install lrzsz 当然你的本地windows主机也通过ssh连接了linux服务器 。

运行rz -be,会将windows的文件传到linux服务器

运行sz filename,会将文件下载到windows本地

例如:

sz 服务器的file路径。例

sz /home/linyimeng/game/liantong2018/data/result_xgbc_dummey2_fenxiang.csv

会自动弹出窗口,选中本地要存放的文件位置

16.截取文件中的20000行生成新文件并将新文件放到指定目录

head -n  20000 finance_classes.txt > ../../../../lat/part.txt

17.截取文件部分内容保存到新文件中

sed -n '开始行数,结束行数p'  待截取的文件  >> 保存的新文件 
这样就可以将指定的日志内容保存到新文件中了。执行如下就可以将执行日志保存到daxin.log中了。

sed -n '1350679,2151443p'  hive.log.2018-06-26  >> daxin.log 

18. 统计文件夹下的文件个数

统计某文件夹下文件的个数: ls -l |grep "^-"|wc -l

统计文件夹下文件的个数,包括子文件夹里的:ls -lR|grep "^-"|wc -l

统计某文件夹下目录的个数:ls -l |grep "^d"|wc -l

统计文件夹下目录的个数,包括子文件夹里的:ls -lR|grep "^d"|wc -l

如统计/home/archer目录(包含子目录)下的所有js文件则:ls -lR /home/archer|grep js|wc -l 或 ls -l "/home/archer"|grep "js"|wc -l

ls -lR #长列表输出该目录下文件信息(R代表recursive,对子文件夹进行搜索,可能是目录、链接、设备文件等)

grep "^-" #将长列表输出信息过滤一部分,只保留一般文件;如果只保留目录就是 ^d

wc -l #统计输出信息的行数,因为已经过滤得只剩一般文件了,所以统计结果就是一般文件信息的行数,又由于一行信息对应一个文件,所以也就是文件的个数

19.cat命令

一次性查看整个文件内容:cat filename

创建一个文件:cat > filename   按Ctrl+d退出,只能创建新文件,不能创建已有文件!

将几个文件合并成一个文件:cat file1 file2 > file

20.more命令

  • 从笫n行开始显示:more+n filename
  • 定义屏幕大小为n行:more -n filename
  • +/pattern 在每个档案显示前搜寻该字串(pattern),然后从该字串前两行之后开始显示:more +/pattern filename

21.grep命令

  • 查找指定进程:ps -ef|grep python
  • 查找指定进程个数:ps -ef|grep python -c
  • 从文件中查找关键字:grep "O" utils.py   在utils.py中查找关键字O
  • 找出以某个关键字开头的行内容:找出以p开头的行内容 grep ^p Mapper.py 
  • 找出不以“p”关键字开头的行内容: grep ^[^p] Mapper.py 
  • 输出以hat结尾的行内容:grep hat$ filename
  • 输出一个文本文件中数据的行数:grep -c ‘.*’ filename  如: grep -c '.*' Mapper.py 
  • 搜索log目录下卡号为:“4563513600036385540”,在哪个文件的具体位置及行数:grep -rin “4563513600036385540” log/
  • grep常用参数

      -c:打印符合要求的行数(及统计符合要求多少行)
         -i:忽略大小写
         -n:打印符合要求的行,并显示行号
         -v:反着打b印(及不包含符合要求的内容)

  • grep -c 'nologin$' /etc/passwd 查询nologin用户的个数
    grep -v 'nologin$' /etc/passwd 查询不是nologin用户

22.cut剪切

cut -nb 3 test.txt 将test.txt的第三列剪切出来

23. sed编辑

(1)sed删除

 nl test.txt |sed '2,5d'    删除文件的2-5行,屏幕上只显示其他行。

sed '3,$d' test.txt   删除文件的第3行到最后一行,显示其他行

 sed '1,2d' test.txt  删除文件的1-2行,显示剩下的行

sed '/dada/d' test.txt  删除文件中dada字符串所在的行,显示其他行

(2)sed替换

sed 's/da/ttt/g' test.txt  

说明:s 命令用于替换。命令末端的 g 表示在行内全局替换;也就是说如果每一行里出现多个da,所有的 da都会被替换为 ttt。如果没有 g 命令,则只将每一行的第一 da替换为 ttt。

sed 's/[0-9][0-9]$/&.5/' test.txt    所有以 2 位数结尾的行后面都被加上.5。

sed -n ‘$=’ test.txt  显示test.txt中的行数

(3)sed查看

sed -n '1,2p' ab 显示文件的1-2行
sed -n '/da/p' test.txt   查询包括关键字da的所有行

24. awk (将一行分为多个字段做处理)

(1)

last -n 5 查看当前用户信息的前5行

last -n 5 |awk '{print $1}'  从这些信息中取出第一个字段的信息并打印

(2)一些信息的提取

[chen@localhost scripts]$ cat /etc/passwd | head
root:x:0:0:root:/root:/bin/bash
bin:x:1:1:bin:/bin:/sbin/nologin
daemon:x:2:2:daemon:/sbin:/sbin/nologin
adm:x:3:4:adm:/var/adm:/sbin/nologin
lp:x:4:7:lp:/var/spool/lpd:/sbin/nologin
sync:x:5:0:sync:/sbin:/bin/sync
shutdown:x:6:0:shutdown:/sbin:/sbin/shutdown
halt:x:7:0:halt:/sbin:/sbin/halt
mail:x:8:12:mail:/var/spool/mail:/sbin/nologin
operator:x:11:0:operator:/root:/sbin/nologin

#cat /etc/passwd |awk  -F ':'  '{print $1}'   #-F 指定分隔符为 :
root
daemon
bin
sys

#cat /etc/passwd |awk  -F ':'  '{print $1"\t"$7}'    #显示第1、7个字段
root    /bin/bash
daemon  /bin/sh
bin     /bin/sh
sys     /bin/sh

#搜索/etc/passwd有root关键字的所有行,并显示对应的shell
# awk -F: '/root/{print $7}' /etc/passwd             
/bin/bash

(3)awk查找某个关键字

 awk '/收入/' finance_words.txt 

grep 'nologin$' /etc/passwd|awk -F ':' '{print $1}' grep查看以nologin结尾的行,AWK查询以":"分隔的第一列的信息

(4)awk提取文件某列并输出

awk '{print $1}' ./Input.txt > ./out.txt

这里' '中是要输出的表达式,$1代表第一列,Input.txt是输入文件。

awk '{print $1,$2}'

提取前两列。

提取之后的文件就可以用sort等命令进行操作:

sort ./out.txt | uniq out

排序并删除重复行。

 

awk新增命令:

1.输出文件的第一列,第四列

  • 其中单引号中的被大括号括着的就是awk的语句,注意,其只能被单引号包含。
  • 其中的$1..$n表示第几例。注:$0表示整个行。
$ awk '{print $1, $4}' netstat.txt

2.awk的格式化输出

awk '{printf "%-8s %-8s %-8s %-18s %-22s %-15s\n",$1,$2,$3,$4,$5,$6}' netstat.txt

3.awk 条件筛选

过滤条件为:第三列的值为0 && 第6列的值为LISTEN

awk '$3==0 && $6=="LISTEN" ' netstat.txt

当第三列大于0的时候取出当前行

awk ' $3>0 {print $0}' netstat.txt

需要表头时引入内建变量NR

awk '$3==0 && $6=="LISTEN" || NR==1 ' netstat.txt

加上格式化输出:

awk '$3==0 && $6=="LISTEN" || NR==1 {printf "%-20s %-20s %s\n",$4,$5,$6}' netstat.txt

awk的内建变量:

$0当前记录(这个变量中存放着整个行的内容)
$1~$n当前记录的第n个字段,字段间由FS分隔
FS输入字段分隔符 默认是空格或Tab
NF当前记录中的字段个数,就是有多少列
NR已经读出的记录数,就是行号,从1开始,如果有多个文件话,这个值也是不断累加中。
FNR当前记录数,与NR不同的是,这个值会是各个文件自己的行号
RS输入的记录分隔符, 默认为换行符
OFS输出字段分隔符, 默认也是空格
ORS输出的记录分隔符,默认为换行符
FILENAME当前输入文件的名字

 

输出行号:

awk '$3==0 && $6=="ESTABLISHED" || NR==1 {printf "%02s %s %-20s %-20s %s\n",NR, FNR, $4,$5,$6}' netstat.txt

4.指定分隔符

awk  'BEGIN{FS=":"} {print $1,$3,$6}' /etc/passwd

等价于:-F 也是指定分隔符

awk  -F: '{print $1,$3,$6}' /etc/passwd

5.指定多个分隔符

awk -F '[;:]'

6.以\t作为分隔符输出

awk  -F: '{print $1,$3,$6}' OFS="\t" /etc/passwd

7.字符串匹配

awk '$6 ~ /FIN/ || NR==1 {print NR,$4,$5,$6}' OFS="\t" netstat.txt   

$ awk '$6 ~ /WAIT/ || NR==1 {print NR,$4,$5,$6}' OFS="\t" netstat.txt   

第一个是打印第六列中开头包含FIN的4,5,6列,第一个示例匹配FIN状态, 第二个示例匹配WAIT字样的状态。其实 ~ 表示模式开始。/ /中是模式。

awk '/LISTEN/' netstat.txt 匹配行中的关键字LISTEN

awk '$6 ~ /FIN|TIME/ || NR==1 {print NR,$4,$5,$6}' OFS="\t" netstat.txt  匹配第6列中包含FIN或TIME的字段

取反:

awk '!/WAIT/' netstat.txt

脚本编写:第6列是TIME|ESTABLISHE,则将结果输出到1.txt,第6列是listen,则将结果输出到2.txt,其余的输出到3.txt。

awk 'NR!=1{if($6 ~ /TIME|ESTABLISHED/) print > "1.txt";

else if($6 ~ /LISTEN/) print > "2.txt";

else print > "3.txt" }' netstat.txt

8.统计

计算所有的C文件,CPP文件和H文件的文件大小总和。

ls -l  *.cpp *.c *.h | awk '{sum+=$5} END {print sum}'

统计每个用户的进程的占了多少内存(注:sum的RSS那一列)

ps aux | awk 'NR!=1{a[$1]+=$6;} END { for(i in a) print i ", " a[i]"KB";}'

9.awk脚本

  • BEGIN{ 这里面放的是执行前的语句 }
  • END {这里面放的是处理完所有的行后要执行的语句 }
  • {这里面放的是处理每一行时要执行的语句}

 

 

(5) 查看一个文件中有多少个query(每个query下有多条数据)

head 20190916.tsv|awk -F"|" '{print $1}'|sort|uniq|wc -l
cat wiseautocar_bs_top20_hitmodels_20190916.tsv|awk -F"|" '{print $1}'|sort|uniq|wc -l

 

25.删除某个前缀开头的文件

find ./ -name 'news_video_vec_20180*' -exec rm {} \;

26.删除文件中的某一行

sed -i '1d' filename   删除文件第一行
sed -i '2d' filename   就是删除第二行
sed -i 'nd' filename   就是删除第二行
sed -i '$d' filename   就是删除最后一行

27.移动光标到行首和行尾

ctrl+a  光标移动到行首

ctrl+e  光标移动到行尾

28.mac连接远程服务器

a).打开Mac的命令终端
b).输入ssh -p 22 用户名@服务器地址 它会提示你输入密码,输入正确的密码之后,你就发现已经登陆成功了. 22是端口号

 

29.暂停正在运行的进程,使其在后台运行

在ssh shell中运行脚本,比如我运行一个批量下载脚本:

python download-app-annie.py

按下ctrl-z中断脚本运行,此时系统提示:

^Z 
[1]+ Stopped python download-app-annie.py

意思是编号为1的任务挂起了,[1]就是任务的编号,里面的数字也可能是2,3,4..

输入命令:bg 1

这个命令将1号任务切换到后台执行

输入命令:disown -h %1

这个命令的意思是将1号任务从当前shell的任务列表中移除,并且忽略HUP信号,这样,即使当前Shell结束了,这个任务也不会被结束,而是继续留在后台执行。

30.vi模型下跳到文本的最后一行

按“G”,即“shift+g”

31.linux 下 ls 文件夹和文件没有颜色的解决办法

.bashrc 中加入 

alias ls="ls --color"

 

32.在文件中查找指定字符串出现的次数

grep -c "绗缝" train.txt 


33.在文件中查找到指定的字符串并对其进行批量替换

将文件1.txt内的文字“garden”替换成“mirGarden”

# sed -i "s/garden/mirGarden/g" 1.txt   //sed -i 很简单

34. 比较两个文件的差异,将不同处的信息显示出来

语法:diff [options] FILES

(1)FILE1 FILE2 :源是一个文件,目标也是文件。这两个文件必须是文本文件。以逐行的方式,比较文本文件的异同处。 
e.g. diff 1.txt 2.txt

(2)DIR1 DIR2 :源是一个目录,目标是目录。diff 命令会比较两个目录下名字相同的文本文件,依照字母次序排序,列出不同的二进制文件,列出公共子目录,列出只在一个目录出现的文件。 
e.g. diff dir1 dir2

(3)FILE DIR :源是一个文件,目标是目录。diff命令把源文件与目标目录下的同名文件比较。 
e.g. diff 1.txt dir2

(4)DIR FILE :源是一个目录,目标是文件(不是目录)。源目录下所有文件中与目标文件同名的文件,将用来与目标文件比较。 
e.g. diff dir1 2.txt

35.统计文件夹下的文件数

 ls -l |grep "^-"|wc -l
36.根据日期将copy,移动文件

copy:将path1下的修改日期在一天之内的文件copy到path2下

find path1 -mtime -1 -type f -exec cp {} path2 \;

移动:将path1下的修改日期在一天之内的文件mv到path2下

find path1 -mtime -1 -exec mv {} path2 \;

37. du 显示某个特定目录(默认当前目录)的磁盘空间使用情况

du -c 显示所有已列出文件总大小

du -h 按照用户易读的格式输出大小

du -s 显示每个输出参数的总计

du  -sh *| sort -nr 对目录文件大小按数值排序

 

38.排序数据

sort file 按照会话指定的默认语言排序规则对文本文件中的数据进行排序

sort -n file 对文件中的数字按照数值而不是字符排序

sort -M file 按月进行排序

sort  -t ':' -k 3 -n file 将文件按冒号分割,并对其中第三个字段进行数值排序

 

39.搜索数据

grep t file 搜索file中匹配模式‘t’的行

grep -n ki file 显示匹配模式t的行所在的行号

grep -v t file 方向搜索,输出不匹配该模式的行

grep -c ki file  file中有多少个满足匹配模式ki的行

grep -e s -e i  file file中包含多个匹配模式的行,匹配s或i

grep [tf] file 使用正则表达式进行匹配,匹配包含字符t或字符f的行

 

 

 

https://www.jianshu.com/p/de98af781829

参考:https://www.cnblogs.com/xue0123/p/6413419.html

https://blog.csdn.net/weixin_42778196/article/details/81560334

https://coolshell.cn/articles/9070.html

 

 

 


 

 

  • 1
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值