Linux常用命令(查找、查看、比较、编辑文件)
1、查找文件(which、whereis、locate、find)
显示命令或脚本的全路径,默认也会将命令的别名显示出来。
which mv
alias mv='mv -i'
/bin/mv
which ls #此命令是查找命令
whereis
whereis 文件或目录名:查询指定的程序名
# whereis rpm
# whereis passwd
locate
locate 配合数据库缓存,快速查看文件位置
参数:
-i:忽略大小写的差异。
-r:后面可接正则表达式的表示方法。
格式:find pathname -options [-print]
命令字 路径名称 选项 输出
find命令是直接查找硬盘,速度会慢一些,但是能找到完整的结果,path是要查找的路径。
路径:
1.默认不写路径时查找的是当前路径.
2.加路径。
条件选项:
1.指定的名称 -name
2.文件类型 - type
b:块设备文件
c:字符串设备文件
d: 目录
f: 文件
p:管道文件
l: 符号链接文件
3.权限
-perm mode 按文件权限查找文件
-user 按文件属主查找文件
-group 按照文件所属的组来查找文件。
-empty 空目录
例如搜索目录中没有文件的空目录。
$ find /tmp -type d -empty
-gid n:gid为n的文件
-uid n:文件的所有者的uid为n
-user uname:文件的所有者为uname,也可以指定uid
4.时间
-mtime
-n / +n 按照文件的更改时间来查找文件,
-n 表示文件更改时间距现在 n 天以内
+ n表示文件更改时间距现在 n 天以前
-size n 查找符合指定的文件大小的文件
-exec
对匹配的文件执行该参数所给出的其他 linux 命令,相应命令的形式为' 命令 {} \;,注意{ }和 \;
之间的空格,{}代表查到的内容
find按文件名查找:
从根开始找文件
# find / -name “file2” #从根开始找文件
# find / -name -ls “file2” #从根开始找文件 -ls加强版ls和find搭配
/root/file2
/var/tmp/file2
# find /etc -name "ifcfg-ens33" #以名字的方式查找
# find /etc -iname "Ifcfg-ens33" #-i忽略大小写
b[512] c[B] w[2B] M K G
熟用*通配符
# find /etc -iname "*.txt"
参数解释:-i 忽略大小写
*:表示所有字符
find按文件类型查找:
一般需要搜索的文件类型就只有普通文件(f),目录(d),链接文件(l)。
find /tmp -type f -name "a*.sh" #搜索a开头的sh文件
find /tmp -type d -name "a*" #搜索目录类文件以a开头
find按文件大小 -size(1bit 1byte=1G)
# find /etc -size +5M #大于5M
# find /etc -size 5M #等于5M
# find /etc -size -5M #小于5M
# find / -size +3M -a -size -5M #查找/下面大于3M而且小于5M的文件-a:add
# find / -size -1M -o -size +80M #查找/下面小于1M或者大于80M的文件-o:or
# find / -size -3M -a -name "*.txt" #查找/ 下面小于3M而且名字是.txt的文件
find按时间查找
按时间找(atime,mtime,ctime)
atime:访问时间(access time),指的是文件最后被读取的时间,可以使用touch命令更改为当前时间;
ctime:更改时间(change time),指的是文件本身最后被变更的时间,变更动作可以使chmod、chgrp、mv等等【属性,重命名】;
mtime:修改时间(modify time),指的是文件内容最后被修改的时间,修改动作可以使echo重定向、vi等等;
# find /opt -mtime +5 #修改时间5天之前
# find /opt -atime +1 #访问时间1天之前
# find . -mtime -2 #修改时间2天之内
# find . -amin +1 #访问时间在1分钟之前
# find /opt -amin -4 #访问时间在4分钟之内
# find /opt -mmin -2 #修改时间在2分钟之内
-n指n天以内,+n指n天以前
时间戳总结
#(1).atime只在文件被打开访问时才改变,若不是打开文件编辑内容(如重定向内容到文件中),则 ctime 和 mtime 的改变不会引起atime的改变;
(2).mtime的改变一定引起ctime的改变,而访问文件时(例如cat),atime不一定会改变,所以atime”改变”(这个改变是假象,见下文分析)不一定会影响ctime。(见下面的relatime说明)
find按文件权限
【权限类测试】
# find . -perm 644 #.是当前目录 精确查找644
# find /usr/bin -perm -4000 #包含set uid
# find /usr/bin -perm -2000 #包含set gid
# find /usr/bin -perm -1000 #包含sticky
【所有者属组类测试】
find使用xargs和exec
ls 文件 | xargs -i cp {} /目录
ls 目录 | xargs -i cp {} /目录
{}:前面传过来的内容
-i :为了让大括号生效
目录时 -r
解释:前面传过来的东西交给大括号
1、在当前目录下查找所有用户具有读、写和执行权限的文件,并收回相应的写权限:
# find . -perm -7 -print | xargs chmod o-w
2、查找系统中的每一个普通文件,然后使用xargs命令来测试它们分别属于哪类文件
# find . -type f -print | xargs file
3、尝试用rm 删除太多的文件,你可能得到一个错误信息:/bin/rm Argument list too long. 用xargs 去避免这个问题
$find ~ -name ‘*.log’ -print0 | xargs -i -0 rm -f {}
4、查找所有的jpg 文件,并且压缩它
# find / -name *.jpg -type f -print | xargs tar -cvzf images.tar.gz
5、拷贝所有的图片文件到一个外部的硬盘驱动
# ls *.jpg | xargs -n1 -i cp {} /external-hard-drive/directory
6.批量修改文件权限
find . name "*.sh" | xargs chmod +x
# find . -name "yang*.txt" |xargs rm -rf #找到之后删除处理xargs 参数传递
# # find /home/ -name "test*" | xargs -i cp {} /tmp/
# find /etc -name "ifcfg*" -exec cp -rf {} /tmp \; #exec命令对之前查找出来的文件做进一步操作----- 查找带ifcfg开头的文件复制到tmp下
# find /home/ -name test* -exec rm -rf {} \; #{}为前面查找到的内容,\; 格式
-exec和xargs的区别
入行转换成下一个命令的参数列表。
===============
1、exec 每处理一个文件或者目录,它都需要启动一次命令,效率不好;
2、exec 格式麻烦,必须用 {} 做文件的代位符,必须用 \来转义; 作为命令的结束符,书写不便。
3、xargs不能操作文件名有空格的文件;
综上,如果要使用的命令支持一次处理多个文件,并且也知道这些文件里没有带空格的文件,
那么使用 xargs比较方便; 否则,就要用 exec了。
find / -name *.log -exec cp -r {} \;
分别找出test5 和除了test5的文件
# find /home/ -name *test5*
# find /home/ ! -name "test5*" # !--取反
2、查看文件内容(cat、more、less、head、tail、nl、du、df)
cat:查看文件内容,还可以用来合并文件,如果文件不存在,则自动创建文件。
参数:
-E:将结尾的断行字符$显示出来。
-n:打印出行号,连同空白行也会有行号。
-b:从1开始对文件所有输出的行数编号,空白行不编号。
-T:将(Tab)按键以^I显示出来。
-v:列出一些看不出来的特殊字符。
-A:相当于-vET的整合参数,可列出一些特殊字符,而不是空白而已。
例:
#cat -n 路径/目录(文件)
#cat -nA
#tac 把文件倒过来打开里面的内容
#cat /etc/passwd /opt/xiexie > /opt/huihiui 把两个文件内容合并到/opt/huihiui
cat 还有一个重要功能,允许将分行键入的内容输入到一个文件中去。
首先测试<<eof,这表示将键入的内容追加到标准输入 stdin 中 (不是从标准输入中读取), eof 可以随便使用其他符号代替。
cat >>xie <<EOF
EOF>>
第一种方案:>>filename<<eof或>filename<<eof
第二种方案:<<eof>filename或<<eof>>filename
tac 和 cat 字母正好是相反的,其作用也是和 cat 相反的,它会反向输出行,将最后一行放在第一行的位置输出,依此类推。但是,tac 没有显示行号的参数。
more
操作:
空格键(space):代表向下翻一页。
Enter:代表向下滚动一行。
-f:立刻显示出文件名以及目前显示的行数。
q:代表立刻离开more,不再显示该文件内容。
b:代表向上翻一页,该操作只对文件有用,对管道无用。
less
操作:
空格键(space)/[PageDown]:向下翻动一页。
[PageUp]:向上翻动一页。
/字符串:向下查询“字符串”功能。
?字符串:向上查询“字符串”功能。
n:重复前一个查询。
N:反向重复前一个查询。
q:离开less这个程序。
head
head [-n number] 文件
参数:
-q 隐藏文件名
-v 显示文件名
-c<数目> 显示的字节数。
-n:后面接数字,代表显示几行的意思。不带参数默认显示前10行。
例:head -2 /ect/password //查看前面两行代码
tail
tail [-n number] 文件
参数:
-q 不显示处理信息
-n:后面接数字,代表显示几行的意思。不带参数默认显示后10行
-f:表示持续检测后面所接的文件名,要等到按下ctrl+c才会结束检测。
-v 显示详细的处理信息
-c<数目> 显示的字节数
--pid=PID 与-f合用,表示在进程ID,PID死掉之后结束
-q, --quiet, --silent 从不输出给出文件名的首部
-s, --sleep-interval=S 与-f合用,表示在每次反复的间隔休眠S秒
例:
tail -f /var/log/secure //-f 动态查看文件尾部(实时查看文件的日志文件
tail -1 /etc/password //查看文件最后一行代码
tail /etc/password //默认查看文件后十行代码
nl
nl命令在linux系统中用来计算文件中行号
-b :指定行号指定的方式,主要有两种:
-b a :表示不论是否为空行,也同样列出行号(类似 cat -n);
nl -b a last.txt
-b t :如果有空行,空的那一行不要列出行号(默认值);
nl -b t last.txt
-n :列出行号表示的方法,主要有三种:
-n ln :行号在萤幕的最左方显示;
nl -n ln last.txt
-n rn :行号在自己栏位的最右方显示,且不加 0 ;
nl -n rn last.txt
-n rz :行号在自己栏位的最右方显示,且加 0 ;
du
评估文件系统的磁盘使用量:du(常用于评估目录或文件所占容量)
参数:
-a:列出所有的文件与目录容量,因为默认仅统计目录下面的文件量而已。
-h:以人们较易读的容量格式(G/M)显示。
-s:列出总量而已,而不列出每个个别目录的占用容量。
-S:不包括子目录下的总计,与-s有点差别。
-k:以KB列出容量显示。
-m:以MB列出容量显示。
-c:-total:对给出的文件或目录做总计。在统计非同一个目录文件大小时非常有用。
du -s、du和du -S的对比。du -s是只列总量,不列子目录;du不带参数是既列总量,也列子目录;du -S虽然列了子目录,但是统计总量的时候没有把子目录算进去。
# du -h /etc/ #查看目录及目录中的文件大小
# du -sh /etc/ #查看目录的总大小
df [选项] [文件]常用于查看磁盘空间使用情况
-a 全部文件系统列表
-h 方便阅读方式显示
-H 等于“-h”,但是计算式,1K=1000,而不是1K=1024
-i 显示inode信息
-k 区块为1024字节
-l 只显示本地文件系统
-m 区块为1048576字节
-T 文件系统类型
df -Thi
3、文件比较工具diff
diff [-bBi] from-file to-file
参数:
-b:忽略一行当中仅有多个空白的区别,例如(“about me”与“about me”视为相同)
-B:忽略空白行的区别。
-i:忽略大小写的不同
例:diff xiexie huihui
4、查看文件类型(file)
语 法:file [-beLvz][-f <名称文件>][-m <魔法数字文件>...][文件或目录...]
参 数:
-b 列出辨识结果时,不显示文件名称。
-c 详细显示指令执行过程,便于排错或分析程序执行的情形。
-f<名称文件> 指定名称文件,其内容有一个或多个文件名称呢感,让file依序辨识这些文件,格式为每列一个文件名称。
-L 直接显示符号连接所指向的文件的类别。
-m<魔法数字文件> 指定魔法数字文件。
-v 显示版本信息。
-z 尝试去解读压缩文件的内容。
file /etc/passsword
5、查看当前用户
1:查看自己的用户名:whoami
2:查看当前在线用户:users、who、w
id 用户 #查看用户
6.查看别名
查看别名:
type -a ll
ll is aliased to `ls -l --color=auto'
设置别名:
语法:alias 别名='命令'
alias ddd='df -Th'
alias ddd
alias ddd='df -Th'
7.查看文件/文件系统的详细信息显示
stat命令-->用来显示文件的详细信息,包括inode, atime, mtime, ctime
适用场景:
查看文件或目录的诸如atime,mtime,ctime等信息即可使用stat命令,也可使用ls命令,但相比而言,stat还可以看到设备号,环境等信息。
stat -f #文件系统