Linux文件类型及查找命令实践
1、文件属性
-
文件属性是指:
- 文件的大小,创建时间,类型,权限,属组等。
[root@oldboyedu ~]# ls -lih total 4.0k 33574978 -rw-------. 1 root root 1.7k apr 4 18:09 anaconda-ks.cfg [root@oldboyedu ~]# ls -lih /etc/ total 1.1m 51000206 drwxr-xr-x. 3 root root 101 apr 4 18:06 abrt 16881475 -rw-r--r--. 1 root root 16 apr 4 18:08 adjtime 16777784 -rw-r--r--. 1 root root 1.5k jun 7 2013 aliases 16777285 -rw-r--r--. 1 root root 12k apr 4 18:17 aliases.db 50334171 drwxr-xr-x. 2 root root 261 apr 4 18:22 alternatives 16881620 -rw-------. 1 root root 541 aug 9 2019 anacrontab 17167203 -rw-r--r--. 1 root root 55 aug 8 2019 asound.conf 51150791 drwxr-x---. 3 root root 43 apr 4 18:06 audisp 17528264 drwxr-x---. 3 root root 83 apr 4 18:17 audit 50331775 drwxr-xr-x. 2 root root 79 apr 4 18:23 bash_completion.d 16777785 -rw-r--r--. 1 root root 2.8k oct 31 2018 bashrc 34060666 drwxr-xr-x. 2 root root 6 mar 18 07:46 binfmt.d 16777318 -rw-r--r--. 1 root root 37 sep 5 2019 centos-release 16777319 -rw-r--r--. 1 root root 51 sep 5 2019 centos-release-upstream 35647 drwxr-xr-x. 2 root root 6 aug 4 2017 chkconfig.d 539069 drwxr-xr-x. 2 root root 36 apr 4 18:20 cron.d 17167190 drwxr-xr-x. 2 root root 42 apr 4 18:06 cron.daily 16881621 -rw-------. 1 root root 0 aug 9 2019 cron.deny
-
文件的属性总共10列
16881621 -rw-------. 1 root root 0 aug 9 2019 cron.deny 1 2 3 4 5 6 7 8 9 10
-
第一列
- 是文件的唯一标识,也称之为 inode(节点)号
-
第二列
-
第一个字符
-
是指文件类型
-
- 是代表文件类型为普通文件 (用f表示)
-
d 是代表文件类型为目录 (用d表示)
[root@oldboyedu ~]# ls -ld /etc/ drwxr-xr-x. 79 root root 8192 apr 9 17:51 /etc/ [root@oldboyedu ~]# ls -lp /etc/ total 1076 drwxr-xr-x. 3 root root 101 apr 4 18:06 abrt/ #以斜线结尾的都是目录 -rw-r--r--. 1 root root 16 apr 4 18:08 adjtime -rw-r--r--. 1 root root 1518 jun 7 2013 aliases -rw-r--r--. 1 root root 12288 apr 4 18:17 aliases.db drwxr-xr-x. 2 root root 261 apr 4 18:22 alternatives/ -rw-------. 1 root root 541 aug 9 2019 anacrontab -rw-r--r--. 1 root root 55 aug 8 2019 asound.conf drwxr-x---. 3 root root 43 apr 4 18:06 audisp/ [root@oldboyedu ~]# ls -f /etc/ abrt/ gnupg/ motd sasl2/ adjtime grep_colors mtab@ securetty aliases groff/ my.cnf security/ #@指的是连接文件
-
l 是代表文件类型为连接文件(用l表示)
[root@oldboyedu ~]# ls -l /etc/rc.local lrwxrwxrwx. 1 root root 13 apr 4 18:22 /etc/rc.local -> rc.d/rc.local
-
c是代表文件类型为字符设备 (用c表示)
[root@oldboyedu ~]# ls -l /dev/ttys2 crw-rw----. 1 root dialout 4, 66 apr 9 17:51 /dev/ttys2
-
b是代表文件类型为连接文件(用b表示)
[root@oldboyedu ~]# ls -l /dev/ | grep "^d" drwxr-xr-x. 2 root root 140 apr 9 17:51 block drwxr-xr-x. 2 root root 80 apr 9 17:51 bsg drwxr-xr-x. 3 root root 60 apr 9 17:51 bus drwxr-xr-x. 2 root root 2980 apr 9 17:51 char drwxr-xr-x. 3 root root 60 apr 9 17:51 cpu drwxr-xr-x. 5 root root 100 apr 9 17:51 disk drwxr-xr-x. 2 root root 80 apr 9 17:51 dri drwxr-xr-x. 2 root root 0 apr 9 17:51 hugepages drwxr-xr-x. 4 root root 300 apr 9 17:51 input drwxr-xr-x. 2 root root 60 apr 9 17:51 mapper drwxrwxrwt. 2 root root 40 apr 9 17:51 mqueue drwxr-xr-x. 2 root root 60 apr 9 17:51 net drwxr-xr-x. 2 root root 0 apr 9 17:51 pts drwxr-xr-x. 2 root root 60 apr 9 17:51 raw drwxrwxrwt. 2 root root 40 apr 9 17:51 shm drwxr-xr-x. 3 root root 200 apr 9 17:51 snd drwxr-xr-x. 2 root root 60 apr 9 17:51 vfio
-
s是代表文件类型为连接文件(用s表示)
- .sock文件也是一类特殊的文件,这类文件通常用在网络之间,进行数据连接,如:我们可以启动一个程序来监听客户端的请求,客户端可以通过套接字来进行数据通信。
- 进程之间通信的文件
[root@oldboyedu ~]# ls -l /dev/ | grep "^s" srw-rw-rw-. 1 root root 0 apr 9 17:51 log
-
-
-
-
2、查命令所在的路径
-
which
[root@oldboyedu ~]# which ls alias ls='ls --color=auto' /usr/bin/ls [root@oldboyedu ~]# which cp alias cp='cp -i' /usr/bin/cp [root@oldboyedu ~]# which ip /usr/sbin/ip [root@oldboyedu ~]# which cd /usr/bin/cd
3、系统变量(系统查找命令的位置)
- $path 超重点
[root@oldboyedu ~]# echo $path /usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/root/bin #系统默认从上面路径查找,以:分割,每分割一次为一个路径
#示例一 [root@oldboyedu ~]# cat /usr/bin/cc echo $1 [root@oldboyedu ~]# chmod +x /usr/bin/cc [root@oldboyedu ~]# cc sun sun [root@oldboyedu ~]# which cc /usr/bin/cc
4、显示命令及其相关文件全路径
-
whereis
[root@oldboyedu ~]# whereis ls ls: /usr/bin/ls /usr/share/man/man1/ls.1.gz [root@oldboyedu ~]# whereis cp cp: /usr/bin/cp /usr/share/man/man1/cp.1.gz
-
-b 显示二进制命令文件路径
[root@oldboyedu ~]# whereis -b cp cp: /usr/bin/cp
-
5、快速定位文件路径
-
locate
- 查找文件路径,是从数据库查询
[root@oldboyedu ~]# yum provides locate #查看命令所需要的rpm包 [root@oldboyedu ~]# yum install mlocate -y [root@oldboyedu ~]# updatedb #更新库 [root@oldboyedu ~]# locate ls
6、查找目录下的文件
-
find
- 查找原理:磁盘遍历 速度慢
[root@oldboyedu ~]# touch oldboy.txt [root@oldboyedu ~]# find ~ -name "oldboy.txt" /root/oldboy.txt
- 模糊查找
[root@oldboyedu ~]# find ~ -name "oldboy*" /root/oldboy.txt [root@oldboyedu ~]# find /etc/sysconfig/ -name "ifcfg*" /etc/sysconfig/network-scripts/ifcfg-lo /etc/sysconfig/network-scripts/ifcfg-eth0
- -type 按文件类型查找
[root@oldboyedu ~]# find /etc/sysconfig/ -type f -name "ifcfg-eth0" #f文件 /etc/sysconfig/network-scripts/ifcfg-eth0
[root@oldboyedu ~]# find /etc/ -type d -name "sysconfig" #目录 /etc/sysconfig [root@oldboyedu ~]# find /etc/ -type d -name "sys*" /etc/selinux/targeted/active/modules/100/sysadm /etc/selinux/targeted/active/modules/100/sysadm_secadm /etc/selinux/targeted/active/modules/100/sysnetwork /etc/selinux/targeted/active/modules/100/sysstat /etc/selinux/targeted/active/modules/100/systemd /etc/systemd /etc/systemd/system /etc/systemd/system/system-update.target.wants /etc/systemd/system/sysinit.target.wants /etc/dbus-1/system.d /etc/sysctl.d /etc/sysconfig /etc/xdg/systemd /etc/networkmanager/system-connections /etc/latrace.d/headers/sysdeps
-
!取反
[root@oldboyedu ~]# find /etc/sysconfig/network-scripts/ -type f ! -name "ifcfg-eth0" /etc/sysconfig/network-scripts/ifcfg-lo /etc/sysconfig/network-scripts/ifdown-bnep /etc/sysconfig/network-scripts/ifdown-eth /etc/sysconfig/network-scripts/ifdown-ippp /etc/sysconfig/network-scripts/ifdown-ipv6 /etc/sysconfig/network-scripts/ifdown-post /etc/sysconfig/network-scripts/ifdown-ppp /etc/sysconfig/network-scripts/ifdown-routes /etc/sysconfig/network-scripts/ifdown-sit /etc/sysconfig/network-scripts/ifdown-tunnel /etc/sysconfig/network-scripts/ifup-aliases /etc/sysconfig/network-scripts/ifup-bnep /etc/sysconfig/network-scripts/ifup-eth /etc/sysconfig/network-scripts/ifup-ippp /etc/sysconfig/network-scripts/ifup-ipv6 /etc/sysconfig/network-scripts/ifup-plip /etc/sysconfig/network-scripts/ifup-plusb /etc/sysconfig/network-scripts/ifup-post /etc/sysconfig/network-scripts/ifup-ppp /etc/sysconfig/network-scripts/ifup-routes /etc/sysconfig/network-scripts/ifup-sit /etc/sysconfig/network-scripts/ifup-tunnel /etc/sysconfig/network-scripts/ifup-wireless /etc/sysconfig/network-scripts/init.ipv6-global /etc/sysconfig/network-scripts/network-functions /etc/sysconfig/network-scripts/network-functions-ipv6 /etc/sysconfig/network-scripts/ifdown-team /etc/sysconfig/network-scripts/ifdown-teamport /etc/sysconfig/network-scripts/ifup-team /etc/sysconfig/network-scripts/ifup-teamport
-
-exec 对查找的动作在处理
- {} 把前面查找到的结果放到这里
- 注意使用这个命令时{}和;中间必须有空格
- \代表转义,这里是把;转换成原本的意思
[root@oldboyedu ~]# find ~ -type f -name "oldboy*" /root/oldboy.txt [root@oldboyedu ~]# find ~ -type f -name "oldboy*" -exec rm -f {} \; [root@oldboyedu ~]# ls anaconda-ks.cfg
-
-mtime 按修改时间查找
- +n 几天之前
- n 几天
- -n 几天之后
[root@oldboyedu ~]# find ~ -type f -mtime +3 #三天之前 /root/.bash_logout /root/.bash_profile /root/.bashrc /root/.cshrc /root/.tcshrc /root/anaconda-ks.cfg /root/.bash_history [root@oldboyedu ~]# find ~ -type f -mtime +1 #一天之前 /root/.bash_logout /root/.bash_profile /root/.bashrc /root/.cshrc /root/.tcshrc /root/anaconda-ks.cfg /root/.bash_history [root@oldboyedu ~]# find ~ -type f -mtime 3 #第三天 [root@oldboyedu ~]# find ~ -type f -mtime -3 #三天之后 /root/.viminfo
7、分组(默认空格)
-
xargs
- -n 指定几个为一组
[root@oldboyedu ~]# echo {1..10} > text.txt [root@oldboyedu ~]# xargs -n 3 < text.txt 1 2 3 4 5 6 7 8 9 10 [root@oldboyedu ~]# xargs -n 5 < text.txt 1 2 3 4 5 6 7 8 9 10 [root@oldboyedu ~]# xargs -n 1 < text.txt 1 2 3 4 5 6 7 8 9 10 [root@oldboyedu ~]# xargs < text.txt 1 2 3 4 5 6 7 8 9 10
- -d 指定分隔符
[root@oldboyedu ~]# xargs -n 1 < text.txt > text1.txt [root@oldboyedu ~]# cat text.txt 1 2 3 4 5 6 7 8 9 10 [root@oldboyedu ~]# xargs -d "\n" < text1.txt 1 2 3 4 5 6 7 8 9 10 [root@oldboyedu ~]# xargs -d "\n" -n 1 < text1.txt 1 2 3 4 5 6 7 8 9 10 [root@oldboyedu ~]# xargs -d "\n" -n 3 < text1.txt 1 2 3 4 5 6 7 8 9 10
[root@oldboyedu ~]# xargs < text1.txt 1|2|3|4|5|6|7|8|9|10 [root@oldboyedu ~]# xargs -d "|" < text1.txt 1 2 3 4 5 6 7 8 9 10
-
| 管道符
- 把管道的左边的结果赋给右边执行
[root@oldboyedu ~]# find /etc/sysconfig/network-scripts/ -type f -name "ifcfg-eth0" | xargs ls -l -rw-r--r--. 1 root root 362 apr 4 18:08 /etc/sysconfig/network-scripts/ifcfg-eth0
-
特殊 -i 把{}当做前面只查找的结果
[root@oldboyedu ~]# find /etc/sysconfig/network-scripts/ -type f -name "ifcfg-eth0" | xargs cp {} /opt/ cp: target ‘/etc/sysconfig/network-scripts/ifcfg-eth0’ is not a directory [root@oldboyedu ~]# find /etc/sysconfig/network-scripts/ -type f -name "ifcfg-eth0" | xargs -i cp {} /opt/ [root@oldboyedu ~]# ll /opt/ total 4 -rw-r--r--. 1 root root 362 apr 9 19:00 ifcfg-eth0 [root@oldboyedu ~]# find /etc/sysconfig/network-scripts/ -type f -name "ifcfg-eth0" | xargs -i mv {} /opt/ [root@oldboyedu ~]# ll /opt/ total 4 -rw-r--r--. 1 root root 362 apr 4 18:08 ifcfg-eth0
8、显示系统时间和日期
-
date
-
-s 设置系统时间
[root@oldboyedu ~]# date thu apr 9 19:01:57 cst 2020 [root@oldboyedu ~]# date -s "2020/01/01 00:00:00" wed jan 1 00:00:00 cst 2020 [root@oldboyedu ~]# date wed jan 1 00:00:03 cst 2020 [root@oldboyedu ~]# clock -w #计入到主板里
[root@localhost ~]# date +%f #年月日 2020-01-01 [root@localhost ~]# date +%y #年 2020 [root@localhost ~]# date +%y #年后两位 20 [root@localhost ~]# date +%m #月 01 [root@localhost ~]# date +%d #日 01 [root@localhost ~]# date +%h #时 00 [root@localhost ~]# date +%m #分 02 [root@localhost ~]# date +%s #秒 15
-
9、打包压缩
-
tar
- -z 压缩
- -c 创建
- -v 详情
- -f 文件
- -t 查看
- -c 指定位置解压
- -x 解压
- -h 压缩链接文件
[root@oldboyedu /]# tar -zcvf data.tar.gz ./data ./data/ ./data/1.txt ./data/2.txt ./data/3.txt ./data/4.txt ./data/5.txt ./data/6.txt ./data/7.txt ./data/8.txt ./data/9.txt ./data/10.txt ./data/a/ ./data/b/ [root@oldboyedu /]# tar -zcvf /opt/data.tar.gz ./data ./data/ ./data/1.txt ./data/2.txt ./data/3.txt ./data/4.txt ./data/5.txt ./data/6.txt ./data/7.txt ./data/8.txt ./data/9.txt ./data/10.txt ./data/a/ ./data/b/ [root@oldboyedu /]# tar -tf /opt/data.tar.gz ./data/ ./data/1.txt ./data/2.txt ./data/3.txt ./data/4.txt ./data/5.txt ./data/6.txt ./data/7.txt ./data/8.txt ./data/9.txt ./data/10.txt ./data/a/ ./data/b/