Linux 命令 | 运维必学,文件目录管理操作命令实践集锦

1800d1cb7d17b12e39e24774fd24112e.jpeg

[ 知识是人生的灯塔,只有不断学习,才能照亮前行的道路。]

大家好,我是【WeiyiGeek/唯一极客】一个正在向全栈工程师(SecDevOps)前进的技术爱好者  

作者微信:WeiyiGeeker  
公众号/知识星球:全栈工程师修炼指南  
主页博客: https://weiyigeek.top - 为者常成,行者常至

文章目录:

f0127f68d3aac547c1619378a7c11d5f.png

0x00 前置基础知识

描述:此 Linux 命令 | 系列 文章将作为《#运维从业必学》专栏辅助学习知识,这是也是每位Linux运维工程师必须掌握的基础知识,是作者耗费心力、时间进行总结,希望对大家有所帮助,所以若有帮助还请多多关注、转发、在看作者,鼓励作者创造更多实践文章吧。

所以若是在其他转发平台看到,此文章请一定要关注作者【全栈工程师修炼指南】公众号。

本文章将围绕 Linux 针对文件目录管理等基础命令进行学习,除此之外,包含了作者在日常运维工作中使用到的一些命令的注意事项总结,以及使用频率稍低的命令及参数,但是又非常高级使用的方法,相信各位看友学习之后都会有所收获,下面就跟随作者一起学习吧!

3934a69dec33271e36a06542e39a0298.jpeg

 

原文连接:Linux 命令 | 运维必学,文件目录管理操作命令实践集锦本章将围绕Linux针对文件目录管理等基础命令进行学习,除此之外,包含了作者在日常运维工作中使用到的一些命令的注意事项总结,以及使用频率稍低的命令及参数,但是又非常高级使用的方法,相信各位看友学习后都会有所收获,下面跟随作者一起学习进步吧!icon-default.png?t=N7T8https://mp.weixin.qq.com/s/xeiCX0f2U_YQ3HIuSsgnjw

Linux 命令提示符格式说明:

//示例:
[root@localhost ~]#

//说明:
root:  当前登录用户   root是Linux中管理员用户
localhost:主机名
 ~        当前所在目录(家目录)
 #       超级用户的提示符
 $       普通用户的提示符是

Linux 命令书写规范

答:一条完整的linux基本由两部分组成,命令和参数,命令和参数之间用空格隔开,并用”-“或者”--“连接 例如,hostname -i

温馨提示:命令与文件补全,在Bash(sh)中命令与文件补全是非常方便与常用的功能我们只要在输入命令或文件时,按Tab键就会自动进行补全。

 

文件通配符模式描述:文件通配符(Wildcard Patter)可以用来匹配符合条件的多个文件,方便批量管理文件,其采用特定的符号,表示特定的含义,此符号称为元meta字符,常见的通配符如下:

* 匹配任意多个字符,但不匹配"."开头的文件,及隐藏文件。
? 匹配任意一个字符,一个汉字与字符也算。
~ 当前用户家目录
~+ 当前工作目录
~- 当前目录的上一个目录
~weiyigeek 用户weiyigeek的家目录
[0-9] 匹配数字范围
[a-z] 匹配小写字母范围
[A-Z] 匹配大写字母范围
[weiyigeek] 匹配列表中任意一个字符
[^weiyigeek] 排除匹配列表中任意一个字符,即匹配列表以外的字符。

除此之外,还支持 perl 正则中的内容匹配字符:

[:space:]: 空格
[:blank:]: 水平空白字符
[:punct:]: 标点符号
[:print:]: 可打印字符
[:cntrl:]: 控制字符(不可打印)
[:graph:]: 图形字符

[:digit:]: 所有的数字 [0~9]
[:lower:]: 小写字母   [a-z]
[:upper:]: 大写字母   [A-Z]
[:alpha:]: 所有字母   [a-zA-z]
[:alnum:]: 所有的数字和字母 [0~9a-zA-z]
[:xdigit:]: 十六进制字符 [0x0000-0xFFFF]
 

Linux 文件与目录的类型

-rwxr-xr-x :- 代表文件 
drwxr-xr-x :d 代表目录 
lrwxrwxrwx :l 软链接文件
crw-rw---- :c 字符设备
brw-rw---- :b 块设备
prw------- :p 管道文件
srw-rw-rw- :s 套接字文件
 

文件与目录的权限

# 首位表示文件类型,后9位表示权限,每3个一组,其中rwx(数字表示:421)分别代表读(read)、写(write)、执行权限(execute),若有`-`表示对应无权限。
d rwx    rwx     r-x.
  所有者 所属组  其他人

# 表示文件,权限为:所有者有读、写权限,而所属组,其他人只有读权限。
$ ls -alh .bash_history
-rw-r--r--  1 weiyigeek weiyigeek   39 Mar 21  2022 .bash_history

# 表示目录,权限为:所有者有读、写,进入权限,而所属组,其他人无权限。
$ ls -la | grep -w "\.ssh"
drwx------  2 weiyigeek weiyigeek  4096 Mar 22  2022 .ssh

示例,创建一个文件及目录,查看其默认权限,由于UMASK变量值为022,所以文件默认权限为644,目录默认权限为755

$ touch file.txt &&  mkdir file

$ ls -alh | grep "file"
drwxr-xr-x(777 - 022  2 weiyigeek weiyigeek  4.0K May 19 13:43 file
-rw-r--r-- (666 - 022) 1 weiyigeek weiyigeek    0 May 19 13:43 file.txt

0x01 文件管理命令

pwd 命令 - 显示当前目录

描述:在Linux系统中,每个Shell或系统进程都有一个当前工作目录(CWD, Current Work Directory),我们可使用pwd命令(Print Working Directory)可以显示当前工作目录的绝对路径。

语法参数

pwd [-LP]
# 参数
-L :显示链接路径,默认值
-P :显示真实路径而非使用连接(Link)路径

使用示例:

# 1.获取当前目录位置
[root@localhost home]$ pwd
/home

# 2.显示真实路径而非使用连接(Link)路径
[root@localhost ~]$ ls -ld /var/lock
  lrwxrwxrwx 1 root root 9 Apr 23 14:40 /var/lock -> /run/lock
❯ cd /var/lock
❯ pwd
  /var/loc    # 对比点
❯ pwd -P   
  /run/lock   # 对比点(真实路径)

知识扩展:搞过Windows运维与开发的一定知道, 文件目录可以用绝对路径相对路径访问。

  • 绝对路径(absolute):由根目录(/)开始写起的文件名或目录名称,例如 /root/directory

  • 相对路径(relative):相对于目前路径的文件名写法, 例如 ./ssh~/directory 等等, 反正不是 / 开头就属于相对路径的写法。

 

cd 命令 - 切换工作目录

描述:在Linux系统中,我们可使用cd命令来切换当前工作目录,例如 cd /home/weiyigeek,除此之外还有其他快捷方式进行切换。

常用命令:

# 常规
cd /目录

# 五种特殊的目录
cd ~  或者 cd /root/ 回到家目录
cd ~weiyigeek 直接到weiyigeek的家目录
cd -  回到上次所在目录
cd .. 回到上一级目录
cd .  进入当前目录
cd $_ 进入上一条命令最后参数的目录

使用示例:

# 示例1. 添加weiyigeek目录进入家目录
$ useradd -m weiyigeek
$ cd ~weiyigeek
$ cd /home/weiyigeek
/home/weiyigeek

# 示例2,进入上一条命令最后参数的目录。
$ echo /tmp/ssh-XXXX3EKOYz/ /
/tmp/ssh-XXXX3EKOYz/ /
$ cd $_
[root@rocky-server / 192.168.228.128 14:43]#

# 示例3.进入/bin 真实路径,即 /usr/bin
cd -P /bin

温馨提示: 使用快捷键 ctrl+L 清屏,按两下tab键目录/命令补全。温馨提示:相关环境变量有$PWD表示当前目录,$OLDPWD表示上一次所在目录。

 

ls 命令 - 查看文件和目录

描述: 主要用于显示、过滤、筛选,排序指定的Linux系统中的目录和文件(list dirctory) 。

语法参数:

ls [选项][文件或目录]

#[选项]
-a, --all 同时显示出以.开头的内容,包括.目录(当前目录)和..目录(父目录).
-A, --almost-all 同时显示出以.开头的内容,不包括.目录和..目录.
     --author 在使用-l参数时同时显示出文件创建者.
-B, --ignore-backups 不显示以~结尾的文件(备份文件).
-c, (默认)按最近修改时间来排列显示条目,新的在前面.-lt按最近修改时间排列条目,并显示修改时间.-l显示修改时间,但按字母顺序排列.
-C ,当文件数超过8个时,以多列方式来显示.
      --color[=WHEN] 设置是否用颜色区分条目类别,WHEN可以为never,always和auto.never和always都很明了,auto是指标准输出和terminal绑定时才显示颜色.颜色由环境变量LS_COLORS决定.
-d, --directory 之列出目录条目,且不列出快捷方式.
-f 不排序列出,启用-aU,同时禁用-ls和--color,在文件数超过百万级别时使用.

-F 针对不同文件类型(File type)附加不同的符号:*/=>@|
-g 类似-l,但不显示除所有者.
-G, --no-group 在-l中不列出组名.
-h, --human-readable 在-l中以更易理解的方式列出文件大小. (e.g., 1K 20M)
     --si 同上,但倍数是1000而不是1024
-i, --inode 显示出每个条目的index number.
-I(i的大写), --ignore=PATTERN 不列出符合shell样式的条目.(不显示排除的文件)
    --hide=PATTERN 但是会被-a或-A覆盖.
-l 以详细列表的模式展示信息.
-m 所有项目用逗号分隔显示.
-n, --numeric-uid-gid 类似-l,同时列出用户和分组信息.
-o 类似-l,但不列出组信息.
-p, --indicator-style=slash 在目录后面加上/
-r, --reverse 反向排序显示.
-R, --recursive 列出所有子目录.
-s, --size 显示出每个文件被分配的空间.
-S 按大小来排序文件.
    --sort=WORD 根据WORD来排序,可以为none,extension,size,time和version.
    --time=WORD 在-l里,根据WORD来替代修改时间,可以为atime,access,use,ctime,status.
-t 根据修改时间排序,新的在前面.
-U 不排序,根据系统原有(目录)顺序排列.
-v 根据版本号排列.
-x 按行的顺序排列.
-X 根据扩展名排序.
-1 一行只显示一个项目.
--full-time : 以完整时间模式进行输入
--time={atime,ctime} : 输出访问时间或改变权限属性时间(ctime)而非内容更改的时间(mtime)
--color={never,always,auto} : 绝不/显示颜色/自行决定 

# 返回值
0 正常.
1 小问题(e.g., 不能进入子目录).
2 严重问题(e.g., 不能进入命令行参数显示的目录).
 

使用示例

# 0. 不显示. 与 .. 目录
$ls -A

# 1.显示除dingding.sh之外得文件与目录
$ls -I dingding.sh
  dingding.py  quartz_uninstall.sh  startWechat.sh  uninstall.sh
$ls -I *.yml  #不加单双引号将匹配显示同配置
  handlers.yml  listen.yml  notify.yml  tag.yml  test.yml  version.yml
$ls -I "*.yml"  #即反向匹配显示
 listen.yml.save  notify.yml.save  test.txt
$ls -I "*5" -I "*0" |xargs rm # 将要删除的文件作为参数通过xargs传给rm命令


# 2.人性化显示所有文件以及文件inode
$ls -ialh
131087 -rw-------   1 root root  16K May 31 12:32 .bash_history

# 3.以人类可便读的单位显示目录使用空间,并列出用户和组的 ID 号(类似 -l)
$ls -nh
总用量 1.1M
-rw-------. 1 0 0 1.4K  3月 14 14:51 anaconda-ks.cfg
srw-------. 1 0 0    0  3月 28  2024 test2
-rw-r--r--. 1 0 0  19K  3月 28  2024 tmux-client-3523.log
-rw-r--r--. 1 0 0 1.1M  3月 28  2024 tmux-server-3525.log


# 4.按照扩展名排序显示文件
$ls -X
drwxr-xr-x 2 root root    4096 Mar  1 10:35 pythonDemo
drwxr-xr-x 2 root root    4096 May 31 14:44 www
-rwxr-xr-x 1 root root     994 May 13 22:40 dingding.py
-rw-r--r-- 1 root root 5803476 May  6  2018 dingding.sh

# 5.使用大小,时间来排序
ls -1h --sort=size     # 按照大小排序
ls -lhs  
ll -Sh
ls -1h --sort=time     # 按照时间排序
ls -lht
ls -laht 
ls -lht -r             # 按照时间反向排序
ls -1h --sort=version  # 按照版本排序

# 6.不显示所有者/组和把权限转换成数字(uid/guid号)
$ls -lG
$ls -ln

# 7.显示文件和目录得安全性上下文(Selinux)
$ls -alhZd /root/ #ll -Zd .
dr-xr-x---. root root system_u:object_r:admin_home_t:s0 /root/

# 8.显示完整的文件的修改时间
$ls -alh --full-time /etc/group
-rw-r--r-- 1 root root 735 2020-05-09 17:10:25.795053900 +0800 /etc/group

# 9.查看修改时间/访问时间/状态修改时间
❯ ls -al core-js-banners; ls -al --time=atime core-js-banners; ls -al --time=ctime core-js-banners
-rw-r--r-- 1 root root 1 Oct 18 12:55 core-js-banners  # 修改时间
-rw-r--r-- 1 root root 1 Oct 10 09:48 core-js-banners  # 访问时间
-rw-r--r-- 1 root root 1 Oct 18 12:55 core-js-banners  # 权限属性时间

# 10.统计文件夹下文件个数包括子文件 和 统计文件夹下目录个数,包括子目录
ls -lR | grep "^-"| wc -l
ls -lR | grep "^d"| wc -l

# 11.查看目录下的可执行文件。
# 符号包括: / 表明是一个目录; @ 表明是到其它文件的符号链接; * 表明是一个可执行文件
ls -F | grep "/$"
ls -F | grep "@$"
ls -F | grep "*$"
  # mkreleasehdr.sh*
  # redis-benchmark*
  # redis-check-aof*
  # redis-check-rdb*
  # redis-cli*
  # redis-sentinel*
  # redis-server*
  # redis-trib.rb*

# 12.查看目录下所有文件目录但不进行排序输出到 filelist.txt,在文件目录数过多时非常实用。
ls -1 -f > ~/filelist.txt

# 13.使用通配符方式过滤文件,只显示后缀以.txt结尾的文件
ls -alh *.txt

# 14.显示file1.txt~file10.txt以及a~z.txt文件
ls file{1..10}.txt {a..z}.txt

# 15.只显示当前目录下的隐藏目录
l.
.   .bash_history  .bash_profile  .config  .lesshst  .tcshrc     .viminfo
..  .bash_logout   .bashrc        .cshrc   .ssh      .tmux.conf
4c90c170d0979ab7074edf2eeaaf8597.png
weiyigeek.top-ls命令使用示例

知识扩展: 示例1.文件目录的三个主要的变动时间(创建,修改,访问)时间。

  • 1.modification time : 即mtime当文件内容数据发生改变时候将会被更新; 注意此处指的是文件的内容而不是文件的属性权限;

  • 2.status time : 即ctime当文件的状态发生改变时候将会被更新; 比如权限和属性被更改;

  • 3.access time : 即atime当文件的内容被读取时候将会被更新; 比如使用cat读取/etc/man.config便会更新;

❯ ls -lh /etc/manpath.config
-rw-r--r-- 1 root root 5.1K Feb 26  2020 /etc/manpath.config   # mtime 

❯ ls -lh --time=atime /etc/manpath.config
-rw-r--r-- 1 root root 5.1K Apr 23 14:41 /etc/manpath.config   # atime 
                               
❯ ls -lh --time=ctime /etc/manpath.config
-rw-r--r-- 1 root root 5.1K May  9 16:29 /etc/manpath.config   # ctime
  • 示例1:显示所有的文件并人性化显示大小以及列表结果的解析

# 为例来说明:
-rw-r--r--[10个字符] 1[硬连接] root root 5803476 May  6  2018 dingding.sh

# 1.第一列为文件种类及权限:其中第一个字符表示文件的种类
即,-表示是普通文件,d表示为目录,c表示为字符设备,b表示为块设备,来表示连接文件
后面的九位:每3个字符为一块表示了此文件(目录)的属主、属组及others的权限
其中 r表示read,w表示write,x表示execute,-表示无权限

# 2.第二列表示硬链接个数:
文件每增加一个硬链接,数字会增加1,默认从1开始
1表示无硬链接文件,
2表示他是目录,注意目录是不能做硬链接

# 3.第三列为文件(目录)的属主(user)
# 4.第四列为文件(目录)的属组(group)
# 5.第五列为文件(目录)的大小,单为为字节(size)
# 6.第六列为文件(目录)创建时间或最后一次访问时间
顺序为月、日、时间,如果该时间离现在过久则直接显示年份

注意:对目录如果没有w权限,即使里面的文件有写权限,也不能对文件进行移动,重命名操作,此时需要给目录加上w权限
  • 示例2.自定义ls命令针对不同后续文件的颜色展示, 路径针对RHEL 、CentOS、Rocky 系统有效存在, 修改后查看相关变量。

$ vim /etc/DIR_COLORS
.jpg 01:31

$ echo $LS_COLORS

温馨提示:CentOS 与 Ubuntu 系统中使用 ls 别名 ll命令其展示效果是不同的,这是由于其ll别名中ls参数不一样,Ubuntu 会以不同的后缀作为区别其文件类型。

# CentOS
$ alias ll
alias ll='ls -l --color=auto'
# Ubuntu
alias ll='ls -alF'

ec35c3e56bbe255dd152b9641590684e.png

weiyigeek.top-不同发行版ll命令的区别图

dir 命令 - 列出给定文件(默认为当前目录)的信息。

描述:dir 命令与ls 命令功能相差不多,所以此处简单介绍,不要求掌握日常运维中也是常使用ls命令。

语法参数

$ dir [选项][文件或目录]

# 参数
-a 显示所有文件,包括隐藏文件
-l 显示详细信息
-f 不进行排序,-aU 选项生效,禁用 -ls --color
-d, --directory 当遇到目录时列出目录本身而非目录内的文件
-h, --human-readable 人性化显示文件大小
-i, --inode 显示inode
-r, --reverse   逆序排列
-R, --recursive 递归显示子目录

示例:

# 示例1:显示所有的文件并人性化显示大小与inode
$ dir -lhi
total 5.6M
139002 -rwxr-xr-x 1 root root  994 May 13 22:40 weiyigek.py
139000 -rw-r--r-- 1 root root 5.6M May  6  2018 weiyigek.sh

# 示例2.递归显示子目录及文件
$ dir -R

10a1dc8563619cc2b1f498bcb9fc5be1.png

weiyigeek.top-dir命令使用示例图

tree 命令 - 以树形结构显示文件目录

描述:此tree命令可以以树形结构来显示Linux文件系统中的目录,其功能类似于Windows系统中的tree命令。

usage: tree [-acdfghilnpqrstuvxACDFJQNSUX] [-H baseHREF] [-T title ]
        [-L level [-R]] [-P pattern] [-I pattern] [-o filename] [--version]
        [--help] [--inodes] [--device] [--noreport] [--nolinks] [--dirsfirst]
        [--charset charset] [--filelimit[=]#] [--si] [--timefmt[=]<f>]
        [--sort[=]<name>] [--matchdirs] [--ignore-case] [--fromfile] [--]
        [<directory list>]


# 参数
-d:只显示目录
-L: 指定显示层级。
-P pattern: 指定通配符匹配到的路径。

使用实例

# 1.显示当前目录的树状结构:
tree
  # .
  # ├── dir01
  # │   └── test.txt
  # ├── dir02
  # │   └── test.txt
  # ├── issue
  # ├── issue~
  # ├── issue.~1~
  # └── issue.~2~

# 2.显示指定目录的树状结构:
tree /path/to/directory

# 3.显示指定目录下的所有文件,包括隐藏文件:
tree -a /path/to/directory

# 4.显示指定目录的树状结构,并限制显示的层级深度:
tree -L 2 /path/to/directory

# 5.显示文件夹和文件的权限信息:
tree -p /tmp
  # .
  # ├── [drwxr-xr-x]  dir01
  # │   └── [-rw-r--r--]  test.txt
  # ├── [drwxr-xr-x]  dir02
  # │   └── [-rw-r--r--]  test.txt
  # ├── [-rw-r--r--]  issue
  # ├── [-rw-r--r--]  issue~
  # ├── [-rw-r--r--]  issue.~1~
  # └── [-rw-r--r--]  issue.~2~
  # 2 directories, 6 files

# 6.显示文件夹和文件的大小:
tree -s /path/to/directory
  #   .
  # ├── [         22]  dir01
  # │   └── [          5]  test.txt
  # ├── [         22]  dir02
  # │   └── [          5]  test.txt
  # ├── [          5]  issue
  # ├── [         23]  issue~
  # ├── [          5]  issue.~1~
  # └── [          5]  issue.~2~

# 7.以图形符号代替线条来绘制树状结构:
tree -F /path/to/directory

# 8.显示文件夹和文件的修改时间:
tree -D /path/to/directory
  # ├── [Mar 24 15:44]  dir01
  # │   └── [Mar 24 15:44]  test.txt
  # ├── [Mar 24 15:44]  dir02
  # │   └── [Mar 24 15:44]  test.txt
  # ├── [Mar 24 15:44]  issue
  # ├── [Mar 24 16:12]  issue~
  # ├── [Mar 24 15:44]  issue.~1~
  # └── [Mar 24 15:44]  issue.~2~

086f5b79bb2d57474f13e7e514434558.png

weiyigeek.top-tree命令使用示例图

mkdir 命令 - 新建立目录

描述:此mkdir(Make Directory)命令用于在Linux中创建单个目录或多个目录。

语法参数:

mkdir -vp 目录名 

# 参数
-p 用来递归创建
-m 配置创建目录时候的权限而不需要看默认权限(umask)
-v 显示建立过程

使用示例:

# 示例0.建立单个目录
mkdir weiyigeek

# 示例1.递归建立多个目录
mkdir -vp /tmp/{oa,bbs,video}  #采用数组建立个目录
mkdir: created directory ‘/tmp/oa’
mkdir: created directory ‘/tmp/bbs’
mkdir: created directory ‘/tmp/video’

# 示例2.建立父目录然后再每个父目录中建立子目录
mkdir -vp /tmp/{a,b,c}/{test1,test2}
# mkdir: created directory '/tmp/a'
# mkdir: created directory '/tmp/a/test1'
# mkdir: created directory '/tmp/a/test2'
# mkdir: created directory '/tmp/b'
# mkdir: created directory '/tmp/b/test1'
# mkdir: created directory '/tmp/b/test2'
# mkdir: created directory '/tmp/c'
# mkdir: created directory '/tmp/c/test1'
# mkdir: created directory '/tmp/c/test2'

# 示例3.批量创建dir1~dir100一百个目录。
mkdir -v dir{1..100}

# 示例4.在创建目录的同时指定权限
mkdir -m 711 /tmp/weiyigeek  # 新建权限rwx--x--x的weiyigeek目录
ls -ld /tmp/weiyigeek
  # drwx--x--x 1 root root 4096 Oct 18 12:31 /tmp/weiyigeek

touch 命令 - 修改文件实际或者创建新的文件

描述:touch命令不常用,一般在使用make的时候可能会用来修改文件时间戳或者新建一个不存在的文件。

语法参数:

用法:touch [选项] 文件 

# 参数
-a 或--time=atime或--time=access或--time=use  只更改存取时间。
-m 或--time=mtime或--time=modify  只更改变动时间。
-t 使用指定的日期时间,而非现在的时间 use [[CC]YY]MMDDhhmm[.ss]
-c 或--no-create  不建立任何文档。
-d 使用指定的日期时间,而非现在的时间。
-f 此参数将忽略不予处理,仅负责解决BSD版本touch指令的兼容性问题。
-r 把指定文档或目录的日期时间,统统设成和参考文档或目录的日期时间相同。

实际案例:

# 示例1.建立文件与指定时间修改文件
$ touch create.txt
$ touch -t 201908031122 1.txt
$ ls -lh
-rw-r--r-- 1 root root 0 Aug  3  2019 1.txt
-rw-r--r-- 1 root root 0 May 31 15:48 create.txt

# 示例2.采用{}符号批量创建文件
$ touch index-{1..10}.html

# 示例3.时间调整将某个文件的认证修改为目前日期(mtime和atime)
$ echo > hello.txt
$ touch -d '2 day ago' hello.txt
$ ls -alh hello.txt
-rw-r--r-- 1 root root 1 Oct 16 17:37 hello.txt
$ ls -ailh hello.txt; ls -alhi --time=atime hello.txt;ls -ailh --time=ctime hello.txt
13229323905543610 -rw-r--r-- 1 root root 1 Oct 16 17:37 hello.txt  # 修改
13229323905543610 -rw-r--r-- 1 root root 1 Oct 16 17:37 hello.txt  # 访问
13229323905543610 -rw-r--r-- 1 root root 1 Oct 18 17:37 hello.txt  # 权限属性变更

rm 命令 - 删除文件或目录

描述:删除空目录(Remove Empty Directory),删除非空目录或文件; 温馨提示: 慎用 rm 命令,如果执行了 rm -rf / 会删掉根目录下的所有文件,如果是生产环境那就准备跑路吧😄;

语法参数:

rmdir【目录名】
rm [选项]【目录/文件】

# rm 参数
-i 删除前进行交互式提示
-r 递归删除文件夹,包括空文件夹
-f 强制无条件删除只读文件

使用示例:

# 1.生产环境中慎用的rm命令,已经要指定删除的文件,防止误删数据到跑路。
rm -rf / : 强制无条件删除root目录下所有内容。
rm -rf * : 强制无条件删除当前目录下所有内容。
rm -rf . : 强制无条件删除当前文件夹和子文件夹


# 2.删除/tmp目录下的 weiyigeek 目录以及 weiyigeek.txt 文件
rm -rf /tmp/weiyigeek /tmp/weiyigeek.txt 

# 3.删除排除文件以外的文件或者目录
rm -rf `ls -I prod.conf`

# 4..在rm命令前加上反斜杠可以忽略掉alias的指定参数则的删除此目录而不需要询问;
\rm -r /tmp/weiyigeek.txt

使用实例:

  • 1.如何快速删除百万级文件及目录, 由于 rm 命令在删除文件时有数量限制,所以不得不找寻执行效率最高的方式,例如使用 rsync 命令。

# 创建1000000个文件
for i in {1..1000000};do touch $i.txt;done
# 测试文件数量
$ ls | wc -1
1000001
# 直接使用rm删除报错
$ rm -f
bash: /usr/bin/rm:Argument list too long
# 自定义保留那些文件
$ ls -l -f > /tmp/filelist.txt && vi /tmp/filelist.txt
# 创建一个空目录,使用 rsync 命令同步删除 /root/files 目录下的文件,但是不包括 /tmp/filelist.txt 中的文件
mkdir /tmp/empty
rsync -av --delete /tmp/aaaa /root/files --exclude-from=/tmp/filelist.txt

rmdir 命令 -  删除一个空目录

描述: 删除空目录(empty directory)并且该目录中不能存在其他的目录或者文件,此处了解即可在实际运维中往往会使用 rm 或者 mv 删除文件。

语法参数:

用法:rmdir [选项]... 目录.
参数:
-p : 连同上级目录一起删除
# 示例0:删除空目录
rmdir /tmp/empty
rmdir a/b/c a/b a

# 示例1:递归删除所有空目录
rmdir -p a/b/c  # 与上述的“rmdir a/b/c a/b a'”类似

Tips: 如何快速删除一个目录下的所有文件及空目录,例如,使用 find 命令的 -delete 参数,以及rmdir命令来实现。

# 删除当前目录下所有文件
find . -type f -delete
find . -name *.txt -delete
# 删除当前目录下所有空目录
rmdir -p *

cp 命令 - 文件目录复制

描述:拷贝文件和目录是每一个操作系统的基本指令。备份行为基本上是创建文件和目录的副本,在Linux系统下我们可以用cp命令来实现,但在进行复制的时候需要关注以下几点:

  • 1.是否需要完整保留来源文件的信息。

  • 2.源文件是否为软连接文件(symbolic link file)

  • 3.源文件是否为特殊文件,如 FIFO (管道)、 socket(套接字)等

  • 4.源文件是否为目录

语法参数:

cp 【选项】【原文件/目录】【目标目录】
cp [-adfilprsu] source1 source2 destination

# 参数:
-a 相当于-pdr选项保证和原文件属性一模一样(会保留原文件或目录的属性),常用于备份操作,但是inode号是变化的。
-b  类似--backup 但不接受参数
--copy-contents 在递归处理是复制特殊文件内容
-r 递归持续复制(目录/子目录/文件等)
-p 连带文件属性复制
-u 差异复制(只会复制新增或者已经变化的文件,相同属性并存在的文件不会再从新复制),常用在备份里面
-f 若目的地已经有相同档名的档案存在,则在复制前先予以删除再行复制(强制)
-i 若目标文件已经存在在覆盖时会先询问操作的进行(常用)。
-l 创建快捷方式来链接到文件(注意硬链接不能用来创建目录,并且拥有相同得inode号)
-d 若原文件是链接文件,则复制链接属性(不包括属性)
-s 复制成为链接符号文件(symbolic link) 即快捷方式文件( 软链接)
-u 若dest比source旧才更新destination
-P 只拷贝符号链接文件(不随符号链接拷贝原文件)
-L 随符号链接拷贝原文件(与上面的 -P 选项 相反)
-v 显示文件拷贝过程
--backup 每一个现有的目标文件做一个备份,可选参数如下。
  # none, off:从不备份(即使给出 --backup)
  # numbered, t:用编号备份
  # existing, nil :如果编号备份存在则使用编号备份,否者用简易备份[译注:也就是用波浪号]
  # simple, never :总是使用简易备份
--attributes-only    只会拷贝文件名及其属性,不会拷贝任何数据
--remove-destination 如果 cp 命令在目标目录下发现同名文件, cp 命令会先删除目标文件,然后再拷贝一份新的。

基础示例:

#示例1.基础示例使用,将一个文件或者目录从一个位置到另一个位置
cp -a weiyi /Users/WeiyiGeek/Documents       # 复制weiyi目录到文稿目录下(与上面效果一样带有属性)
cp -rpd weiyi/ /Users/WeiyiGeek/Documents    # 复制weiyi目录下的目录到文稿目录下
cp -r directory_1 /home/pungki/office        # -r或-R 选项表明递归操作(注意的一件事你需要移除在目录名尾部的斜杠,否则你会收到类似的错误信息cp: omitting directory‘directory_1/’)

#示例2.复制的id号是变化的但属性一致
$ cp -a 1.txt 2.txt && ls -i
393342 -rw-r--r-- 1 root root 0 May 31 15:31 1.txt
393343 -rw-r--r-- 1 root root 0 May 31 15:31 2.txt

#示例3.简化cp直接将复制为指定后缀的文件
$ cp 1.txt{,.bak} && ls
1.txt  1.txt.bak

#示例4.强制覆盖不提示重写
$ cp -fn 1.txt demo/1.txt 

# 示例5.交互模式下会询问是否覆盖目标目录下的文件。使用 -i 选项启用交互模式。
cp -ir directory_1/ /home/pungki/office/
$yes | cp /etc/fstab /etc/fstab_bak    # cp:是否覆盖"/etc/fstab_bak"? 
$yes | cp -i /etc/fstab /etc/fstab_bak # cp:是否覆盖"/etc/fstab_bak"? 

#示例6.若 ~/.bashrc 比 /tmp/bashrc 新才将其复制过来覆盖/tmp/bashrc
cp -u ~/.bashrc /tmp/bashrc

# 示例7.-d 参数的差异对比bashrc_link -> bashrc以及创建文件的硬链接而不是拷贝它们
cp bashrc_link bashrc_link_1            # 复制链接文件的实际文件(按照原文件属性进行拷贝)
cp -d bashrc_link bashrc_link_2         # 复制链接文件 
cp -l file_4.txt /home/pungki/office    # 创建“快捷方式”或者链接到文件而不是拷贝它们(拥有与原目录文件相同得inode值)
cp -s /home/pungki/office file_4.txt    # 创建符号链接只能在当前目录下进行(不通得inode值)
cp -P file_6.txt ./movie                # 对符号链接使用 cp 命令它会照原样拷贝它自身
cp -L file_6.txt ./movie                # 随符号链接拷贝原文件
cp -v *.txt /home/pungki/office         # 显示拷贝作业过程

# 示例8.将主文件夹.bashrc及,bash_history 复制到/tmp下(同时拷贝多个文件需要将多个文件用空格隔开)
cp ~/.bashrc ~/.bash_history /tmp

# 示例9.当原文件较目标文件新时拷贝
cp -vu *.txt /home/pungki/office

# 示例10.当目标目录已经含有同名文件,默认情况下 cp 命令会覆盖目标目录下的同名文件使用 --backup 选项,cp 命令会为每一个现有的目标文件做一个备份。../office 相对于 /home/pungki/office 。
cp --backup=simple -v *.txt ../office # --backup=simple 选项会创建一个在文件名末尾用波浪符标记(~)的备份文件

# 示例11.只拷贝文件属性而不会拷贝文件数据
cp --attributes-only file_6.txt -v ../office

# 示例12.用了 -f 选项会强制进行拷贝操作。如果目标文件不能打开,可以用 -f 尝试一下。
cp -f *.txt -v ../office

# 示例13.在拷贝之前先删除目标(如果 cp 命令在目标目录下发现同名文件cp 命令会先删除目标文件然后再拷贝一份新的)
cp --remove-destination *.txt -v ../office

# 示例14.若目标文件存在覆盖时则先备份
cp -a -b /tmp/dir01/test.txt /tmp/issue
cp -a --backup=numbered /tmp/dir01/test.txt /tmp/issue

b31f28caa5b7da053e467efa52641a7b.png

weiyigeek.top-cp命令若目标文件存在覆盖时则先备份图

Tips: 我们平常在Linux中使用 cp 命令时会发现将一个目录中文件复制到另一个目录具有相同文件名称时,即使添加了 -rf 参数强制覆盖复制时,系统仍然会提示让你一个个的手工输入 y 确认复制,令人不胜其烦那么这是由于什么原因引起的?

  • 原因 : alias 命令中存在cp命令的别名导致的

# 注:我们平时使用 cp 命令虽然没有添加任何参数 ,但系统默认会在我们使用 cp 命令时自动添加 -i 参数(即交互的缩写方式)
alias cp='cp -i'
  • 解决方案:去掉 cp 命令的别名此时使用 cp -rf 复制文件时,就不会要求确认啦.

unalias cp

mv 命令 - 移动或重命名文件目录

描述:使用此mv命令(move)进行文件目录的移动或改名。

语法参数:

mv 【原文件或目录】【目标目录】  #在同一目录下就是改名
mv 指定的文件夹/文件 /dev/null

# 参数
-f:强制移动,不会出现警告信息
-i:互动模式,移动之前询问你
-u:目标存在的时候,只有source比较新才会更新
-t: --target-directory=DIRECTORY  #将所有源参数移动到目录中

使用实例:

# 1.重命名文件
$ mv old.txt new.txt

# 2.移动文件到指定目录
$ mv old.txt /tmp/
$ mv old.txt old1.txt old2.txt /tmp/  # 将多个txt文件移动到 /tmp/

# 3.将源目录中批量移动到指定目录中
$ ls www/
# 10.txt  1.txt   2.txt  3.txt  4.txt  5.txt  6.txt  7.txt  8.txt  9.txt
$ mv -t backup/ www/*
$ ls backup/
10.txt  1.txt  2.txt  3.txt  4.txt  5.txt  6.txt  7.txt  8.txt  9.txt

# 4.如果有多个源文件或者目录则最后一个目标文件一定是目录
$ mv old.txt old/ target/

# 5:在Shell可以使用下述简单语法(备份常用),即重命名文件直接在文件名后加.bak
$ mv pam_unix.so{,.bak}   # 直接变成pam_unix.so.bak

rename 命令 - 重命名文件

描述:该命令可以通过通配符将目录中的所有文件进行批量更改名称;

语法参数

Usage: rename [ -h|-m|-V ] [ -v ] [ -n ] [ -f ] [ -e|-E *perlexpr*]*|*perlexpr*
    [ *files* ]

# 参数:
-v, --verbose       解释正在进行的操作
-s, --symlink       在符号链接的目标上执行操作
-n, --no-act        不要进行任何修改(测试输出结果)
-o, --no-overwrite  不要覆写已存在的文件
-i, --interactive   覆写之前进行提示

使用示例

# 示例0.重命名 old.txt 文件 为 weiyigeek.txt
touch old.txt
rename -v old weiyigeek old.txt
`old.txt' -> `weiyigeek.txt'

# 示例1.批量修改文件名,更改文件前缀 demo -> weiyigeek,即匹配所有文件将名称中的_替换为空
for i in {1..20};do
 touch "demo_${i}.sh"
done
rename -v  's/_/ /g' *
  # demo_10.sh renamed as demo 10.sh

# 示例2.测试输出结果,并不更改结果
rename -v -n "demo" "weiyigeek" *.sh #主要匹配sh文件

# 示例3.尝试更改文件前缀 demo -> weiyigeek,若需要生效请去掉 -n 参数。
rename -v -n 's/demo /weiyigeek-/g' *.sh  #注意这里的通配符
# rename(demo 10.sh, weiyigeek-10.sh)
# rename(demo 11.sh, weiyigeek-11.sh)
# rename(demo 12.sh, weiyigeek-12.sh)
# rename(demo 13.sh, weiyigeek-13.sh)

# 示例4.将文件名称的大写全部转换为小写则为,若需要生效请去掉 -n 参数。
rename -v -n 'y/A-Z/a-z/' *
# rename(demo 10.sh, DEMO 10.SH)
# rename(demo10.sh, DEMO10.SH)
# rename(demo 11.sh, DEMO 11.SH)

ln 命令 - 创建链接文件

描述:此ln命令(Link)用于创建软、硬链接,注意不管是源、目标文件其路径建议使用绝对路径。

语法参数:

用法:ln [OPTION]... TARGET LINK_NAME
      ln [选项]... [-T] 目标 链接名
 或:ln [选项]... 目标
 或:ln [选项]... 目标... 目录
 或:ln [选项]... -t 目录 目标...

# 参数:
--backup[=CONTROL]      为每个已存在的目标文件创建备份文件
-b                          类似--backup,但不接受任何参数
-d, -F, --directory         允许超级用户尝试创建指向目录的硬链接(注意:此操作可能因系统限制而失败)
-f, --force                 强行删除任何已存在的目标文件
-i, --interactive           删除目标文件前进行确认
-L, --logical               如目标为符号链接,本次创建链接时将其解引用
-n, --no-dereference        如果给定<链接名>是一个链接至某目录的符号链接,将其作为普通文件处理
-P, --physical              创建直接指向符号链接文件的硬链接
-r, --relative              创建相对于链接位置的符号链接
-s, --symbolic              创建符号链接而非硬链接
-S, --suffix=后缀           自行指定备份文件的后缀
-t, --target-directory=目录  在指定<目录>中创建链接
-T, --no-target-directory   总是将给定的<链接名>当作普通文件
-v, --verbose               列出每个链接的文件名称

使用示例:

# 示例1.创建软连接(必使用绝对路径) 即 /tmp/id_rsa.pub 链到 /root/.ssh/id_rsa.pub(不论是否存在)
ln -s /root/.ssh/id_rsa.pub /tmp/id_rsa.pub

# 示例2.创建硬连接
$ ln /root/.ssh/id_rsa.pub /tmp/id_rsa.pub
$ ln create.txt create.txt.bak
$ ls -li  # 查看 inode 是否相同
393422 -rw-r--r--   2 root root    0 May 31 15:48 create.txt
393422 -rw-r--r--   2 root root    0 May 31 15:48 create.txt.bak

# 示例3.为目录创建软连接
mkdir /tmp/dir01; echo "weiyigeek.top" > /tmp/dir01/test.txt
ln -s /tmp/dir01 /tmp/dir02
ls -l /tmp/dir02
  # lrwxrwxrwx. 1 root root 10  3月 24 15:42 /tmp/dir02 -> /tmp/dir01
cat /tmp/dir02/test.txt
  # weiyigeek.top

# 由于软链接的是目录,所以目录中的文件inode是一致的,而目录inode是不一致的。
ls -il
  # 201421248 drwxr-xr-x. 2 root root 22  3月 24 15:44 dir01
  # 134349770 lrwxrwxrwx. 1 root root 10  3月 24 15:44 dir02 -> /tmp/dir01
ls -i /tmp/dir01 /tmp/dir02
  # /tmp/dir01:
  # 201421249 test.txt
  
  # /tmp/dir02:
  # 201421249 test.txt

# 由于软连接目录的特殊性,所以删除软连接目录后,原文件依然存在。
rm -rf /tmp/dir02
cat /tmp/dir01/test.txt
  # weiyigeek.top

5de6c307feb689e7f7141bb89deb71e9.png

weiyigeek.top-ln命令实例

Tips: Linux 系统中软链接与硬链接特征区别?

区别软链接硬链接
本质非同一个文件同一个文件
垮设备、分区支持不支持
文件夹支持不支持
inode 值不相同与源文件相同
链接数创建、删除链接数不会变化创建新的硬链接,数量会增加,删除硬链接,数量减少
相对路径必须使用绝对路径,源文件可以不存在无必须使用绝对路径,也可以使用相对路径,且原文件必须存在
文件类型链接文件和源文件无关和源文件相同
文件大小源文件的路径的长度和源文件相同
删除源文件软链接文件将无法访问链接数减一,删除最后一个链接后,源文件被删除
# 硬链接
$ ln /tmp/dir01/ /opt/link01  # 不支持目录
  # ln: /tmp/dir01/: 不允许将硬链接指向目录  
$ ln /tmp/dir01/7.txt /opt/7.txt  # 绝对 (不加 -P 默认硬链接)
$ ln -P /tmp/dir01/9.txt /opt/9.txt  # 绝对
$ cd /tmp/; ln ./dir01/8.txt /opt/8.txt       # 相对
  # ifconfig > /opt/9.txt; ifconfig > /opt/8.txt  # 内容会影响源文件
$ ls -ali /opt
  # 134612857 -rw-r--r--. 2 root root    0  5月 21 22:30 7.txt
  # 134612861 -rw-r--r--.  2 root root 878  5月 21 22:36 8.txt
  # 134612933 -rw-r--r--.  2 root root 878  5月 21 22:36 9.txt
$ rm -f /opt/9.txt      # 删除软链接文件,不影响源文件
$ ls -ali /tmp/dir01/
  # 134612857 -rw-r--r--. 2 root root    0  5月 21 22:30 7.txt
  # 134612861 -rw-r--r--. 2 root root  878  5月 21 22:36 8.txt
  # 134612933 -rw-r--r--. 1 root root  878  5月 21 22:36 9.txt
$ cat /tmp/dir01/9.txt  # 内容依然存在

# 硬链接
$ ln -s /tmp/dir01/1.txt /opt/1.txt         # 绝对
$ cd /tmp/; ln -s ./dir01/2.txt /opt/2.txt  # 相对,可以创建但是链接源文件无效
$ readlink /opt/1.txt; readlink /opt/2.txt  # 查看软链接
  # /tmp/dir01/1.txt                      # 正常
  # ./dir01/2.txt                         # 不正常,无法可以访问到软链接源文件
$ ls -ali /opt/
  # 201388041 lrwxrwxrwx.  1 root root  16  5月 21 22:42 1.txt -> /tmp/dir01/1.txt
  # 201388058 lrwxrwxrwx.  1 root root  13  5月 21 22:46 2.txt -> ./dir01/2.txt
ls -ali /tmp/dir01/                       # 对比软链接可发现,inode值是不相同的
  # 134349772 -rw-r--r--. 1 root root    0  5月 21 22:30 1.txt
  # 134612806 -rw-r--r--. 1 root root    0  5月 21 22:30 2.txt
$ ln -s /tmp/dir01 /opt/dir01             # 创建目录软链接
$ ls -ali /opt/
  # 201388041 lrwxrwxrwx.  1 root root  16  5月 21 22:42 1.txt -> /tmp/dir01/1.txt
  # 201388058 lrwxrwxrwx.  1 root root  13  5月 21 22:46 2.txt -> ./dir01/2.txt  # 此时,便可正常访问软链接源文件
  # 201388514 lrwxrwxrwx.  1 root root  10  5月 21 22:54 dir01 -> /tmp/dir01

Tips: Linux 系统中删除软链接目录时慎用rm -rf命令(特别是:-r 参数务必不要加+),因为删除软链接目录(最后以/结束的软链接)后,源目录中的文件将会被清除。

$ ls /tmp/dir01/
10.txt  1.txt  2.txt  3.txt  4.txt  5.txt  6.txt  7.txt  8.txt  9.txt
$ ln -s /tmp/dir01/ /opt/dir01
$ ln -s /tmp/dir01/ /opt/dir02
$ readlink /opt/dir01
/tmp/dir01/

# 此时,删除软链接 /opt/dir01,不会影响 /tmp/dir01/ 目录中的文件。
$ rm -rf /opt/dir01  # 只删除链接本身,不会删除源目录内容。

# 而,删除软链接 /opt/dir02/ ,将会影响 /tmp/dir01/ 目录中的文件。
$ rm -rf /opt/dir02/
$ ls /tmp/dir01/
# 此时,目录下无任何文件

readlink 命令 - 查看链接文件实际地址

描述:readlink是linux系统中一个常用工具,主要用来找出符号链接所指向的位置.简单地说就是一直跟随符号链接,直到直到非符号链接的文件位置,限制是最后必须存在一个非符号链接的文件。

语法参数

语法:readlink [选项]... 文件...

# 参数
-f, --canonicalize            递归跟随给出文件名的所有符号链接以标准化,除最后一个外所有组件必须存在
-e, --canonicalize-existing   递归跟随给出文件名的所有符号链接以标准化,所有组件都必须存在
-m, --canonicalize-missing    递归跟随给出文件名的所有符号链接以标准化,但不对各组件的存在性作出要求
-n, --no-newline              不输出末尾的新行
-q, --quiet,
-s, --silent                  缩减大多数的错误消息(默认启用)
-v, --verbose                 报告错误消息
-z, --zero                    以空字符(NUL)而非换行符结束每个输出行

使用示例

# 示例1.获取软链接的真实地址
readlink /opt/1.txt
  # /tmp/dir01/1.txt

# 示例2.获取链接真实地址并递归跟随
readlink -f /bin/bash  
# /usr/bin/bash

# 示例3.使用通配符查看当前软链接目录中文件实际连接地址
readlink -f /opt/dir01/*
  # /tmp/dir01/10.txt
  # /tmp/dir01/1.txt
  # /tmp/dir01/2.txt
  # /tmp/dir01/3.txt
  # /tmp/dir01/4.txt
  # /tmp/dir01/5.txt
  # /tmp/dir01/6.txt
  # /tmp/dir01/7.txt
  # /tmp/dir01/8.txt
  # /tmp/dir01/9.txt
  # /tmp/dir01

stat 命令 - 文件元数据信息

描述:显示文件或文件系统的状态及信息(元数据,内容),以及显示出文件的大小以及块大写所属权限用户组和创修访问时间。

语法和参数:

stat [选项]... 文件

# 必选参数对长短选项同时适用。
-L, --dereference     跟随链接
-f, --file-system     显示文件系统状态而非文件状态
-c  --format=FORMAT   use the specified FORMAT instead of the default;output a newline after each use of FORMAT
--printf=FORMAT       Like --format, but interpret backslash escapes,and do not output a mandatory trailing newline; if you want a newline, include \n in FORMAT
-t, --terse           以简洁方式输出信息;

# 格式化字符串
The valid format sequences for files (without --file-system):
  %a   access rights in octal
  %A   access rights in human readable form
  %b   number of blocks allocated (see %B)
  %B   the size in bytes of each block reported by %b
  %C   SELinux security context string
  %d   device number in decimal
  %D   device number in hex
  %f   raw mode in hex
  %F   file type
  %g   group ID of owner
  %G   group name of owner
  %h   number of hard links
  %i   inode number
  %m   mount point
  %n   file name
  %N   quoted file name with dereference if symbolic link
  %o   optimal I/O transfer size hint
  %s   total size, in bytes
  %t   major device type in hex, for character/block device special files
  %T   minor device type in hex, for character/block device special files
  %u   user ID of owner
  %U   user name of owner
  %w   time of file birth, human-readable; - if unknown
  %W   time of file birth, seconds since Epoch; 0 if unknown
  %x   time of last access, human-readable
  %X   time of last access, seconds since Epoch
  %y   time of last modification, human-readable
  %Y   time of last modification, seconds since Epoch
  %z   time of last change, human-readable
  %Z   time of last change, seconds since Epoch

Valid format sequences for file systems:
  %a   free blocks available to non-superuser
  %b   total data blocks in file system
  %c   total file nodes in file system
  %d   free file nodes in file system
  %f   free blocks in file system
  %i   file system ID in hex
  %l   maximum length of filenames
  %n   file name
  %s   block size (for faster transfers)
  %S   fundamental block size (for block counts)
  %t   file system type in hex
  %T   file system type in human readable form

--terse 等同于以下格式: %n %s %b %f %u %g %D %i %h %t %T %X %Y %Z %W %o %C
--terse --file-system 等同于以下格式: %n %i %l %t %s %S %b %f %a %c %d

实际案例:

# 实例1.常规形式打印文件的详细信息
stat weiyigeek.txt
# 文件:weiyigeek.txt
#   大小:15              块:8          IO 块:4096   普通文件
# 设备:fe00h/65024d      Inode:2105407     硬链接:1
# 权限:(0644/-rw-r--r--)  Uid:(    0/    root)   Gid:(    0/    root)
# 最近访问:2026-07-22 01:29:48.574588495 +0800 Access Time
# 最近更改:2026-07-22 01:29:45.246588379 +0800 Modifiy Time
# 最近改动:2026-07-22 01:29:45.246588379 +0800 Change Time

# 实例2.用简洁的形式打印信息
stat -t weiyigeek.txt
# weiyigeek.txt 15 8 81a4 0 0 fe00 2105407 1 0 0 1784654988 1784654985 1784654985 0 4096


# 示例3.显示文件系统的详细信息
stat -f /etc/passwd
#   文件:"/etc/passwd"
#     ID:fd0000000000 文件名长度:255     类型:xfs
# 块大小:4096       基本块大小:4096
#     块:总计:11821425   空闲:10717632   可用:10717632
# Inodes: 总计:23654400   空闲:23573486

# 示例4.-c选项的妙用
stat -c "%i %f %F %h %a %A %u %U %g %G" /etc/passwd # 完整显示文件关键信息
## 33582780 81a4 普通文件 1 644 -rw-r--r-- 0 root 0 root
stat -c "%s %b %B" /etc/passwd  #文件大小以byte以及块大小和个块的字节大小
# 1034 8 512

#示例5.-L,跟踪显示链接文件信息
ls -alh phantomjs
# lrwxrwxrwx. 1 root root 38 5月  29 11:41 phantomjs -> /usr/local/src/phantomjs/bin/phantomjs
stat -L phantomjs
#   文件:"phantomjs"
#   大小:67932064        块:132680     IO 块:4096   普通文件
# 设备:fd00h/64768d      Inode:34604541    硬链接:1
# 权限:(0755/-rwxr-xr-x)  Uid:(    0/    root)   Gid:(    0/    root)
# 环境:unconfined_u:object_r:admin_home_t:s0
# 最近访问:2020-07-01 08:30:01.326875354 +0800
# 最近更改:2016-01-25 09:01:06.000000000 +0800
# 最近改动:2020-05-29 11:41:42.369696124 +0800
# 创建时间:-

file 命令 - 确定文件类型

描述: 通过该命令知道某个文件的基本数据是属于ASCII或是data文件还是Binary,且其中使用到动态函数连接库等等信息;

语法参数:

file [OPTION...] [FILE...]

# 语法:
-b, --brief               # 不要显示文件名,只显示文件类型
-f, --files-from FILE     # 从FILE中读取要检查的文件名
-F, --separator STRING    # 使用字符串作为分隔符,而不是“:”
-l, --list                # 列出魔法强度
-L, --dereference         # 遵循符号链接,查看软链接指向的文件类型

使用示例

# 1.ASCII文本 类型
$ ls -alh /tmp/weiyigeek.txt
-rwx--x--t 1 weiyigeek weiyigeek 9 10月 20 05:52 weiyigeek.txt
$ file /tmp/weiyigeek.txt
weiyigeek.txt: sticky , ASCII text

# 2.二进制程序 类型
$ file /usr/bin/passwd
/usr/bin/passwd: setuid ELF 64-bit LSB shared object, x86-64, version 1 (SYSV), dynamically linked, interpreter /lib64/ld-linux-x86-64.so.2, BuildID[sha1]=fa23c6b4e145d9bb5487c6cb7adb9338c5ef4fb9, for GNU/Linux 3.2.0, stripped

# 3.显示指定文本文件中存放的路径,并先去其类型
$ tee list.txt <<'EOF'
/etc/
/bin
/bin/sh
/etc/issue
/var/run/.heim_org.h5l.kcm-socket
EOF
$ file -f list.txt
/etc/:                             directory
/bin:                              symbolic link to usr/bin
/bin/sh:                           symbolic link to bash
/etc/issue:                        ASCII text
/var/run/.heim_org.h5l.kcm-socket: socket

34e3b6c704304c9c65875570d99c3911.png

weiyigeek.top-file命令使用示例图

实践案例

  • 示例1.使用file分别区分windows、file上创建的文件。

[root@rocky-server ~ 192.168.228.128 18:31]# cat win.txt ; echo
作者博客:
blog.weiyigeek.top
[root@rocky-server ~ 192.168.228.128 18:31]# cat list.txt
/etc/
/bin
/bin/sh
/etc/issue
/var/run/.heim_org.h5l.kcm-socket
[root@rocky-server ~ 192.168.228.128 18:31]# file win.txt
win.txt: UTF-8 Unicode text, with CRLF line terminators
[root@rocky-server ~ 192.168.228.128 18:31]# file list.txt
list.txt: ASCII text

好的,此篇文件目录管理笔记就到这里,下一章将继续学习文件目录权限管理设置和文件内容的读取过滤,所以一定要关注作者我哟,谢谢大家。

温馨提示:作者最近正在整理自己10年笔记,全栈系列从门到实践教程将会逐步持续同步到公众号内,若需要在线实时浏览作者笔记的童鞋,请添加作者[WeiyiGeeker],当前价格¥168,获取在网络、安全、运维、开发(Sec、Ops、Dev)中的所有学习实践笔记,和问题答疑以及远程技术支持,希望大家多多支持!

2f708362effc6f76dc93439d089b7246.png

至此完毕,更多技术文章,请持续关注公众号并添加星标,获取及时文章推送!

作者博客: https://blog.weiyigeek.top


如果此篇文章对你有帮助,请你将它分享给更多的人! 

1b379c8b8326f8a6f1626bb6f2817062.gif

17752ffe35bc154431771d5d5a677ece.png 学习推荐 往期文章 f47acc52f78c3bb1ac3d9bd9ad2cd78e.png

28692c3fa0886380655a6ddf1e7d3949.gif

全栈工程师修炼指南】邀你加入学习交流群!

作者微信【WeiyiGeeker】,一起学习交流进步吧! 

685409dd2b2b2d4fd89a3670b2fe4f3b.gif

1c87ea5bf8089432303e640ea63f4293.gif

此文,为作者原创文章,希望大家多多支持,若对看友您有帮助请帮忙转发,点👍、在看,若有疑问的小伙伴,可在文末留言哟!

完整原文:Linux 命令 | 运维必学,文件目录管理操作命令实践集锦本章将围绕Linux针对文件目录管理等基础命令进行学习,除此之外,包含了作者在日常运维工作中使用到的一些命令的注意事项总结,以及使用频率稍低的命令及参数,但是又非常高级使用的方法,相信各位看友学习后都会有所收获,下面跟随作者一起学习进步吧!icon-default.png?t=N7T8https://mp.weixin.qq.com/s/xeiCX0f2U_YQ3HIuSsgnjw

  • 5
    点赞
  • 8
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

全栈工程师修炼指南

原创不易,赞赏鼓励!

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值