高级Linux运维工程师养成记-Linux文件系统目录结构
内容导读
互联网集市收集整理的这篇技术教程文章主要介绍了高级Linux运维工程师养成记-Linux文件系统目录结构,小编现在分享给大家,供广大互联网技能从业者学习和参考。文章包含13463字,纯文字阅读大概需要20分钟。
内容图文
高级Linux运维工程师养成记-Linux文件系统目录结构
高级Linux运维工程师养成记Linux文件系统目录结构
Linux目录结构介绍
和Windows以盘符(例如C盘、D盘)作为根目录不同的是,Linux的文件系统只有一个根目录,使用/表示。
-
Linux系统中的目录和文件都是呈倒置的树形结构
-
以.开头的文件表示隐藏文件,路径使用/(左斜线)分隔。
-
文件名区分大小写(是否大小写敏感和操作系统无关,而是和操作系统的文件系统有关) ,例如opt和OPT是不同的概念
-
文件名最长为255个字节,包括路径在内文件名最长为4095个字节。
-
不同类型的文件,使用不同的颜色区分(文件名后缀不同,颜色不同),其中蓝色表示目录,绿色表示可执行文件,红色表示压缩文件,浅蓝色表示链接文件(类似于windows的快捷方式),灰色表示其他文件。文件颜色的配置位于/etc/DIR_COLORS文件中,如果想要定义其他文件的颜色,直接修改该文件即可。
-
Linux系统的文件命除了斜杠和NUL,所有的字符都有效,但特殊字符的目录名和文件不推荐使用,有些字符需要使用引用来引用。
-
每个文件都有两类数据:元数据(meta data)和数据(data),其中数据表示文件的内容,而元数据表示文件的属性,例如文件的大小,权限,所有者等等。
使用tree命令查看根目录下的一级子目录
[root@centos8 ~]# tree / -L 1
/
├── bin -> usr/bin
├── boot
├── data
├── dev
├── etc
├── home
├── lib -> usr/lib
├── lib64 -> usr/lib64
├── media
├── mnt
├── opt
├── proc
├── root
├── run
├── sbin -> usr/sbin
├── srv
├── sys
├── tmp
├── usr
└── var
Linux目录结构规范(FHS)
不同的Linux发行版的系统目录结构都是大同小异,Linux系统的目录遵守LSB(Linux Standard Base)标准
文件系统层次标准提供了文档介绍了目录以及基本工具的详细说明,在后期使用Linux按照目录标准存放文件。
https://www.pathname.com/fhs/pub/fhs-2.3.pdf
- /boot 用于系统启动引导文件存放目录,内核文件(vmlinuxz)以及引导加载器(bootloader)都存放在此目录下
- /bin 存放所有用户使用的基本命令,该目录不能独立分区,操作系统在启动时会使用到该目录下的文件
- /sbin 存放管理类的基本命令,该目录不能独立分区,操作系统在启动时会使用到该目录下的文件
- /lib 存放系统启动时程序依赖的基本共享库文件以及内核模块文件(/lib/modules);还有个目录叫/lib64是专用于x86_64系统上辅助共享库文件的位置
- /etc 存放系统的配置文件
- /home 普通用户的家目录
- /root 管理员的家目录
- /media 便携式移动设备的挂载点
- /mnt 临时文件系统挂载点
- /dev 用于存放设备文件以及特殊文件存储位置
- /opt 用于存放第三方应用程序的安装位置,例如Gitlab等等
- /srv 系统上运行的服务所需要用到的数据
- /tmp 临时文件存储位置
- /var 存放临时变化的数据,例如日志
- /usr 存放应用程序和文件,系统安装时的软件包默认的安装路径
- /misc 杂项,使用autfofs可以实现自动挂载光盘目录
- /sys 输出当前系统上硬件设备相关信息虚拟文件系统
/proc和/sys目录比较特殊,一般的目录都可以使用du -sh查看大小,而/sys和/proc是虚拟的目录,加载在内存中,无法查看大小
[root@centos8 ~]# du -sh /sys
0 /sys
[root@centos8 ~]# cat /proc/partitions
major minor #blocks name
8 0 209715200 sda
8 1 2097152 sda1
8 2 104857600 sda2
8 3 52428800 sda3
8 4 1 sda4
8 5 4194304 sda5
11 0 8038400 sr0
使用tree命令查看/usr下的一级目录
[root@centos8 ~]# tree -L 1 /usr
/usr
├── bin
├── games
├── include
├── lib
├── lib64
├── libexec
├── local
├── sbin
├── share
├── src
└── tmp -> ../var/tmp
使用lsblk查看光盘和挂载点信息
[root@centos8 ~]# lsblk
NAME MAJ:MIN RM SIZE RO TYPE MOUNTPOINT
sda 8:0 0 200G 0 disk
├─sda1 8:1 0 2G 0 part /boot
├─sda2 8:2 0 100G 0 part /
├─sda3 8:3 0 50G 0 part /data
├─sda4 8:4 0 1K 0 part
└─sda5 8:5 0 4G 0 part [SWAP]
sr0 11:0 1 7.7G 0 rom /run/media/guanglei/CentOS-8-2-2004-x86_64-dvd
/misc 目录挂载光盘前首先需要安装并启用autofs,系统默认没有安装autofs
[root@centos7 ~]# systemctl status autofs
Unit autofs.service could not be found.
安装并启用autofs,启动后可以使用systemctl status autofs命令来查看autofs的状态,如果状态是Active
[root@centos7 ~]# yum install -y autofs
[root@centos7 ~]# systemctl start autofs
[root@centos7 ~]# systemctl status autofs
● autofs.service - Automounts filesystems on demand
Loaded: loaded (/usr/lib/systemd/system/autofs.service; disabled; vendor preset: disabled)
Active: active (running) since Fri 2020-08-28 21:27:48 CST; 2s ago
Main PID: 3083 (automount)
Tasks: 5
CGroup: /system.slice/autofs.service
└─3083 /usr/sbin/automount --systemd-service --dont-check-daemon
Aug 28 21:27:47 centos7.ittimeline.net systemd[1]: Starting Automounts filesystems on demand...
Aug 28 21:27:48 centos7.ittimeline.net systemd[1]: Started Automounts filesystems on demand.
autofs启动之后查看根目录会发现多了一个misc目录
[root@centos7 ~]# ls /
bin data etc lib media mnt opt root sbin sys usr
boot dev home lib64 misc net proc run srv tmp var
如果系统挂载了光盘
则可以在autofs服务启动后进入/misc/cd目录下访问光盘的文件
[root@centos7 ~]# cd /misc/cd
[root@centos7 cd]# ls
CentOS_BuildTag EULA images LiveOS repodata RPM-GPG-KEY-CentOS-Testing-7
EFI GPL isolinux Packages RPM-GPG-KEY-CentOS-7 TRANS.TBL
也可以查看磁盘信息
[root@centos7 cd]# lsblk
NAME MAJ:MIN RM SIZE RO TYPE MOUNTPOINT
sda 8:0 0 200G 0 disk
├─sda1 8:1 0 2G 0 part /boot
├─sda2 8:2 0 100G 0 part /
├─sda3 8:3 0 50G 0 part /data
├─sda4 8:4 0 1K 0 part
└─sda5 8:5 0 8G 0 part [SWAP]
sr0 11:0 1 9.6G 0 rom /misc/cd
不过如果系统重启后是无法访问/misc目录,要解决该问题,systemctl enable autofs命令可以将autofs设为开机启动
[root@centos7 cd]# systemctl enable autofs
Created symlink from /etc/systemd/system/multi-user.target.wants/autofs.service to /usr/lib/systemd/system/autofs.service.
CentOS7 目录变化
自CentOS7以后把一些作用相同的目录合并
- /bin和/usr/bin
- /lib和/usr/lib
- /lib64和/usr/lib64
- /sbin和/usr/sbin
其中/bin、/lib、/lib64、/sbin是链接文件。
[root@centos8 ~]# ls -ld /bin /usr/bin /lib /usr/lib /lib64 /usr/lib64 /sbin /usr/sbin
lrwxrwxrwx. 1 root root 7 May 11 2019 /bin -> usr/bin
lrwxrwxrwx. 1 root root 7 May 11 2019 /lib -> usr/lib
lrwxrwxrwx. 1 root root 9 May 11 2019 /lib64 -> usr/lib64
lrwxrwxrwx. 1 root root 8 May 11 2019 /sbin -> usr/sbin
dr-xr-xr-x. 2 root root 40960 Aug 24 08:05 /usr/bin
dr-xr-xr-x. 37 root root 4096 Aug 24 08:04 /usr/lib
dr-xr-xr-x. 117 root root 69632 Aug 24 08:07 /usr/lib64
dr-xr-xr-x. 2 root root 20480 Aug 24 08:05 /usr/sbin
文件路径
Linux文件系统中包含路径在内的文件名称最长4095个字节。
在访问文件系统时,会涉及到两种路径:绝对路径和相对路径,其中绝对路径是从根目录开始的路径,相对路径是相对于当前路径,特殊场景下是相对于某个目录的位置。
[root@centos8 ~]# cd /etc/sysconfig
[root@centos8 sysconfig]# pwd
[root@centos8 sysconfig]# ll /etc/issue
-rw-r--r--. 1 root root 23 Jun 3 09:02 /etc/issue
[root@centos8 sysconfig]# ll ../issue
-rw-r--r--. 1 root root 23 Jun 3 09:02 ../issue
[root@centos8 sysconfig]# ll ./network
-rw-r--r--. 1 root root 22 Jul 26 12:56 ./network
..表示上级目录,.表示当前目录
使用绝对路径访问linux内核
[root@centos8 sysconfig]# ll /boot/vmlinuz-4.18.0-193.el8.x86_64
-rwxr-xr-x. 1 root root 8913656 May 8 19:07 /boot/vmlinuz-4.18.0-193.el8.x86_64
使用相对路径访问Linux内核
对比绝对路径而言,绝对路径更加简洁
[root@centos8 sysconfig]# ll ../../boot/vmlinuz-4.18.0-193.el8.x86_64
-rwxr-xr-x. 1 root root 8913656 May 8 19:07 ../../boot/vmlinuz-4.18.0-193.el8.x86_64
使用绝对路径或者相对路径创建特殊文件
[root@centos8 sysconfig]# touch /data/-
[root@centos8 sysconfig]# ll /data/
total 0
-rw-r--r--. 1 root root 0 Aug 1 17:47 -
-rw-r--r--. 1 root root 0 Aug 1 17:21 TEST.txt
[root@centos8 sysconfig]# cd /data/
[root@centos8 data]# touch ./-h
[root@centos8 data]# ll
total 0
-rw-r--r--. 1 root root 0 Aug 1 17:47 -
-rw-r--r--. 1 root root 0 Aug 1 17:47 -h
-rw-r--r--. 1 root root 0 Aug 1 17:21 TEST.txt
使用相对路径删除特殊文件
[root@centos8 data]# rm ./-
rm: remove regular empty file './-'? y
[root@centos8 data]# rm ./-h
rm: remove regular empty file './-h'? y
[root@centos8 data]# ll
total 0
-rw-r--r--. 1 root root 0 Aug 1 17:21 TEST.txt
dirname获取文件的目录名称
basename获取完整路径的文件名称,不要上级目录
[root@centos8 data]# basename /etc/sysconfig/network
network
[root@centos8 data]# dirname /etc/sysconfig/network
/etc/sysconfig
创建一个文件,文件目录由dirname /etc/sysconfig/network执行的结果决定
[root@centos8 data]# touch `dirname /etc/sysconfig/network`/test.txt
Linux的文件类型
使用ll(等价于ls -l)命令可以查看指定目录下的文件类型,ll输出的第一个字符表示文件类型
-
表示普通文件- d表示目录文件
- b表示块设备文件
- c表示字符设备
- l表示符号链接文件
- p表示管道文件
- s表示socket套接字文件,实现应用程序的双向通讯
除了普通文件,在运维时操作其他文件需要谨慎
查看普通文件
ll查看文件详细信息,输出结果的第一个字母-表示该文件是普通文件
[root@centos8 ~]# ll
total 8
-rw-------. 1 root root 1591 Aug 24 08:08 anaconda-ks.cfg
-rw-r--r--. 1 root root 1701 Aug 24 22:36 initial-setup-ks.cfg
查看目录文件
ll查看文件详细信息,输出结果的第一个字母d表示该文件是目录文件
[root@centos8 ~]# ls -l -d /data
drwxr-xr-x. 2 root root 6 Aug 24 07:58 /data
查看字符文件
ll查看文件详细信息,输出结果的第一个字母c表示该文件是字符文件
[root@centos8 ~]# ll /dev/zero
crw-rw-rw-. 1 root root 1, 5 Aug 28 21:01 /dev/zero
查看块设备文件
ll查看文件详细信息,输出结果的第一个字母b表示该文件是字符文件
guanglei@ubuntu-server:~$ ll /dev/sda
brw-rw---- 1 root disk 8, 0 Aug 29 00:33 /dev/sda
查看socket套接字文件
ll查看文件详细信息,输出结果的第一个字母s表示该文件是socket套接字文件
[root@centos7 ~]# ll /run/rpcbind.sock
srw-rw-rw-. 1 root root 0 Aug 29 08:33 /run/rpcbind.sock
windows和linux文本格式差异以及编码转换
在windows中使用记事本创建的普通文本文件,文件的内容是每行一个字符
然后在xshell中使用yum install -y lrzsz
安装文件上传组件,然后使用rz命令上传windows.txt
[root@centos7 data]# yum install -y lrzsz
[root@centos7 data]# rz
上传以后在Linux中使用file查看windows.txt文件类型,其输出结果是 ASCII text, with CRLF line terminators
[root@centos7 data]# file windows.txt
windows.txt: ASCII text, with CRLF line terminators
然后使用touch linux.txt
创建文本文件linux.txt,并使用nano编辑器编辑和windows.txt文件一样的内容
[root@centos7 data]# nano linux.txt
[root@centos7 data]# cat linux.txt
a
b
c
[root@centos7 data]# cat windows.txt
a
b
c
使用ll 命令查看windows.txt和linux.txt的文件大小,发现即使文本内容一样,但是大小不一样
[root@centos7 data]# ll windows.txt linux.txt
-rw-r--r--. 1 root root 6 Aug 29 13:10 linux.txt
-rw-r--r--. 1 root root 9 Aug 29 13:08 windows.txt
然后使用hexdump命令查看两个文本文件的十六进制存储,经过对比发现是回车换行的差异。
[root@centos7 data]# hexdump -C windows.txt
00000000 61 0d 0a 62 0d 0a 63 0d 0a |a..b..c..|
00000009
[root@centos7 data]# hexdump -C linux.txt
00000000 61 0a 62 0a 63 0a |a.b.c.|
00000006
Unix/Linux为了解决内存0a代表回车换行,而windows使用0a表示换行,0d表示回车。
为了解决该差异性,可以使用dos2unix来将windows.txt转换为linux.txt一样的文本格式,dos2unix默认没有安装,首次执行会提示 dos2unix: command not found...
[root@centos7 data]# dos2unix windows.txt
bash: dos2unix: command not found...
使用yum install -y dos2unix 命令安装即可
[root@centos7 data]# yum install -y dos2unix
安装完成后使用dos2unix windows.txt命令将其转换为linux系统的文本文件格式
[root@centos7 data]# dos2unix windows.txt
dos2unix: converting file windows.txt to Unix format ...
[root@centos7 data]# file windows.txt
windows.txt: ASCII text
转换完成后windows.txt和linux.txt的文件大小一致
[root@centos7 data]# ll windows.txt linux.txt
-rw-r--r--. 1 root root 6 Aug 29 13:10 linux.txt
-rw-r--r--. 1 root root 6 Aug 29 13:23 windows.txt
windows.txt和linux.txt的底层存储的内容也是一致
[root@centos7 data]# hexdump -C windows.txt
00000000 61 0a 62 0a 63 0a |a.b.c.|
00000006
[root@centos7 data]# hexdump -C linux.txt
00000000 61 0a 62 0a 63 0a |a.b.c.|
00000006
linux.txt转换windows的格式,使用unix2dos转换即可。
那么乱码是如何产生的呢?
首先在windows系统中创建一个文件,文件内容为高级Linux运维工程师养成记
content.txt
保存文件的编码是ANSI,windows10默认的编码已经是UTF-8,因此这里设成ANSI
然后使用rz命令上传到/data目录下,使用cat命令查看文件内容,结果是乱码
[root@centos7 data]# cat content.txt
???Linux???¤??????[root@centos7 data]#
使用hexdump查看文件的十六进制表示,发现汉字是占用两个字节,而UTF-8中汉字占据3个字节,因此解码失败。
如果创建文件的编码和查看文件的编码不一致,则会造成乱码。
[root@centos7 data]# hexdump -C content.txt
00000000 b8 df bc b6 4c 69 6e 75 78 d4 cb ce ac b9 a4 b3 |....Linux.......|
00000010 cc ca a6 d1 f8 b3 c9 bc c7 |.........|
00000019
因此需要将content.txt的编码改成UTF-8,这里为了区分,将UT-8编码的content.txt文件重命名为content-utf8.txt
然后使用cat命令查看content-utf8文件,没有乱码
[root@centos7 data]# cat content-utf8.txt
高级Linux运维工程师养成记[root@centos7 data]#
不同的编码(ASNI和UTF-8)存储相同的文件,其占据的内存大小是不一样的。
UTF-8虽然支持全世界的文字,但是占用内存比ASNI大。
[root@centos7 data]# ll content.txt content-utf8.txt
-rw-r--r--. 1 root root 25 Aug 29 13:38 content.txt
-rw-r--r--. 1 root root 35 Aug 29 13:44 content-utf8.txt
iconv命令可以将ASNI编码转换为UTF-8编码
[root@centos7 data]# iconv -f gb2312 content.txt -o content-UTF8.txt
[root@centos7 data]# file content-UTF8.txt
content-UTF8.txt: UTF-8 Unicode text, with no line terminators
转换后查看文件内容也不是乱码
[root@centos7 data]# cat content-UTF8.txt
高级Linux运维工程师养成记[root@centos7 data]#
再次将content-UTF8.txt 转换为ANSI编码
[root@centos7 data]# iconv -f utf-8 -t gb2312 content-UTF8.txt -o windows-code
[root@centos7 data]# file windows-code
windows-code: ISO-8859 text, with no line terminators
内容总结
以上是互联网集市为您收集整理的高级Linux运维工程师养成记-Linux文件系统目录结构全部内容,希望文章能够帮你解决高级Linux运维工程师养成记-Linux文件系统目录结构所遇到的程序开发问题。 如果觉得互联网集市技术教程内容还不错,欢迎将互联网集市网站推荐给程序员好友。
内容备注
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 gblab@vip.qq.com 举报,一经查实,本站将立刻删除。
内容手机端
扫描二维码推送至手机访问。