1. 各硬件设备在Linux中的文件名
| 设备 | 设备在Linux内的文件名 |
|---|---|
| SCSI/SATA/USB硬盘机 | /dev/sd[a-p] |
| USB闪存盘 | /dev/sd[a-p] ( 与SATA相同) |
| VirtI/O界面 | /dev/vd[a-p] ( 用于虚拟机内) |
| 软盘机 | /dev/fd[0-7] |
| 打印机 | /dev/lp[0-2] ( 25针打印机) /dev/usb/lp[0-15] ( USB 接口) |
| 鼠标 | /dev/input/mouse[0-15] ( 通用) /dev/psaux ( PS/2界面) /dev/mouse ( 当前鼠标) |
| CDROM/DVDROM | /dev/scd[0-1] ( 通用) /dev/sr[0-1] ( 通用, CentOS 较常见) /dev/cdrom ( 当前 CDROM) |
| 磁带机 | /dev/ht0 ( IDE 界面) /dev/st0 ( SATA/SCSI界面) /dev/tape ( 当前磁带) |
| IDE硬盘机 | /dev/hd[a-d] ( 旧式系统才有) |
例题: 如果你的PC上面有两个SATA磁盘以及一个USB磁盘, 而主板上面有六个SATA的插 槽。 这两个SATA磁盘分别安插在主板上的SATA1, SATA5插槽上, 请问这三个磁盘在Linux中 的设备文件名为何? 答: 由于是使用侦测到的顺序来决定设备文件名, 并非与实际插槽代号 有关, 因此设备的文件名如下:
- SATA1插槽上的文件名: /dev/sda
- SATA5插槽上的文件名: /dev/sdb
- USB磁盘( 开机完成后才被系统捉到) : /dev/sdc
那么对硬盘分区后呢,分区在linux系统中的设备文件名如下所示(这个数字与该分区所在的位置有关)
P1:/dev/sda1
P2:/dev/sda2
P3:/dev/sda3
P4:/dev/sda4
2. linux目录配置-FHS(Filesystem Hierarchy Standard)
根据FHS的标准文件指出,他们的主要目的是希望让使用者可以了解到已安装软件通常放
置于那个目录下, 所以他们希望独立的软件开发商、操作系统制作者、以及想要维护系统的
使用者,都能够遵循FHS的标准。 也就是说, FHS的重点在于规范每个特定的目录下应该要
放置什么样子的数据而已。 这样做好处非常多,因为Linux操作系统就能够在既有的面貌下
(目录架构不变)发展出开发者想要的独特风格。
-
根目录 | 目录 | 应放置文件内容 | | --- | --- | | /bin | 系统有很多放置可执行文件的目录, 但/bin比较特殊。 因为/bin放置的是在 单人维护模式下还能够被操作的指令。 在/bin下面的指令可以被root与一般 帐号所使用, 主要有: cat, chmod, chown, date, mv, mkdir, cp, bash等等常 用的指令。 | | /boot | 这个目录主要在放置开机会使用到的文件, 包括Linux核心文件以及开机菜 单与开机所需配置文件等等。 Linux kernel常用的文件名为: vmlinuz, 如果 使用的是grub2这个开机管理程序, 则还会存在/boot/grub2/这个目录喔! | | /dev | 在Linux系统上, 任何设备与周边设备都是以文件的型态存在于这个目录当 中的。 你只要通过存取这个目录下面的某个文件, 就等于存取某个设备啰 ~ 比要重要的文件有/dev/null, /dev/zero, /dev/tty, /dev/loop, /dev/sd等等 | | /etc | 系统主要的配置文件几乎都放置在这个目录内, 例如人员的帐号密码档、 各种服务的启始档等等。 一般来说, 这个目录下的各文件属性是可以让一般 使用者查阅的, 但是只有root有权力修改。 FHS建议不要放置可可执行文件 ( binary) 在这个目录中喔。 比较重要的文件有: /etc/modprobe.d/, /etc/passwd, /etc/fstab, /etc/issue 等等。 另外 FHS 还规范几个重要的目录 最好要存在 /etc/ 目录下喔: /etc/opt( 必要) : 这个目录在放置第三方协力 软件 /opt 的相关配置文件 /etc/X11/( 建议) : 与 X Window 有关的各种配 置文件都在这里, 尤其是 xorg.conf 这个 X Server 的配置文件。 /etc/sgml/ ( 建议) : 与 SGML 格式有关的各项配置文件 /etc/xml/( 建议) : 与 XML 格式有关的各项配置文件 | | /lib | 系统的函数库非常的多, 而/lib放置的则是在开机时会用到的函数库, 以及 在/bin或/sbin下面的指令会调用的函数库而已。 什么是函数库呢? 你可以将 他想成是“外挂”, 某些指令必须要有这些“外挂”才能够顺利完成程序的执行 之意。 另外 FSH 还要求下面的目录必须要存在: /lib/modules/: 这个目录 主要放置可抽换式的核心相关模块( 驱动程序) 喔! | | /media | media是“媒体”的英文, 顾名思义, 这个/media下面放置的就是可移除的设 备啦! 包括软盘、 光盘、 DVD等等设备都暂时挂载于此。 常见的文件名 有: /media/floppy, /media/cdrom等等。 | | /mnt | 如果你想要暂时挂载某些额外的设备, 一般建议你可以放置到这个目录中。 在古早时候, 这个目录的用途与/media相同啦! 只是有了/media之后, 这个 目录就用来暂时挂载用了。 | | /opt | 这个是给第三方协力软件放置的目录。 什么是第三方协力软件啊? 举例来 说, KDE这个桌面管理系统是一个独立的计划, 不过他可以安装到Linux系 统中, 因此KDE的软件就建议放置到此目录下了。 另外, 如果你想要自行 安装额外的软件( 非原本的distribution提供的) , 那么也能够将你的软件安 装到这里来。 不过, 以前的Linux系统中, 我们还是习惯放置在/usr/local目 录下呢! | | /run | 早期的 FHS 规定系统开机后所产生的各项信息应该要放置到 /var/run 目录 下, 新版的 FHS 则规范到 /run 下面。 由于 /run 可以使用内存来仿真, 因 此性能上会好很多! | | /srv | srv可以视为“service”的缩写, 是一些网络服务启动之后, 这些服务所需要 取用的数据目录。 常见的服务例如WWW, FTP等等。 举例来说, WWW服 务器需要的网页数据就可以放置在/srv/www/里面。 不过, 系统的服务数据 如果尚未要提供给网际网络任何人浏览的话, 默认还是建议放置到 /var/lib 下面即可。 | | /tmp | 这是让一般使用者或者是正在执行的程序暂时放置文件的地方。 这个目录 是任何人都能够存取的, 所以你需要定期的清理一下。 当然, 重要数据不可 放置在此目录啊! 因为FHS甚至建议在开机时, 应该要将/tmp下的数据都 删除唷! | | /usr | 第二层 FHS 设置, 后续介绍 | | /var | 第二曾 FHS 设置, 主要为放置变动性的数据, 后续介绍 | | /home | 这是系统默认的使用者主文件夹( home directory) 。 在你新增一个一般使 用者帐号时, 默认的使用者主文件夹都会规范到这里来。 比较重要的是, 主文件夹有两种代号喔: ~: 代表目前这个使用者的主文件夹 ~dmtsai : 则 代表 dmtsai 的主文件夹! | | /lib | 用来存放与 /lib 不同的格式的二进制函数库, 例如支持 64 位的 /lib64 函数 库等 | | /root | 系统管理员( root) 的主文件夹。 之所以放在这里, 是因为如果进入单人维 护模式而仅挂载根目录时, 该目录就能够拥有root的主文件夹, 所以我们会 希望root的主文件夹与根目录放置在同一个分区中。 | /lost+found | 这个目录是使用标准的ext2/ext3/ext4文件系统格式才会产生的一个目录, 目的在于当文件系统发生错误时, 将一些遗失的片段放置到这个目录下。 不过如果使用的是 xfs 文件系统的话, 就不会存在这个目录了!| | /proc | 这个目录本身是一个“虚拟文件系统( virtual filesystem) ”喔! 他放置的数 据都是在内存当中, 例如系统核心、 行程信息( process) 、 周边设备的 状态及网络状态等等。 因为这个目录下的数据都是在内存当中, 所以本身 不占任何硬盘空间啊! 比较重要的文件例如: /proc/cpuinfo, /proc/dma, /proc/interrupts, /proc/ioports, /proc/net/* 等等。 | | /sys | 这个目录其实跟/proc非常类似, 也是一个虚拟的文件系统, 主要也是记录 核心与系统硬件信息较相关的信息。 包括目前已载入的核心模块与核心侦 测到的硬件设备信息等等。 这个目录同样不占硬盘容量喔! |
-
/usr (usr=Unix Software Resource)
| 目录 | 应放置文件内容 |
|---|---|
| 第一部份: FHS 要求必须 要存在的目录 | |
| /usr/bin/ | 所有一般用户能够使用的指令都放在这里! 目前新的 CentOS 7 已经将 全部的使用者指令放置于此, 而使用链接文件的方式将 /bin 链接至此! 也就是说, /usr/bin 与 /bin 是一模一样了! 另外, FHS 要求在此目录 下不应该有子目录! |
| /usr/lib/ | 基本上, 与 /lib 功能相同, 所以 /lib 就是链接到此目录中的! |
| /usr/local/ | 系统管理员在本机自行安装自己下载的软件( 非distribution默认提供 者) , 建议安装到此目录, 这样会比较便于管理。 举例来说, 你的 distribution提供的软件较旧, 你想安装较新的软件但又不想移除旧版, 此时你可以将新版软件安装于/usr/local/目录下, 可与原先的旧版软件 有分别啦! 你可以自行到/usr/local去看看, 该目录下也是具有bin, etc, include, lib...的次目录喔! |
| /usr/sbin/ | 非系统正常运行所需要的系统指令。 最常见的就是某些网络服务器软件 的服务指令( daemon) 啰! 不过基本功能与 /sbin 也差不多, 因此目 前 /sbin 就是链接到此目录中的。 |
| /usr/share/ | 主要放置只读架构的数据文件, 当然也包括共享文件。 在这个目录下放 置的数据几乎是不分硬件架构均可读取的数据, 因为几乎都是文字文 件嘛! 在此目录下常见的还有这些次目录: /usr/share/man: 线上说明 文档 /usr/share/doc: 软件杂项的文件说明 /usr/share/zoneinfo: 与时 区有关的时区文件 |
| 第二部份: FHS 建议可以 存在的目录 | |
| /usr/games/ | 与游戏比较相关的数据放置处 |
| /usr/include/ | c/c++等程序语言的文件开始( header) 与包含档( include) 放置处, 当我们以tarball方式 ( *.tar.gz 的方式安装软件) 安装某些数据时, 会 使用到里头的许多包含档喔! |
| /usr/libexec/ | 某些不被一般使用者惯用的可执行文件或脚本( script) 等等, 都会放 置在此目录中。 例如大部分的 X 窗口下面的操作指令, 很多都是放在 此目录下的。 |
| /usr/lib/ | 与 /lib/功能相同, 因此目前 /lib 就是链接到此目录中 |
| /usr/src/ | 一般源代码建议放置到这里, src有source的意思。 至于核心源代码则 建议放置到/usr/src/linux/目录下。 |
- /var 目录 | 应放置文件内容 | | ----------------------- | ---------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- | | 第一部 份: FHS 要求必须 要存在的 目录 | | | /var/cache/ | 应用程序本身运行过程中会产生的一些暂存盘; | | /var/lib/ | 程序本身执行的过程中, 需要使用到的数据文件放置的目录。 在此目录下 各自的软件应该要有各自的目录。 举例来说, MySQL的数据库放置 到/var/lib/mysql/而rpm的数据库则放到/var/lib/rpm去! | | /var/lock/ | 某些设备或者是文件资源一次只能被一个应用程序所使用, 如果同时有两 个程序使用该设备时, 就可能产生一些错误的状况, 因此就得要将该设备 上锁( lock) , 以确保该设备只会给单一软件所使用。 举例来说, 烧录机 正在烧录一块光盘, 你想一下, 会不会有两个人同时在使用一个烧录机烧 片? 如果两个人同时烧录, 那片子写入的是谁的数据? 所以当第一个人在 烧录时该烧录机就会被上锁, 第二个人就得要该设备被解除锁定( 就是前 一个人用完了) 才能够继续使用啰。 目前此目录也已经挪到 /run/lock 中! | | /var/log/ | 重要到不行! 这是登录文件放置的目录! 里面比较重要的文件 如/var/log/messages, /var/log/wtmp( 记录登陆者的信息) 等。 | | /var/mail/ | 放置个人电子邮件信箱的目录, 不过这个目录也被放置到/var/spool/mail/ 目录中! 通常这两个目录是互为链接文件啦! | | /var/run/ | 某些程序或者是服务启动后, 会将他们的PID放置在这个目录下喔! 至于 PID的意义我们会在后续章节提到的。 与 /run 相同, 这个目录链接到 /run 去了! | | /var/spool/ | 这个目录通常放置一些伫列数据, 所谓的“伫列”就是排队等待其他程序使 用的数据啦! 这些数据被使用后通常都会被删除。 举例来说, 系统收到新 信会放置到/var/spool/mail/中, 但使用者收下该信件后该封信原则上就会 被删除。 信件如果暂时寄不出去会被放到/var/spool/mqueue/中, 等到被 送出后就被删除。 如果是工作调度数据( crontab) , 就会被放置 到/var/spool/cron/目录中! |
3. Linux文件
3.1 文件属性与权限
```
root@maoxh-pc:/# ll
总用量 2097256
drwxr-xr-x 24 root root 4096 5月 26 11:27 ./
drwxr-xr-x 24 root root 4096 5月 26 11:27 ../
drwxrwxrwx 4 root root 4096 6月 1 21:04 app/
lrwxrwxrwx 1 root root 7 5月 14 01:49 bin -> usr/bin/
drwxr-xr-x 4 root root 4096 6月 18 06:54 boot/
lrwxrwxrwx 1 root root 10 5月 14 01:49 libx32 -> usr/libx32/
drwx------ 2 root root 16384 5月 14 01:48 lost+found/
dr-xr-xr-x 324 root root 0 5月 15 13:38 proc/
drw------- 2 root root 4096 5月 26 11:27 .Recycle_bin/
drwxr-xr-x 35 root root 1120 6月 19 16:04 run/
lrwxrwxrwx 1 root root 8 5月 14 01:49 sbin -> usr/sbin/
drwxr-xr-x 9 root root 4096 2月 23 16:54 snap/
-rw------- 1 root root 2147483648 5月 14 01:49 swapfile
dr-xr-xr-x 13 root root 0 5月 15 13:38 sys/
...
...
```
- 第一栏代表 这个文件的类型和权限\
- 第一个字符代表这个文件是“目录、 文件或链接文件等等”:
- 当为[ d ]则是目录, 例如上表文件名为“.config”的那一行
- 当为[ - ]则是文件, 例如上表文件名为“initial-setup-ks.cfg”那一行
- 若是[ l ]则表示为链接文件( link file)
- 若是[ b ]则表示为设备文件里面的可供储存的周边设备( 可随机存取设备)
- 若是[ c ]则表示为设备文件里面的序列埠设备, 例如键盘、 鼠标( 一次性读取设备)
- 后面的字符中,以三个为一组,且均为
rwx的三个参数组合。r=可读。w=可写。x=可执行.如果没有权限则会显示-。- 其中第一组为‘文件拥有者具备的权限’
- 其中第二组为‘加入此群组之帐号的权限’
- 其中第三组为‘非本人且没有加入本群组之其他帐号的权限’
- 第一个字符代表这个文件是“目录、 文件或链接文件等等”:
- 第二栏表示有多少文件名链接到此节点
- 第三栏表示这个文件的拥有者
- 第四栏表示文件的所属群组
- 第五栏为文件的容量大小,默认单位是
Bytes - 第六栏为文件的创建or修改日期
- 最后一栏就是文件名
3.2 改变文件属性与权限
groupadd: 新增一个组
chgrp: 改变文件所属群组
chown: 改变文件拥有者
chmod: 改变文件的权限
-
新增一个组
groupadd my-test-group新增完后,我们可以cat /etc/group查看``` root@maoxh-pc:/test# groupadd my-test-group root@maoxh-pc:/test# cat /etc/group root:x:0: daemon:x:1: ... ... mysql:x:134: www:x:1001: my-test-group:x:1002: ```/etc/group文件格式 由四个部分组成
- 第一字段(group_name):用户组名称。
- 第二字段(passwd):用户组密码。
- 第三字段:GID。
- 第四字段(user_list):用户列表,每个用户之间用,号分割;本字段可以为空;如果字段为空表示用户组为GID的用户名
-
改变文件组
chgrp-R 代表递归持续变更root@maoxh-pc:/test# chgrp -R my-test-group a.txt root@maoxh-pc:/test# ll 总用量 12 drwxr-xr-x 3 root root 4096 6月 19 17:22 ./ drwxr-xr-x 25 root root 4096 6月 19 17:22 ../ -rw-r--r-- 1 root my-test-group 0 6月 19 17:22 a.txt drwxr-xr-x 2 root root 4096 6月 19 17:22 bbb/ -
改变文件拥有者
chownroot@maoxh-pc:/test# chown -R maoxh bbb root@maoxh-pc:/test# ll 总用量 12 drwxr-xr-x 3 root root 4096 6月 19 17:22 ./ drwxr-xr-x 25 root root 4096 6月 19 17:22 ../ -rw-r--r-- 1 root my-test-group 0 6月 19 17:22 a.txt drwxr-xr-x 2 maoxh root 4096 6月 19 17:22 bbb/ -
改变文件权限
chmodroot@maoxh-pc:/test# chmod 755 a.txt root@maoxh-pc:/test# ll 总用量 12 drwxr-xr-x 3 root root 4096 6月 19 17:22 ./ drwxr-xr-x 25 root root 4096 6月 19 17:22 ../ -rwxr-xr-x 1 root my-test-group 0 6月 19 17:22 a.txt* drwxr-xr-x 2 maoxh root 4096 6月 19 17:22 bbb/三个数字755分别代表
拥有者,组,其他的权限
它是以二进制来转化的。7 = 111,也就是可读可写可执行。5 = 101,也就是可读可执行 -
默认权限
umaskmaoxh@maoxh-pc:~$ umask 0002 maoxh@maoxh-pc:~$ umask -S u=rwx,g=rwx,o=rxumask的值代表的是“该默认值需要减掉的权限”,比如r,w,x分别代表4,2,1。那么002代表其他组减去写的权限,也如umask -S所展示的那样maoxh@maoxh-pc:/tmp/test$ umask 022 maoxh@maoxh-pc:/tmp/test$ umask 0022 maoxh@maoxh-pc:/tmp/test$ touch txt1 maoxh@maoxh-pc:/tmp/test$ mkdir txt2 maoxh@maoxh-pc:/tmp/test$ ll -d txt* -rw-r--r-- 1 maoxh maoxh 0 6月 22 22:56 txt1 drwxr-xr-x 2 maoxh maoxh 4096 6月 22 22:56 txt2/我们修改默认权限为022。
- 创建
文件则默认没有x的权限,也就是权限值是666,对应的-rw-rw-rw-,所以减去022,得到的权限是-rw-r--r--.(减去了组和其他的读权限) - 创建
目录,默认权限值是777,对应的drwxrwxrwx,所以减去022,得到的权限是drwxr-xr-x.(减去了组和其他的读权限)
- 创建
-
文件隐藏属性(
chattrlsattr)chattr [+-=] [属性] 文件或目录名一些常见的属性如下
属性选项 功能 i 如果对文件设置 i 属性,那么不允许对文件进行删除、改名,也不能添加和修改数据; 如果对目录设置 i 属性,那么只能修改目录下文件中的数据,但不允许建立和删除文件; a 如果对文件设置 a 属性,那么只能在文件中増加数据,但是不能删除和修改数据; 如果对目录设置 a 属性,那么只允许在目录中建立和修改文件,但是不允许删除文件; u 设置此属性的文件或目录,在删除时,其内容会被保存,以保证后期能够恢复,常用来防止意外删除文件或目录。 s 和 u 相反,删除文件或目录时,会被彻底删除(直接从硬盘上删除,然后用 0 填充所占用的区域),不可恢复。 root@maoxh-pc:/tmp/test# chattr +a txt1 root@maoxh-pc:/tmp/test# lsattr txt1 -----a--------e----- txt1 -
观察文件类型
fileroot@maoxh-pc:/tmp/test# file ~/.bashrc /root/.bashrc: ASCII text root@maoxh-pc:/tmp/test# file txt1 txt1: empty root@maoxh-pc:/tmp/test# 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]=6af93256cb810d90b2f96fc052b05b43b954f5b2, for GNU/Linux 3.2.0, stripped
3.3 文件与目录相关操作
- 常见的处理目录的指令
cd: 变换目录pwd: 显示目前的目录mkdir: 创建一个新的目录cp: 复制文件或者目录rm: 移除文件或目录mv: 移动文件与目录, 或更名
- 文件内容检阅
cat由第一行开始显示文件内容tac从最后一行开始显示, 可以看出 tac 是 cat 的倒着写nl显示的时候, 顺道输出行号more一页一页的显示文件内容less与 more 类似, 但是比 more 更好的是, 他可以往前翻页空白键 : 向下翻动一页 [pagedown]: 向下翻动一页 [pageup] : 向上翻动一页 /字串 : 向下搜寻“字串”的功能 ?字串 : 向上搜寻“字串”的功能 n : 重复前一个搜寻 ( 与 / 或 ? 有关! ) N : 反向的重复前一个搜寻 ( 与 / 或 ? 有关! ) g : 前进到这个数据的第一行去 G : 前进到这个数据的最后一行去 ( 注意大小写) q : 离开 less 这个程序head只看头几行tail只看尾巴几行od以二进制的方式读取文件内容
3.4 指令与文件的搜索
-
通过
which来搜索“可执行文件”用法: which [-a] [command]
root@maoxh-pc:/tmp/test# which -a ls /usr/bin/ls /bin/ls root@maoxh-pc:/tmp/test# which ls /usr/bin/ls root@maoxh-pc:/tmp/test# which nginx /usr/bin/nginx root@maoxh-pc:/tmp/test# which mkdir /usr/bin/mkdir -
通过
whereis从一些特定的目录中寻找文件名通常情况下,我们优先使用
whereis或者locate来搜索。它们的检索效率很快速。因为whereis只找系统中某些特定目录的文件,locate则是利用数据库来搜索文件名。 可以通过whereis -l来查看检索哪些目录 -
locate通过数据库来搜寻
locate查询速度特别快的原因是它是基于数据库来搜索的。如果你是刚刚创建的数据 可能会搜索不到。数据库默认是每天刷新一次,当然也可以通过updatedb来手动刷新。maoxh@maoxh-pc:~$ locate -i nacos /data/nacos /data/nacos-server-2.0.4.zip /data/nacos/LICENSE /data/nacos/NOTICE /data/nacos/bin ...选项与参数:
-i : 忽略大小写
-c : 机算数量
-l : 输出几行。-l 5
-S : 输出locate所使用的数据库文件的相关信息
-r : 后面可接正则表达式 -
find强大的搜索指令find [path] [option] [action]
- 找出/etc下面,文件日期比/etc/passwd新的
find /etc -newer /etc/passwd\ - 找出文件名是 passwd的文件
find / -name passwd\ - 找出文件名包含passwd关键字的文件
find / -name "*passwd*"\ - 找出/run目录下,文件类型是Socket的文件名
find /run -type s
搜索文件类型是TYPE的,类型主要有:一般文件(f),设备文件(b,c),目录(d),链接文件(l),socket(s),以及FIFO(p)等属性
-
找出 文件大小 大于1MB的文件
find / -size +1M
- 找出/etc下面,文件日期比/etc/passwd新的