文章目录
一、Linux目录结构
在 Linux 系统中,所有内容都是以文件的形式保存和管理的,即「一切皆文件」。普通文件是文件,目录(Windows 下称为文件夹)是文件,硬件设备(键盘、监视器、硬盘、打印机)是文件,就连套接字(socket)、网络通信等资源也都是文件。
linux只有一个根目录,而且文件和目录被组织成一个单根倒置树结构,此结构最上层是根目录,用“/”表示。
因此,根目录必须包含开机软件、核心文件、开机所需程序、函数库、修复系统程序等文件,常见的子目录如下图
一级目录 | 功能(作用) |
---|---|
/root | 管理员的宿主(家)目录 |
/home/xxx | 除root用户之外的普通用户的家目录 |
/bin | 存放二进制文件,所有用户可执行的命令。实际是个软链接,链接到/usr/bin |
/sbin | 存放二进制文件,只有管理员可执行的管理命令。软链接到/usr/sbin |
/boot | 系统内核、启动文件目录 |
/dev | 存放设备文件(光驱、硬盘等) |
/etc | 存放系统程序和大部分应用程序(rpm、yum安装)的配置文件 |
/var | 存放可以变化的文件,包括各种日志文件 |
/lib | 存放系统程序的动态链接共享文件(类似于Windows里的DLL文件),软链接到/usr/lib |
/usr | 存放系统用户工具和程序文件 |
/media | 可拆卸的媒介挂载点,例如U盘、光驱等 |
/mnt | 用于临时挂载储存设备的目录 |
/opt | 第三方应用程序安装存放的目录 |
/tmp | 存放系统的临时文件,/tmp目录下的临时文件会被系统定期删除或者关机时自动删除 |
/proc | 包含虚拟的文件,它们实际上并不存在于磁盘上,也不占用任何空间(虽然用ls -l 可以显示它们的大小),当查看这些文件时,实际上是在访问存在内存中的信息,这些信息用于访问系统。 |
二、查看及检索文件
cat命令——查看文件内容
cat命令(concatenate的缩写)是Linux操作系统中使用最广泛的命令行实用工具之一。它是一个标准的Linux实用程序,用于查看小文件的内容,而不需要在任何文本编辑器中打开它。cat命令的另一个主要用法是将多个文件串联到一个文件中。
1.基本语法
cat [选项] 文件名...
2.基本参数
参数 | 含义 |
---|---|
-n | 显示行号(空行也编号) |
-s | 合并多行空行为一行 |
-b | 显示行号(空行不编号) |
-e | 每行结尾处显示$ |
--help | 显示帮助信息 |
--version | 显示版本信息 |
3.常用格式
查看指定文件的行号
[root@host ~]# cat -n /etc/passwd
查看指定文件中所有行数,包含空行,但空行不显示行号
[root@host ~]# cat -b 1.txt
查看指定文件的行号,并且压缩多个空行为一个空行,空行也计算在行号内
[root@host ~]# cat -ns 1.txt
查看多个指定文件的内容
[root@host ~]# cat 1.txt 2.txt 3.txt
将两个文件输出追加到另一个文件
文件的顺序决定决定内容追加的顺序
[root@host ~]# cat 2.txt 3.txt > abc.txt
[root@host ~]# cat abc.txt
more命令——查看文件内容
more 命令可以分页显示文本文件的内容,使用者可以逐页阅读文件中内容。
1.基本语法
more [选项] 文件名
2.交互指令
对于more 命令比较简单,一般不用什么选项。more 命令的执行会打开一个交互界面,因此读者有必要了解一些交互命令,常用的交互命令如下图。
交互指令 | 功能 |
---|---|
q 或 Q | 退出 more。 |
b | 向上移动一页。 |
回车键 | 向下移动一行。 |
空格键 | 向下移动一页。 |
注意:下翻到最后一页会自动退出。more命令与管道符搭配使用,不能向上翻页。
3.使用方法
使用交互命令查看文本信息
用分页的方式显示 anaconda-ks.cfg 文件的内容。
[root@host ~]# more anaconda-ks.cfg
#version=DEVEL
# System authorization information
auth --enableshadow --passalgo=sha512
# Use CDROM installation media
cdrom
...
--More--(36%)
less命令——查看文件内容
less 命令的作用和 more 十分类似,都用来浏览文本文件中的内容,不同之处在于,使用 more 命令浏览文件内容时,只能不断向后翻看,而使用 less 命令浏览,既可以向后翻看,也可以向前翻看。
1.主要功能
- 使用光标键可以在文本文件中前后(左后)滚屏;
- 用行号或百分比作为书签浏览文件;
- 提供更加友好的检索、高亮显示等操作;
- 兼容常用的字处理程序(如 Vim、Emacs)的键盘操作;
- 阅读到文件结束时,less 命令不会退出;
- 屏幕底部的信息提示更容易控制使用,而且提供了更多的信息。
2.基本语法
less [选项] 文件名...
3.交互指令
在使用 less 命令查看文件内容的过程中,和 more 命令一样,也会进入交互界面,因此需要读者掌握一些常用的交互指令,如下图。
交互指令 | 功能 |
---|---|
/字符串 | 向下搜索“字符串”的功能。 |
b | 向上移动一页. |
q 或 Q | 退出 less 命令。 |
↑ | 向上逐行滚动。 |
↓ | 向下逐行滚动。 |
空格键 | 向下移动一页。 |
回车键 | 向下移动一行。 |
【PgDn】键 | 向下移动一页。 |
【PgUp】键 | 向上移动一页。 |
注意:less命令与管道符搭配使用,可以实现向上翻页;less命令可以实现查找作用。
4.使用方法
使用 less 命令查看 /boot/grub/grub.cfg 文件中的内容。
[root@host ~]# less /etc/yum.conf
head命令——查看文件内容
head 就像它的名字一样的浅显易懂,它是用来显示开头或结尾某个数量的文字区块,head 用来显示档案的开头至标准输出中。
1基本语法
head [选项] 文件名
2.基本参数
选项 | 含义 |
---|---|
-n k | 这里的 K 表示行数,该选项用来显示文件前 K 行的内容;如果使用 “-K” 作为参数,则表示除了文件最后 K 行外,显示剩余的全部内容。 |
-v | 显示文件名。 |
注意,如不设置显示的具体行数,则默认显示 10 行的文本数据。
3.常用格式
使用head命令直接查看文件默认前10行内容
[root@host ~]# head anaconda-ks.cfg
使用head命令查看前20行的内容
[root@host ~]# head -n 20 anaconda-ks.cfg
使用head命令查看除了后面10行的内容
[root@localhost ~]# head -n -20 anaconda-ks.cfg
tail命令——查看文件内容
tail 就像它的名字一样的浅显易懂,它是用来显示开头或结尾某个数量的文字区块,tail是看档案的结尾。 一般用来看日志文件,方便查看实时的日志更新情况。
1.基本语法
tail [选项] 文件名
2.基本参数
选项 | 含义 |
---|---|
-n K | 这里的 K 指的是行数,该选项表示输出最后 K 行,在此基础上,如果使用 -n +K,则表示从文件的第 K 行开始输出。 |
-f | 输出文件变化后新增加的数据。 |
3.常用格式
使用tail命令查看 /etc/passwd 文件最后 3 行的数据内容。
[root@host ~]# tail -n 3 /etc/passwd
sshd:x:74:74:Privilege-separated SSH:/var/empty/sshd:/sbin/nologin
oprofile:x:16:16:Special user account to be used by OProfile:/var/lib/oprofile:/sbin/nologin
tcpdump:x:72:72::/:/sbin/nologin
使用tail命令查看 /etc/passwd 文件最后 3 行的数据内容的另一种方式。
[root@lhost ~]# tail -3 /etc/passwd
sshd:x:74:74:Privilege-separated SSH:/var/empty/sshd:/sbin/nologin
oprofile:x:16:16:Special user account to be used by OProfile:/var/lib/oprofile:/sbin/nologin
tcpdump:x:72:72::/:/sbin/nologin
可以看到,使用 tail -n 3 /etc/passwd
命令和 tail -3 /etc/passwd
的效果是一样的。
想要查看文件实时更新情况
首先手动修改文件,需要打开另一个窗口界面,然后通过tail -f实时查看文件更新情况
[root@host ~]# tail -f abc.txt
[root@host ~]# echo 777 >> abc.txt
wc命令——统计文件内容
Linux系统中的wc(Word Count)命令的功能为统计指定文件中的字节数、字数、行数,并将统计结果显示输出。其主要功能是统计指定文件中的字节数、字数、行数,并将统计结果显示输出。该命令统计指定文件中的字节数、字数、行数。如果没有给出文件名,则从标准输入读取。wc同时也给出所指定文件的总统计数。
1.基本语法
wc [选项]... 目标文件...
2.基本参数
选项 | 含义 |
---|---|
-l | 统计行数。空行占用的行数也计算在内。 |
-w | 统计单词个数。空格、tab、换行会进行统计,占用一个单词个数 |
-c | 统计字节数。空格、tab或空行统计字节数(空行、换行符以及结尾符都算作是一个单独的字节)。 |
注意:如果wc命令不带任何选项,默认同时使用-lwc
三个选项。
3.常用格式
直接查看文件内容
[root@host ~]# wc abc.txt
//9代表行数9行,6代表单词数为6个,24代表24字节
9 6 24 abc.txt
查看指定文件中所有行数
[root@host ~]# wc -l abc.txt
//9嗲表行数为9行
9 abc.txt
查看指定文件中单词数
[root@host ~]# wc -w abc.txt
//6代表单词数为6个
6 abc.txt
查看指定文件中的字节
[root@host ~]# wc -c abc.txt
//24代表24字节
24 abc.txt
grep命令——检索和过滤文件内容
grep (缩写来自Globally search a Regular Expression and Print)是一种强大的文本搜索工具,它能使用特定模式匹配(包括正则表达式)搜索文本,并默认输出匹配行
1.基本语法
grep [选项]... 查找条件 目标文件
2.基本参数
grep命令根据不同选项可以过滤出相匹配的内容,那么选项都有哪些呢,可以看下图
选项 | 含义 |
---|---|
-i | 查找时不区分大小写 |
-v | 显示不包含匹配文本的所有行(反向查询,反向匹配) |
-c | 只输出匹配到的总行数(不是匹配到的次数) |
-n | 显示匹配行及行号 |
-e | 实现可多个查找条件的匹配,逻辑or关系 |
-E | 支持使用扩展正则表达式,相当于使用egrep命令 |
-o | 精确匹配,即“仅匹配”之意。 |
-A n | 显示匹配行和它后面的n行。 |
-B n | 显示匹配行和它前面的n行。 |
-C n | 匹配行和它前后各n行。 |
-l | 列出文件内容符合指定的样式的文件名称 |
-w | 只显示全字符合的列。 |
grep命令根据不同的条件进行匹配出符合条件的内容,而查找条件也有不同的设置方式
条件 | 含义 |
---|---|
“” | 要查找的字符串以双引号括起来 |
^…… | 代表以……开头的字符串 |
……$ | 代表以……结尾的字符串 |
^$ | 代表空行 |
3.常用格式
查看想要符合搜索的文本
[root@host ~]# grep 6 abc.txt
626
666
676
想要查询符合搜索的单词,不区分大小写
[root@host ~]# grep -i system anaconda-ks.cfg
# System authorization information
# System language
# System services
# System timezone
# X Window System configuration information
# System bootloader configuration
@network-file-system-client
想要查看不包含搜索单词的文件内容
//*反向查询并显示所有不以#号开头的行(-v方向查询并显示后面参数未匹配到的内容)*
[root@host ~]# grep -v "^#" anaconda-ks.cfg
auth --enableshadow --passalgo=sha512
cdrom
graphical
firstboot --enable
ignoredisk --only-use=sda
keyboard --vckeymap=cn --xlayouts='cn'
lang zh_CN.UTF-8
network --bootproto=dhcp --device=ens32 --onboot=off --ipv6=auto --no-activate
network --hostname=localhost.localdomain
rootpw --iscrypted $6$RWPpARo.wYlm0uvS$in37N24V4AMDDxOSeZBmYT8JiI9ZG.5zYpScyUn1PEb9drDlfdfGPlKUaibFvMNHentiCfq9riWlLRQx35sob1
想要统计匹配搜索内容的行数
//统计以#号开头匹配的行数
[root@host ~]# grep -c "^#" anaconda-ks.cfg
15
//统计以#号开头的行数
[root@host ~]# grep "^#" anaconda-ks.cfg | wc -l
15
可以看到,使用 grep -c "^#" anaconda-ks.cfg
命令和 grep "^#" anaconda-ks.cfg | wc -l
的效果是一样的。|
是将左边的命令的结果,作为右边的命令的输入。
想要精准查询某个字符串
//统计指定文件中匹配到的指定字符串(cn)的次数
[root@host ~]# grep -o "cn" anaconda-ks.cfg
cn
cn
想要查询某个字符串所在行数并显示具体内容
//查询并显示指定文件中含有no字符串的行,并将该行在原文件中的行数显示出来
[root@host ~]# grep -n "no" anaconda-ks.cfg
10:ignoredisk --only-use=sda
17:network --bootproto=dhcp --device=ens32 --onboot=off --ipv6=auto --no-activate
32:clearpart --none --initlabel
38:@^gnome-desktop-environment
46:@gnome-desktop
67:pwpolicy root --minlen=6 --minquality=1 --notstrict --nochanges --notempty
68:pwpolicy user --minlen=6 --minquality=1 --notstrict --nochanges --emptyok
69:pwpolicy luks --minlen=6 --minquality=1 --notstrict --nochanges --notempty
想要查询符合其中一个的条件内容或者符合另一个的条件内容
//查询并显示指定文件中以#号开头,或者以@开头的内容(-e多条件查询,和其他选项一起使用时,选项-e放在最后)(实现或的作用)
[root@host ~]# grep -e "^#" -e "^@" anaconda-ks.cfg
#version=DEVEL
# System authorization information
# Use CDROM installation media
# Use graphical install
# Run the Setup Agent on first boot
# Keyboard layouts
# System language
# Network information
# Root password
# System services
# System timezone
# X Window System configuration information
# System bootloader configuration
# Partition clearing information
# Disk partitioning information
@^gnome-desktop-environment
@base
@core
@desktop-debugging
@development
@dial-up
@directory-client
@fonts
@gnome-desktop
@guest-agents
@guest-desktop-agents
@input-methods
@internet-browser
@java-platform
@multimedia
@network-file-system-client
@networkmanager-submodules
@print-client
@x11
使用正则表达式查询内容
//查询并显示指定文件中以#号开头,或者以@开头的行*
[root@host ~]# grep -E "^#|^@" anaconda-ks.cfg
#version=DEVEL
# System authorization information
# Use CDROM installation media
# Use graphical install
# Run the Setup Agent on first boot
# Keyboard layouts
# System language
# Network information
# Root password
# System services
# System timezone
# X Window System configuration information
# System bootloader configuration
# Partition clearing information
# Disk partitioning information
@^gnome-desktop-environment
@base
@core
@desktop-debugging
@development
@dial-up
@directory-client
@fonts
@gnome-desktop
@guest-agents
@guest-desktop-agents
@input-methods
@internet-browser
@java-platform
@multimedia
@network-file-system-client
@networkmanager-submodules
@print-client
@x11
过滤指定文件中的内容并查看
查看指定字符串的前5行内容
//查看指定文件中含有"system timezone" 字符串,不区分大小写,并且显示出字符串所在原文件中的行号,以及所在行号后面的5行内容,一并显示出来
[root@host ~]# cat anaconda-ks.cfg | grep -A 5 -in "system timezone"
24:# System timezone
25-timezone Asia/Shanghai --isUtc
26-user --name=test --password=$6$azaqdfxdkwB98/wd$Mc4vp.ESYFoVOj3NM08sXM8dH3tnFLNmOUlKKZ7cYxIsFFC62J2QaVOcEdpkRmU.SS43OWnvSh1yYqD2tFmv01 --iscrypted --gecos="test"
27-# X Window System configuration information
28-xconfig --startxonboot
29-# System bootloader configuration
查看指定字符串的后5行内容
//查看指定文件中含有"system timezone" 字符串,不区分大小写,并且显示出字符串所在原文件中的行号,以及所在行号前面的5行内容,一并显示出来
[root@host ~]# cat anaconda-ks.cfg | grep -B 5 -in "system timezone"
19-
20-# Root password
21-rootpw --iscrypted $6$RWPpARo.wYlm0uvS$in37N24V4AMDDxOSeZBmYT8JiI9ZG.5zYpScyUn1PEb9drDlfdfGPlKUaibFvMNHentiCfq9riWlLRQx35sob1
22-# System services
23-services --enabled="chronyd"
24:# System timezone
查看指定字符串的前后 5 行内容
//查看指定文件中含有"system timezone" 字符串,不区分大小写,并且显示出字符串所在原文件中的行号,以及所在行号的前后各5行的内容,一并显示出来
[root@host ~]# cat anaconda-ks.cfg | grep -C 5 -in "system timezone"
19-
20-# Root password
21-rootpw --iscrypted $6$RWPpARo.wYlm0uvS$in37N24V4AMDDxOSeZBmYT8JiI9ZG.5zYpScyUn1PEb9drDlfdfGPlKUaibFvMNHentiCfq9riWlLRQx35sob1
22-# System services
23-services --enabled="chronyd"
24:# System timezone
25-timezone Asia/Shanghai --isUtc
26-user --name=test --password=$6$azaqdfxdkwB98/wd$Mc4vp.ESYFoVOj3NM08sXM8dH3tnFLNmOUlKKZ7cYxIsFFC62J2QaVOcEdpkRmU.SS43OWnvSh1yYqD2tFmv01 --iscrypted --gecos="test"
27-# X Window System configuration information
28-xconfig --startxonboot
29-# System bootloader configuration
想要查找文件名
//在目录下查找含有“name”的文件名称
[root@host ~]# grep -l "name" ~/anaconda-ks.cfg
/root/anaconda-ks.cfg
想要精准查询文件名
//使用递归查找在etc目录下精准查找boot文件
[root@host ~]# grep -r -w -l "boot" /etc
/etc/grub.d/00_header
/etc/grub.d/10_linux
/etc/grub.d/20_linux_xen
/etc/grub.d/30_os-prober
/etc/grub.d/README
/etc/udev/hwdb.bin
/etc/e2fsck.conf
/etc/logrotate.d/bootlog
/etc/selinux/targeted/contexts/files/file_contexts
/etc/selinux/targeted/contexts/files/file_contexts.bin
/etc/selinux/targeted/contexts/files/file_contexts.homedirs
/etc/selinux/targeted/contexts/files/file_contexts.homedirs.bin
/etc/selinux/targeted/policy/policy.31
/etc/selinux/targeted/active/file_contexts
/etc/selinux/targeted/active/file_contexts.homedirs
/etc/selinux/targeted/active/homedir_template
/etc/selinux/targeted/active/policy.kern
/etc/selinux/targeted/active/policy.linked
/etc/sysconfig/network-scripts/ifup-ippp
/etc/sysconfig/network-scripts/ifup-plusb
/etc/sysconfig/network-scripts/ifup-post
/etc/sysconfig/network-scripts/ifup-ppp
/etc/sysconfig/kdump
/etc/libreport/events.d/abrt_event.conf
/etc/ld.so.cache
/etc/rc.d/init.d/functions
/etc/rc.d/init.d/network
/etc/rc.d/rc.local
/etc/dracut.conf
/etc/iproute2/rt_protos
/etc/kdump.conf
/etc/cgconfig.conf
/etc/kernel/postinst.d/51-dracut-rescue-postinst.sh
/etc/dnsmasq.conf
/etc/auto.misc
/etc/tuned/bootcmdline
/etc/rsyslog.conf
/etc/fwupd/uefi.conf