Linux 文件管理与相关命令详解

在Linux系统中, 一切皆文件,无论是输入命令,还是输出结果,亦或是登录登出等各类操作都会有相对应的文件存在,所以我们需要十分了解文件系统。(本文将以CentOS版本示例)

文件系统目录结构

根目录下查看大致目录结构

[root@bj-test-centos /]# ls /
bin  boot  data  dev  etc  home  lib  lib64  lost+found  media  mnt  opt  proc  root  run  sbin  srv  sys  tmp  usr  var

文件系统功能 

  1. /bin 存放基本的用户命令二进制文件,例如常用的 ls、cp、mv 等。
  2. /sbin 存放管理系统命令二进制文件,例如系统启动与修复等命令。
  3. /etc 存放全局配置文件和目录,例如网络配置文件 hosts, hostname 以及服务启动脚本。
  4. /srv 存放服务相关的数据,例如 web 服务的文档根目录。
  5. /run 存放系统启动以来的信息文件,包括系统进程的 PID 文件等。
  6. /opt 用于存放可选的应用软件包。通常用于第三方软件安装。
  7. /lib 存放系统库文件和内核模块。例如C 语言库文件 libc.so 就在此目录中。
  8. /tmp 用于存放临时文件,系统启动时可能会清空此目录。
  9. /proc 一个虚拟文件系统,存放内核和进程信息。
  10. /root 超级用户家目录,普通用户无法访问,主要存放用户个人文件、配置文件、下载内容等。
  11. /home 普通用户家目录,超级用户可访问,同样是存放用户个人文件、配置文件、下载内容等。
  12. /sys 一个虚拟文件系统,存放和系统硬件及系统内核相关的文件。提供设备和内核相关的信息。
  13. /boot 存放启动加载程序和内核文件,例如 vmlinuz, initrd.img 等。
  14. /var 存放动态数据文件,例如日志文件、缓存文件、邮件队列等。子目录包括 logspooltmp 等。
  15. /usr 存放用户级应用程序和文件,例如用户命令、库文件、文档等,子目录包括 bin、lib、local 和 share 等。
  16. /dev 存放设备文件,例如硬盘、终端、打印机等设备接口,例如/dev/sda 代表第一个 SCSI 硬盘。
  17. /media/mnt 用于挂载外部设备,如 USB 驱动器和 CD-ROM。/media 通常用于自动挂载设备,而 /mnt 通常用于手动挂载。

常用目录对应的文件类型

文件类型目录路径
二进制文件
/bin, /sbin, /usr/bin, /usr/sbin, /usr/local/bin, /usr/local/sbin
库文件
/lib, /lib64, /usr/lib, /usr/lib64, /usr/local/lib, /usr/local/lib64
配置文件
/etc, /usr/local/etc
帮助文件
/usr/share/man, /usr/share/doc,  /usr/share/info, /usr/share/help, /usr/share/man_db, /usr/local/share/man, /usr/local/share/doc, /usr/local/share/info

了解文件类型

ls -l 查看文件的详细信息,第一列首个字符为文件的标识符,不同的标识符分别代表不同的文件。

[root@bj-test-centos etc]# ls -l
总用量 1484
-rw-r--r--.      1 root  root    16        2月   20  16:49 adjtime                # - 表示是一个普通文件
drwxr-xr-x.    2 root  root    4096   4月   12   19:09 alternatives          # d 表示是一个目录文件
lrwxrwxrwx.  1 root  root    11        2月   20  16:36 init.d -> rc.d/init.d  # l 表示是一个链接文件

brw-rw----     1 root  disk    253,0   8月   1    16:31 vda                   # b 表示是一个块设备文件

crw-------      1 root  root    10, 63   8月   1    16:31 vga_arbiter   # c 表示是一个字符设备文件

prw-------       1 root  root     0         5月    8    08:24 initctl              # p 表示是一个管道文件
srw-rw-rw-   1 root   root    0          8月   1     16:31 rpcbind.sock    # s 表示是一个套接字文件

管道文件

管道文件用于进程之间通信和数据处理

[root@bj-test-centos ~]# mkfifo /tmp/myfifo                                # 创建管道文件
[root@bj-test-centos ~]# echo "Sample data" > /tmp/myfifo          # 数据采集进程(模拟)
[root@bj-test-centos ~]# cat /tmp/myfifo | grep "data"               # 数据处理进程
Sample data

要注意的是,管道文件的写入和读取需要配合进行,需要打开一个新的终端窗口,才能够读取到正在写入的数据信息。

套接字文件

套接字文件用于本地进程之间的通信和网络服务中,常用与连接数据库、web服务器和应用服务器之间的通信等。

文件操作命令

显示当前路径

 [root@bj-test-centos bin]# pwd                             # 显示当前所在路径
/bin

[root@bj-test-centos bin]# pwd -L                       # 显示链接路径
/bin
[root@bj-test-centos bin]# pwd -P                       # 显示实际物理路径
/usr/bin 

 相对路径和绝对路径

绝对路径是从根目录开始的完整路径

[root@bj-test-centos ~]# cd /usr/local

[root@bj-test-centos local]# pwd
/usr/local

相对路径是相对于当前目录的路径

[root@bj-test-centos local]# cd ..

[root@bj-test-centos usr]# 
[root@bj-test-centos usr]# cd ../../
[root@bj-test-centos /]# 
[root@bj-test-centos /]# cd root
[root@bj-test-centos ~]#

基名与目录名

基名(basename),只取文件名不要路径

[root@bj-test-centos ~]# basename /tmp/myfifo
myfifo

 [root@bj-test-centos ~]# basename  http://nginx.org/download/nginx-1.18.0.tar.gz
nginx-1.18.0.tar.gz

 [root@bj-test-centos ~]# basename -s .tar.gz http://nginx.org/download/nginx-1.18.0.tar.gz.tar.gz                                                   # -s 选项后跟上字符串可去除指定后缀
nginx-1.18.0.tar.gz

目录名(dirname),只取路径不要文件名

[root@bj-test-centos ~]# dirname /tmp/myfifo
/tmp

实际应用

[root@bj-test-centos ~]# url=http://nginx.org/download/nginx-1.18.0.tar.gz                                                                                                         # 将url存储到变量中
[root@bj-test-centos ~]# wget $url                          # 下载
--2024-08-03 14:24:30--  http://nginx.org/download/nginx-1.18.0.tar.gz
正在解析主机 nginx.org (nginx.org)... 3.125.197.172, 52.58.199.22, 2a05:d014:5c0:2601::6, ...
正在连接 nginx.org (nginx.org)|3.125.197.172|:80... 已连接。
已发出 HTTP 请求,正在等待回应... 200 OK
长度:1039530 (1015K) [application/octet-stream]
正在保存至: “nginx-1.18.0.tar.gz”

100%[=================================================================================================================>] 1,039,530   1013KB/s 用时 1.0s

2024-08-03 14:24:32 (1013 KB/s) - 已保存 “nginx-1.18.0.tar.gz” [1039530/1039530])

[root@bj-test-centos ~]# tar xf `basename $url`           # 将下载好的文件解压到当前目录下
[root@bj-test-centos ~]# ls
2024-07-30.log  nginx-1.18.0  nginx-1.18.0.tar.gz  release_worweb.sh

列出目录内容

ls可用的选项有很多,以下举例工作中常用到的选项。 

[root@bj-test-centos ~]# ls -l                                       # 显示详细的文件信息
总用量 1024
-rw-r--r-- 1 root root       0 7月  30 15:38 2024-07-30.log 

[root@bj-test-centos ~]# ls -a                                     # 显示所有文件,包含隐藏文件
.   2024-07-30.log  .bash_logout 

[root@bj-test-centos ~]# ls -lh                                    # 显示更易懂的文件大小
总用量 1.0M
-rw-r--r--   1  root   root     0        7月  30  15:38  2024-07-30.log
drwxr-xr-x 8 1001 1001    4.0K  4月   21  2020  nginx-1.18.0 

[root@bj-test-centos ~]# ls -R                                     # 递归列出所有子目录和文件
.:
2024-07-30.log  dayunzi  release_worweb.sh

./dayunzi:
12138  dajunzi

./dayunzi/12138:

 [root@bj-test-centos ~]# ls -lt                                      # 按时间排序
总用量 8
drwxr-xr-x 3 root root  4096 8月   3  14:44  dayunzi
-rw-r--r--   1 root root   0      7月   30 15:38  2024-07-30.log
-rwxr-xr-x 1 root root   304   3月  26 19:07  release_worweb.sh

[root@bj-test-centos ~]# ls -lS                                       # 按大小排序
总用量 8
drwxr-xr-x 3 root root   4096 8月   3  14:44  dayunzi
-rwxr-xr-x  1 root root   304   3月  26 19:07  release_worweb.sh
-rw-r--r--    1 root root    0      7月  30 15:38  2024-07-30.log 

[root@bj-test-centos ~]# ls -i                                         # 显示 inode 号
 655696 2024-07-30.log  1049215 dayunzi   655698 release_worweb.sh 

查看文件状态

[root@bj-test-centos ~]# stat /tmp/myfifo                                                                                                                             # 查看文件的元数据,也就是属性(同样可查看目录的元数据)
     File: ‘/tmp/myfifo’                                                                                  # 文件名
    Size: 0                        Blocks: 0               IO Block: 4096      fifo           # 文件大小
Device: fd01h/64769d    Inode: 1179666     Links: 1                                  # 设备
Access: (0644/prw-r--r--)  Uid: (    0/    root)   Gid: (    0/    root)                # 权限
Access:  2024-08-03 12:59:46.582006282 +0800                                    # 最近访问
Modify:   2024-08-03 12:59:46.582006282 +0800                                    # 最近更改
Change: 2024-08-03 12:59:46.582006282 +0800                                   # 最近改动
 Birth: -                                                                                                      # 创建时间

[root@bj-test-centos ~]# stat -f /tmp/myfifo                          # 查看文件所在分区信息
  File: "/tmp/myfifo"                                                                                   # 文件
    ID: c7c4aaa74df99fa1 Namelen: 255     Type: ext2/ext3                     # ID
Block size: 4096       Fundamental block size: 4096                                # 块大小
Blocks: Total: 10288203   Free: 9041936    Available: 8566009              # 块
Inodes: Total: 2621440    Free: 2554939
You have new mail in /var/spool/mail/root 

[root@bj-test-centos ~]# stat -c "%a-%i-%n" /tmp/myfifo   

                                                                                # 显示文件的权限、inode号、文件名
644-1179666-/tmp/myfifo 

确定文件内容

[root@bj-test-centos ~]# file /tmp/myfifo                         # 确定文件内容
/tmp/myfifo: fifo (named pipe) 

windows文本格式和linux文本格式的区别 

换行符不同

Line 1\r\n         # windows 系统中,以 \r\n 为结尾
Line 2\n           # linux 系统中,以 \n 为结尾

文件转换 

  • dos2unix filename      # 在 Linux 上将 Windows 文本文件转换为 Linux 格式
  • unix2dos filename      # 在 Linux 上将文本文件从 Linux 格式转换为 Windows 格式

文件通配符 

常见通配符

*匹配0个或多个字符,但不匹配隐藏文件
?匹配任何单个字符,一个汉字也算一个字符
~当前用户家目录
.当前工作目录
~+当前工作目录
~-前一个工作目录
~用户名用户家目录
[0-9]匹配数字范围
[a-z]一个字母
[A-Z]一个字母
[wang]匹配列表中任意一个字符
[^wang]匹配列表中所有字符以外的字符
[^a-z]匹配列表中所有字符以外的字符

预定义字符类表示法  

[:digit:]任意数字,相当于0-9
[:lower:]任意小写字母,表示 a-z
[:upper:]任意大写字母,表示 A-Z
[:alpha:]任意大小写字吗
[:alnum:]任意数字或字母 a-z,A-Z,0-9
[:blank:]水平空白字符
[:space:]水平或垂直空白字符
[:punct:]标点符号
[:print:]可打印字符
[:cntrl:]控制(非打印)字符
[:graph:]图形字符
[:xdigit:]十六进制字符

 

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值