Linux文件系统
在Linux中,文件以目录层次结构的形式组织。每一个目录包含了文件及其他目录,可以使用完整路径(比如/usr/local/share/info)或者相对路径(比如/etc)。
基础文件命令:
col命令就相当于一个标准输入文本过滤器,它会从标注输入设备内读取文本内容,并且将内容显示到标注输出设备。 语法 col [-bfx][-l<缓冲区列数>] 参数 -b:过滤掉所有的控制字符,包括RLF和HRLF。 -f:滤除RLF字符,但允许将HRLF字符呈现出来。 -x:以多个空格字符来表示跳格字符。 -l<缓冲区列数>:预设的内存缓冲区有128列,您可以自行指定缓冲区的大小。 |
Linux目录
- /bin——包含常见的Linux用户命令,例如ls、sort、date和chmod。
- /boot——包含可启动的Linux内核、最初的RAM盘和启动加载程序的配置文件(GRUB)。
- /dev——包含用来表示系统中设备访问点的文件。这些设备包括终端设备(tty*)、硬盘驱动器(hd*或sd*)、RAM(ram*)以及CD-ROM(cd*)。用户可以直接通过这些设备文件访问相应的设备;然而,应用程序通常会对最终用户隐藏实际的设备名称。
- /etc——包含管理配置文件。其中大多数文件都是纯文本文件,只要用户拥有适当的权限,就可以使用任何文本编辑器编辑这些配置文件。
- /home——包含分配给每个带有登录账号的普通用户的目录(root是一个例外,使用/root作为主目录)。
- /media——为自动挂载设备(特别是可移动介质)提供了一个标准位置。若介质拥有一个卷名,那么一般来说使用该卷名作为挂载点。例如,一个卷名为myusb的USB驱动器将被挂载到/media/myusb。
- /lib——包含/bin和/sbin目录中的应用程序启动系统所需的共享库。
- /mnt——是许多设备常见的挂载点。一些可启动的Linux系统仍使用该目录来挂载硬盘分区和远程文件系统,此外也多使用临时挂载哪些不需要永久挂载的本地或远程文件系统。
- /misc——用来根据请求自动挂载文件系统。
- /opt——用来存储附加应用程序软件的目录结构。
- /proc——包含关于系统资源的信息。
- /root——表示root用户的主目录,出于安全原因,该目录没有位于/home目录下。
- /sbin——包含管理命令和守护进程。
- /sys——包含用于调优块存储和管理cgroups的参数。
- /tmp——包含应用程序使用的临时文件。
- /usr——包含用户文档、游戏、图形文件(X11)、库(lib)以及其他不需要在启动过程中使用的命令和文件。/usr目录中的文件在安装完毕后就不可更改(从理论上讲,/usr可以以只读方式挂载)
- /var——包含不同应用程序所使用的数据目录。尤其是可以在该目录中放置作为FTP服务器(/var/ftp)或WEB服务器(/var/www)共享的文件。此外还包含所有的系统日志文件(/var/log)以及假脱机文件(/var/spool,如mail、cups和news)。此目录中的目录和文件经常被修改。在服务器计算机上,通常会创建一个/var目录作为一个单独的文件系统,使用一种易于拓展的文件系统。
元字符和运算符
在Linux系统中,不管是列举、移动、复制、删除文件,还是在文件上完成其他操作,某些特殊字符(通常被称为元字符和运算符)都可以帮助更有效地使用文件。元字符可以帮我们匹配一个或多个文件,而不必完全输入每个文件名;而运算符能将来自某一命令或者文件的信息定向到另一个命令或文件。
使用文件匹配元字符
元字符:
* |
匹配任何数量的字符 |
? |
匹配任何一个字符 |
[…] |
匹配括号之间的任何一个字符,可以包括一个连字符分隔的字母或数字范围。 |
示例:
[root@fedora32 tmp]# touch apple banana grape grapefruit [root@fedora32 tmp]# ls a* apple [root@fedora32 tmp]# ls a? ls: cannot access 'a?': No such file or directory [root@fedora32 tmp]# ls g*t grapefruit [root@fedora32 tmp]# ls ????e apple grape [root@fedora32 tmp]# ls [abd]* apple banana bash-fc.KF1urs [root@fedora32 tmp]# ls [a-g]* apple banana bash-fc.KF1urs grape grapefruit |
使用文件重定向元字符
一般来说,命令从标准输入中接收数据,然后将数据发送到标准输出。通过使用管道,可将一条命令的标准输出定向到另一条命令的输入。而对于文件,可以使用小于号(<)和大于号(>)在文件之间定向数据。
文件定向字符:
< |
将文件的内容定向到命令。大多数情况下,这是命令的默认行为。使用less test 等同于 less < test |
> |
将命令的标准输出定向到一个文件。若文件存在,该文件内容被重写。 |
2> |
将标准错误(错误信息)定向到文件 |
&> |
将标准输出和标准错误定向到文件 |
>> |
将命令的输出定向到一个文件,并将该输出添加到现有文件的末尾。 |
重定向的另一种类型被称为here text(也被称为here document)。该类型能够让所输入的文本用作命令的标准输入。Here document要求在命令之后输入两个小于字符(<<),然后紧跟一个单词。该单词之后所输入的所有内容将作为用户输入,直到该单词在命令行中再次出现为止。示例如下:
[root@fedora32 ~]# mail root << EOF > This is document in mail > "mail" is commond use post the email > "root" is receive email user > "<<" is system I/O > "EOF...EOF" is random character,the same character is end > EOF [root@fedora32 ~]# |
Here text常见的用法是将其与文本编辑器一起使用,从而通过脚本创建或添加到文本中。Ed文本编辑器使用示例:
[root@fedora32 ~]# ed --help GNU Ed - The GNU line editor. Usage: ed [options] [file] Options: -h, --help display this help and exit -V, --version output version information and exit -G, --traditional run in compatibility mode -l, --loose-exit-status exit with 0 status even if a command fails -p, --prompt=STRING use STRING as an interactive prompt -r, --restricted run in restricted mode -s, --quiet, --silent suppress diagnostics, byte counts and '!' prompt -v, --verbose be verbose; equivalent to the 'H' command Start edit by reading in 'file' if given. If 'file' begins with a '!', read output of shell command. Exit status: 0 for a normal exit, 1 for environmental problems (file not found, invalid flags, I/O errors, etc), 2 to indicate a corrupt or invalid input file, 3 for an internal consistency error (eg, bug) which caused ed to panic. Report bugs to bug-ed@gnu.org Ed home page: http://www.gnu.org/software/ed/ed.html General help using GNU software: http://www.gnu.org/gethelp [root@fedora32 ~]# /usr/bin/ed /tmp/test.conf << EOF > a > nameserver 10.1.1.1 > . > w > q > EOF [root@fedora32 ~]# 使用ed命令进行文本编辑的基本步骤如下: 打开文件:使用ed命令打开一个文件,例如:ed filename。 进入编辑模式:输入a命令进入添加模式,或输入i命令进入插入模式。 编辑文件:在编辑模式下,可以进行文本的添加、修改和删除操作。 保存文件:输入w命令保存文件。 退出编辑:输入q命令退出编辑模式。 |
使用括号拓展字符
通过使用大括号({}),可以跨文件名、目录名或者命令中的其他参数拓展一组字符。示例如下:
[root@fedora32 tmp]# touch mem{1,2,3} #创建多个文件 [root@fedora32 tmp]# ls mem1 mem2 mem3 [root@fedora32 tmp]# touch {date}-{1,2} [root@fedora32 tmp]# ll total 0 -rw-r--r--. 1 root root 0 Nov 30 13:25 {date}-1 -rw-r--r--. 1 root root 0 Nov 30 13:25 {date}-2 [root@fedora32 tmp]# touch {a..d}{1..4} [root@fedora32 tmp]# ll total 0 -rw-r--r--. 1 root root 0 Nov 30 13:26 a1 -rw-r--r--. 1 root root 0 Nov 30 13:26 a2 -rw-r--r--. 1 root root 0 Nov 30 13:26 a3 |
文件和目录
[root@fedora32 usr]# ll total 3 -rwxr-xr-x. 7 root root 4096 Nov 29 11:01 share drwxr-xr-x. 4 root root 34 Nov 2 07:21 src lrwxrwxrwx. 1 root root 10 Jan 28 2020 tmp -> ../var/tmp [root@fedora32 ~]# ll -a #显示隐藏或非隐藏文件 total 48 dr-xr-x---. 2 root root 184 Nov 30 12:57 . dr-xr-xr-x. 17 root root 224 Nov 2 08:13 .. -rw-------. 1 root root 2595 Nov 30 13:21 .bash_history #以一个点(.)开头的文件被称为隐藏文件 -rw-r--r--. 1 root root 18 Jan 30 2020 .bash_logout -rw-r--r--. 1 root root 141 Jan 30 2020 .bash_profile [root@fedora32 ~]# ll -at #-t选项按照文件最新修改时间顺序显示文件 total 48 -rw-------. 1 root root 2595 Nov 30 13:21 .bash_history dr-xr-x---. 2 root root 184 Nov 30 12:57 . dr-xr-xr-x. 17 root root 224 Nov 2 08:13 .. -rw-r--r--. 1 root root 18 Jan 30 2020 .bash_logout -rw-r--r--. 1 root root 141 Jan 30 2020 .bash_profile [root@fedora32 usr]# ll -F #-F选项,则在目录名的末尾出现一个反斜杠(/),向可执行文件添加一个星号(*)以及在符号链接旁显示一个at符号(@)。 total 128 dr-xr-xr-x. 2 root root 28672 Nov 30 13:16 bin/ lrwxrwxrwx. 1 root root 8 Jan 29 2020 ypdomainname -> hostname* lrwxrwxrwx. 1 root root 5 Mar 1 2021 yum -> dnf-3* lrwxrwxrwx. 1 root root 10 Jan 28 2020 tmp -> ../var/tmp/ |
以上内容中,每行的第一个字符显示了文件类型。其中连字符(-)表示常规文件,d表示一个目录,l(小写的L)表示一个符号链接。
在使用ls命令时避免显示某些文件或目录,可使用—hide=选项。
[root@fedora32 bin]# ls --hide=[a-y]* #不列出以a-y开头的文件 '[' VBoxClient-all VBoxDRMClient zcmp zegrep zforce zip zipdetails zipinfo zipsplit zmore zsoelim [root@fedora32 bin]# ls -ld /usr/bin #列出某一目录的信息,而不是其包含的文件 dr-xr-xr-x. 2 root root 28672 Nov 30 13:16 /usr/bin [root@fedora32 bin]# ls -l /usr/bin total 151444 -rwxr-xr-x. 1 root root 63088 Feb 2 2021 '[' -rwxr-xr-x. 2 root root 36478 Jan 28 2020 aclocal -rwxr-xr-x. 2 root root 36478 Jan 28 2020 aclocal-1.16 [root@fedora32 tmp]# mkdir -p /sh/dh.sh #-p创建多层目录 [root@fedora32 tmp]# ls -R #列出当前目录下的所有文件和子目录 [root@fedora32 tmp]# ls -S #按文件大小列出文件 |
关于文件和目录列表的其他事实:
- 在可执行文件的所有者(-rwsr-xr-x)或者组(-rwxr-sr-x)权限,又或者出现两者(-rwsr-sr-x)中出现一个s,则表示应用程序可以被任何用户访问,而运行进程的所有权分配给应用程序的用户/组,而不是启动该命令的用户。该过程分别称为Set UID或Set GID程序。
- 目录的末尾出现一个t,则表示该目录设置了一个粘滞位(例如drwxrwxr-t)。通过在目录上设置一个粘滞位,目录的所有者可以允许其他用户和组向该目录中添加文件,却阻止用户删除目录中其他人添加的文件。通过为某一目录分配一个Set GID,该目录中所创建的任何文件都分配到与目录组相同的组(如果在一个目录上看到的是一个大写S或T,而不是执行位,则意味着分别设置了Set GID或粘滞位,而出于某些原因执行位没有开启)。
- 在权限位的末尾看到一个加号(例如-rw-rwxr--+),则意味着在文件上设置了拓展属性,如ACL或SELinux。末尾的点表示在文件中设置了SELinux。