目录
一、Linux目录与文件
1、文件系统的目录结构
- 以 . 开头的文件均为隐藏文件
- 路径用/分开,/不在第一位就是分隔符
- 文件名最长255个字符
- 区分大小写
- 所有分区、目录、文件等的位置起点
- 整个树形目录结构中,使用独立的一个“/”表示
- 不管计算机拥有多少个分区,多少个硬盘,操作系统使用时只能有一个根
2、Linux中的常见目录
/root:系统管理员root的宿主(家)目录
/home:普通用户的宿主目录 zhangsan --> /home/zhangsan/
/boot:系统内核、启动文件
/dev:设备文件
/etc:配置文件
/lib,/lib64:库文件(so)
/tmp:临时文件
/media,/mnt 默认挂载点
/bin:所有用户可执行的命令
/sbin:管理员可执行的管理命令
/usr,/opt:应用程序
/var/log:日志文件等
Linux 的目录结构(也称为文件系统结构)是层次化的,并且遵循了 UNIX 文件系统标准(FHS, Filesystem Hierarchy Standard)。以下是 Linux 系统中一些主要的目录及其常见的用途:
- / (根目录):所有的文件和目录都挂载在此目录下。
- /bin:存放二进制可执行文件,这些文件在单用户模式下也是可用的。如 ls, cp, mv 等基本命令。
- /boot:包含引导加载程序(如 GRUB)相关的文件,以及内核和初始 RAM 磁盘镜像(initrd 或 initramfs)。
- /dev:存放设备文件,代表系统中的每一个设备和接口。如 /dev/sda 表示第一个 SATA 硬盘,/dev/tty1 表示第一个控制台等。
- /etc:存放系统配置文件,包括网络设置、系统启动脚本和守护进程配置文件等。
- /home:用户的主目录,每个用户在自己的主目录下有一个以自己用户名命名的目录,可以存放自己的文件。
- /lib 和 /lib64:存放库文件,这些库文件是二进制可执行文件在运行时需要的。/lib 通常存放 32 位库,/lib64 存放 64 位库。
- /media:当外部设备(如 USB 驱动器或 CD-ROM)被挂载时,它们通常会被挂载在此目录下。
- /mnt:临时挂载点,用于挂载文件系统。
- /opt:可选的应用软件包的安装位置。这些软件包通常不由系统的包管理器管理。
- /proc:虚拟文件系统,用于内核和进程之间的通信。
- /root:root 用户(超级用户)的主目录。
- /run:在系统启动后,存放运行时的数据。在系统重启后,这个目录下的数据通常会被清空。
- /sbin:存放系统管理员使用的二进制可执行文件,如 iptables、init 等。这些命令在单用户模式下可能不可用。
- /srv:存放本地服务相关的数据。
- /sys:虚拟文件系统,提供了访问内核对象(如设备、模块等)的接口。
- /tmp:存放临时文件,这些文件在系统重启后通常会被清空。
- /usr:用户相关的文件和目录。如:
- /var:存放经常变动的文件,如日志文件、邮件队列、数据库文件等。
- /lost+found:当文件系统检查工具(如 fsck)检测到损坏的或孤立的 inode 时,它们会被存放在此目录。
- /usr/bin:存放用户可执行的命令
- /usr/lib:存放库文件
- /usr/share:存放共享数据等。
- /usr/local:通常用于存放本地安装的软件包,这些软件包不由系统的包管理器管理。
- /usr/src:存放源代码。
- /var/log:存放系统日志。
- /var/mail:存放用户邮件。
- /var/run:存放当前系统的信息(与 /run 类似,但在一些系统中仍然使用)。
- /var/spool:存放打印队列、邮件队列等。
- /var/tmp:存放临时文件,但在系统重启后不会清空。
这只是 Linux 文件系统结构的一个概览,实际上还有许多其他的目录和子目录,但它们通常是为了满足特定的需求或用途而存在的。
除了上面列出的主要目录外,Linux 文件系统还有一些其他的目录和子目录,它们在某些特定的场景或应用中起着重要的作用。
- /proc 目录下存放了许多虚拟文件,这些文件提供了关于系统硬件和正在运行的进程的信息。例如,/proc/cpuinfo 文件包含了关于 CPU 的详细信息,/proc/meminfo 文件则包含了关于系统内存使用情况的信息。
- /sys 目录是一个虚拟文件系统,它提供了对内核对象的访问。这使得用户空间程序能够直接读取和修改内核参数,以及查询设备的属性。/sys 目录下的文件和目录都是按照内核对象(如设备、模块等)的层次结构来组织的。
- /selinux 目录(如果存在)与 SELinux(Security-Enhanced Linux)有关,SELinux 是一个为 Linux 提供的强制访问控制(MAC)安全框架。这个目录下的文件包含了 SELinux 的策略和规则,以及相关的状态信息。
- /srv 目录通常用于存放本地服务相关的数据。例如,如果你运行了一个 web 服务器,那么 web 服务器的配置文件、日志文件和数据文件可能都会存放在 /srv/www 或类似的目录下。
- /mnt 和 /media 目录通常用于挂载外部设备或文件系统。/mnt 目录通常用作临时的挂载点,而 /media 目录则通常用于自动挂载设备(如 USB 驱动器或 CD-ROM)。
- /lost+found 目录是一个特殊的目录,当文件系统在挂载时发现问题(如孤立的 inode)时,这些文件会被移动到这个目录下。通常,这个目录在正常情况下是空的,但在文件系统损坏或恢复后,你可能会在这里找到一些丢失的文件。
需要注意的是,虽然 Linux 的文件系统结构是层次化的,并且遵循了 UNIX 文件系统标准(FHS),但不同的 Linux 发行版可能会对这个标准有一些细微的差别或扩展。因此,在不同的 Linux 发行版之间,某些目录或文件的位置可能会有所不同。然而,大多数主要的目录和文件结构都是相似的,这使得从一个 Linux 发行版迁移到另一个发行版变得相对容易。
3、Linux常见的文件类型
file 文件名 # 查看文件类型
字符 | 说明 |
- | 普通文件文本文件,包括纯文本文件、二进制文件、各种压缩文件等 |
c | 字符设备文件,一次只能录入一个字符,比如键盘 |
b | 块设备文件,保存大块数据的设备,硬盘读写文件时是一整块一整块的读和写,比如最常见的硬盘 |
s | 套接字文件,根据ip和端口号传递信息,一般隐藏在 /var/run/ 目录下,用于进程间的网络通信 |
p | 管道文件,主要用于进程间通信单向传输 (| 表示管道) |
l | 符号软连接快捷方式 |
d | 目录文件 |
二、Linux常用命令
1、查看文件内容
标准输入和输出
- 标准输入:默认从终端窗口的输入的命令
- 标准输出:默认终端反馈的正确信息
- 错误输出:终端反馈的报错信息
重定向(redirect)
- 将默认的输入、输出或错误对应的设备改变,指向新的目标,重新定义标准的输出方向
1.1 cat命令
正序查看普通文件内容,将[文件]或标准输入组合输出到标准输出。
用法:cat [选项]... [文件]...
- -n:显示内容的同时显示行号,包括空行
- -A:显示所有的字符 (通常windows系统拷贝过来的文件无法直接cat到,需要加此选项),即显示隐藏字符($表示回车键,^I表示TAB键)
- -b:跳过空白行编号
- -s:将所有的连续的多个空行替换为一个空行(压缩成一个空行)
基本功能
- cat(concatenate 的缩写)命令主要用于查看文件内容、创建文件和将多个文件合并为一个文件。
- 例如,要查看一个名为example.txt的文本文件内容,可以在终端中输入cat example.txt,文件内容就会逐行显示在终端屏幕上。
查看文件内容细节
- 显示行号
- 使用-n选项可以在查看文件内容时显示每行的行号。例如,cat -n file.txt会输出带有行号的文件内容,这对于定位文件中的特定行或者在代码文件中查找错误非常有用。
- 显示非空行的行号
- cat命令的-b选项用于只对非空行显示行号。如cat -b another_file.txt会给非空行加上行号进行展示,空行则不显示行号。
创建简单文件
- 可以使用cat命令结合重定向操作符>来创建文件。例如,cat > new_file.txt,然后在终端中输入文件内容,输入完成后按Ctrl + D组合键结束输入,此时new_file.txt就被创建并且包含了你输入的内容。
合并文件
- 假设你有两个文件file1.txt和file2.txt,要将它们合并为一个文件combined_file.txt,可以使用cat file1.txt file2.txt > combined_file.txt命令。这个操作会把file1.txt和file2.txt的内容按顺序合并到combined_file.txt中。
- 另外,如果想把文件内容追加到另一个已有文件的末尾,可以使用>>操作符。例如,cat file3.txt >> combined_file.txt会将file3.txt的内容追加到combined_file.txt的末尾。
cat >file1.txt <<'eof' # eof 是起始符,任意字符都可以,下面是文件内容
11
22
33
44
eof # eof 是终止符,起始符和终止符后面不要有空格
cat file1.txt # 不加选项查看文件的内容
cat -n file1.txt # 显示行号,包括空行
cat -b file1.txt # 显示行号,不包括空行
cat -s file1.txt # 连续两行空行只显示一行
cat -A file1.txt # 显示文件内容的隐藏字符
echo file1 >file1.txt # 向 file1.txt 文件内覆盖内容 file1
echo file2 >file2.txt # 向 file2.txt 文件内覆盖内容 file2
cat file1.txt file2.txt >file3.txt # 将 file1.txt file2.txt文件内容合并到 file3.txt
cat file3.txt # 查看文件内容
命令示例:
cat >file1.txt <<'eof'
11
22
33
44
eof
cat file1.txt
cat -n file1.txt
cat -b file1.txt
cat -s file1.txt
cat -A file1.txt
echo file1 >file1.txt
echo file2 >file2.txt
cat file1.txt file2.txt >file3.txt
cat file3.txt
输出结果:
[root@MineGi ~]# cat >file1.txt <<'eof'
> 11
>
>
> 22
> 33
>
>
> 44
> eof
[root@MineGi ~]# cat file1.txt
11
22
33
44
[root@MineGi ~]# cat -n file1.txt
1 11
2
3
4 22
5 33
6
7
8 44
[root@MineGi ~]# cat -b file1.txt
1 11
2
3
4 22
5 33
6 44
[root@MineGi ~]# cat -s file1.txt
11
22
33
44
[root@MineGi ~]# cat -A file1.txt
11$
$
$
22$
33$
$
$
44$
[root@MineGi ~]# echo file1 >file1.txt
[root@MineGi ~]# echo file2 >file2.txt
[root@MineGi ~]# cat file1.txt file2.txt >file3.txt
[root@MineGi ~]# cat file3.txt
file1
file2
[root@MineGi ~]#
1.2 nl命令
基本功能
- nl命令(number lines 的缩写)主要用于为文件内容添加行号并输出。它和cat命令的-n选项有类似的功能,但在行号的格式等方面有一些更细致的设置。
- 例如,要为文件example.txt添加行号并查看内容,可以使用命令nl example.txt,这将输出带有行号的文件内容。
行号格式选项
- -b 选项(指定行号显示方式)
- nl -b a example.txt:其中-b a表示对所有行都添加行号。这是比较常用的方式,和cat -n的效果类似,但行号格式等细节可能会有差异。
- nl -b t example.txt:-b t表示只对非空行添加行号,类似于cat -b。这种方式在处理包含大量空行的文件时很有用,可以避免为不需要的空行添加行号。
- -n 选项(指定行号格式)
- nl -n ln example.txt:-n ln表示行号采用左对齐的十进制数格式。例如,行号会像1、2、3这样左对齐显示。
- nl -n rn example.txt:-n rn使行号采用右对齐的十进制数格式,如 1、 2、 3(注意前面有空格用于右对齐)。
- nl -n rz example.txt:-n rz会让行号以右对齐的带前导零的十进制数格式显示,例如01、02、03等。
起始行号设置
- 可以使用-v选项来设置起始行号。例如,nl -v 100 example.txt会从 100 开始为文件example.txt添加行号。这在需要指定特殊的起始编号或者文件是某个系列的一部分且需要连续编号时很有用。
与其他命令结合使用
- nl命令可以和grep等其他命令结合使用,用于在添加行号的同时进行内容筛选。例如,nl file.txt | grep "keyword"可以在为file.txt添加行号的基础上,筛选出包含keyword的行并输出。这种结合可以帮助在长文件中快速定位包含特定内容的行及其行号。
命令示例:
nl /root/.bashrc
输出结果:
[root@MineGi ~]# nl /root/.bashrc
1 # .bashrc
2 # User specific aliases and functions
3 alias rm='rm -i'
4 alias cp='cp -i'
5 alias mv='mv -i'
6 # Source global definitions
7 if [ -f /etc/bashrc ]; then
8 . /etc/bashrc
9 fi
[root@MineGi ~]#
1.3 tac命令
逆向查看普通文件内容
基本功能
- tac命令的主要功能是将文件内容以逆序(从最后一行开始,倒着往前)的方式进行输出。这个命令的名字 “tac” 其实是 “cat” 的倒序拼写,形象地体现了它的功能。
例如,假设有一个文本文件example.txt,里面的内容是:
第一行
第二行
第三行
使用tac example.txt命令后,输出内容将会是:
第三行
第二行
第一行
与管道操作符结合使用
- tac命令经常和管道操作符(|)一起使用,用于对其他命令的输出结果进行逆序处理。例如,ls -l | tac,ls -l命令通常用于以长格式列出目录下的文件和文件夹信息。结合tac后,就会以逆序的方式显示这些信息,从最后一个文件或文件夹开始,倒着往前展示。
应用场景
- 日志文件分析:在分析日志文件时,如果日志是按照时间顺序写入的(新的日志记录在最后),使用tac命令可以先查看最新的日志记录。这对于快速定位问题或者查看最近发生的事件非常有用。例如,对于一个服务器的访问日志文件access.log,tac access.log可以让你首先看到最新的访问记录。
- 文件内容排序:当需要对文件内容进行特殊排序,如按照与正常顺序相反的顺序进行处理时,tac命令可以作为第一步操作。例如,先使用tac将文件内容逆序,然后结合其他命令(如sort)来实现一种特殊的排序效果。
seq 5 # 打印数字 1-5
seq 5 >file1.txt # 打印数字 1-5,将结果重定向到 file1.txt 文件中
cat file1.txt # 正序查看文件内容
tac file1.txt # 逆序查看文件内容
命令示例:
seq 5
seq 5 >file1.txt
cat file1.txt
tac file1.txt
输出结果:
[root@MineGi ~]# seq 5
1
2
3
4
5
[root@MineGi ~]# seq 5 >file1.txt
[root@MineGi ~]# cat file1.txt
1
2
3
4
5
[root@MineGi ~]# tac file1.txt
5
4
3
2
1
[root@MineGi ~]#
1.4 rev命令
逆向查看同一行的内容
基本功能
- rev命令用于反转文件(或输入内容)中每行的字符顺序。与tac命令不同,tac是反转文件内容的行顺序,而rev是反转每行中的字符顺序。
例如,有一个文本文件example.txt,内容如下:
abc
def
使用rev example.txt命令后,输出内容为:
cba
fed
应用场景
- 简单加密 / 解密场景(简单的字符反转游戏)
- 可以将rev命令用于简单的文本加密和解密。例如,你可以将一个消息的每行字符反转来进行 “加密”,接收者使用rev命令就可以将消息还原。这种加密方式非常简单,只是用于趣味性或者简单的隐藏信息目的。
- 数据处理和文本格式转换
- 在处理一些特殊格式的文本数据时,可能需要反转每行的字符顺序来满足特定的需求。比如,在处理一些按照特定字符顺序排列的编码系统或旧格式的数据记录时,rev命令可以帮助调整字符顺序,以便更好地进行后续分析或转换操作。
与其他命令结合使用
- 和管道操作符结合用于复杂文本处理
- rev命令可以和其他命令通过管道操作符(|)结合使用。例如,cat example.txt | rev和rev example.txt的功能相同,都是反转文件example.txt每行的字符顺序。这种结合方式使得rev命令可以灵活地融入到更复杂的文本处理流程中,比如在对grep命令筛选后的文本进行字符反转操作等场景。
命令示例:
cat /etc/hostname
tac /etc/hostname
rev /etc/hostname
echo 12345
echo 12345 |rev
输出结果:
[root@MineGi ~]# cat /etc/hostname
MineGi
[root@MineGi ~]# tac /etc/hostname
MineGi
[root@MineGi ~]# rev /etc/hostname
iGeniM
[root@MineGi ~]# echo 12345
12345
[root@MineGi ~]# echo 12345 |rev
54321
[root@MineGi ~]#
2、分页显示内容
2.1 more命令
more 全屏方式分页显示文件内容,通常用于内容多的文件
用法:more [选项] 文件...
快捷键:
- 空格键:翻页查看文件内容
- b键:光标一行一行移动查看文件内容
- enter键:一行一行滚动
- q键:退出查看文件内容模式
基本功能
- more命令用于分页查看文件内容。当文件内容较多,无法在一屏中全部显示时,more命令会逐页显示文件内容,并且在每一页的底部显示一些操作提示,帮助用户浏览文件。
- 例如,查看一个较大的文本文件document.txt,使用more document.txt,屏幕会显示文件的第一页内容,用户可以根据提示进行后续操作来查看其他页。
操作方法
- 翻页操作
- 按Space(空格)键可以向下翻一页;按Enter(回车键)可以向下滚动一行。这两种操作方式可以让用户根据自己的需求选择是快速浏览下一页内容还是逐行查看细节。
- 要向上翻页,可以使用b键(backward 的缩写)。不过,有些more命令的实现可能不支持向上翻页功能,具体取决于系统和安装的工具集。
- 搜索操作
- 可以在查看文件内容时进行搜索。按/键,然后输入要搜索的关键字,再按Enter键,more命令会查找并定位到下一个包含该关键字的行。例如,在查看一个包含大量代码的文件时,通过这种方式可以快速找到包含特定函数名的行。
退出操作
- 查看完文件或者不想继续查看时,可以按q键(quit 的缩写)退出more命令的文件查看模式。
与其他命令结合使用
- more命令可以和其他命令结合,用于对命令输出进行分页显示。例如,ls -l | more,首先ls -l会输出目录下文件和文件夹的详细信息(如权限、大小、日期等),结合more后,这些信息会分页显示,方便用户查看。这种结合方式在输出内容较多的命令(如find等)中也很常用,可以提高查看输出内容的体验。
命令示例:
more /etc/ssh/sshd_config
输出结果:
[root@MineGi ~]# more /etc/ssh/sshd_config
# $OpenBSD: sshd_config,v 1.100 2016/08/15 12:32:04 naddy Exp $
# This is the sshd server system-wide configuration file. See
# sshd_config(5) for more information.
# This sshd was compiled with PATH=/usr/local/bin:/usr/bin
# The strategy used for options in the default sshd_config shipped with
# OpenSSH is to specify options with their default value where
# possible, but leave them commented. Uncommented options override the
# default value.
# If you want to change the port on a SELinux system, you have to tell
# SELinux about this change.
# semanage port -a -t ssh_port_t -p tcp #PORTNUMBER
#
#Port 22
#AddressFamily any
#ListenAddress 0.0.0.0
#ListenAddress ::
--More--(17%)
......
2.2 less命令
less 与more基本相同,但扩展功能更多
格式:less [选项] 文件名 (一般不用选项)
快捷键:
- n键:向下查找
- N键:向上查找
- PGUP键:向上翻页
- PGDN键:向下翻页
- /关键字:对关键字进行搜索,注意大小写
- 其余参考:more
文件内容查看灵活性
- 屏幕滚动控制
- 除了前面提到的基本翻页和行滚动操作,less命令还支持按Ctrl + U组合键向上滚动半页,按Ctrl + D组合键向下滚动半页。这种精细的屏幕滚动控制在查看一些特定格式的文件(如代码文件,可能只需要查看函数定义的上半部分或下半部分)时非常有用。
- 窗口大小自适应
- 当改变终端窗口大小时,less命令会自动适应新的窗口大小,重新调整文件内容的显示方式。例如,在将终端窗口放大后,less命令会重新计算每页显示的行数,使文件内容更好地填充屏幕,方便用户查看。
文本过滤和显示定制
- 只显示匹配行
- 可以使用-p选项在打开文件时直接定位到包含指定模式的行,并只显示匹配行及其上下文。例如,less -p "error" log.txt会在log.txt文件中查找包含 “error” 的行,显示这些行以及它们周围的一些内容,方便快速定位错误相关的信息。
- 忽略大小写的搜索和显示
- 在进行搜索时,通过-i选项可以忽略关键字的大小写。比如,使用/keyword -i进行搜索时,无论是 “Keyword” 还是 “keyword” 都会被找到,这在不确定关键字具体大小写的情况下很方便。
- 显示行号
- 可以通过-N选项在查看文件内容时显示行号。这对于在长文件中引用特定行或者和其他人交流文件内容中的具体位置时非常有用。例如,less -N code.cpp在查看code.cpp文件时会显示每行的行号。
文件编辑相关操作
- 在查看中调用编辑器
- less命令提供了在查看文件过程中调用外部编辑器进行编辑的功能。按v键会调用默认的文本编辑器(通常是vi或vim),并在编辑器中打开当前正在查看的文件。编辑完成后,保存文件并退出编辑器,会返回到less命令的查看模式,显示更新后的文件内容。
- 标记修改位置
- 如果文件在外部被修改,less命令会提示用户文件已经更新。可以使用g键重新加载文件内容,查看修改后的内容。并且可以使用之前提到的标记功能(m键)来标记可能被修改的位置,方便后续查看修改前后的对比。
命令示例:
less /etc/ssh/sshd_config
输出结果:
[root@MineGi ~]# less /etc/ssh/sshd_config
# $OpenBSD: sshd_config,v 1.100 2016/08/15 12:32:04 naddy Exp $
# This is the sshd server system-wide configuration file. See
# sshd_config(5) for more information.
# This sshd was compiled with PATH=/usr/local/bin:/usr/bin
# The strategy used for options in the default sshd_config shipped with
# OpenSSH is to specify options with their default value where
# possible, but leave them commented. Uncommented options override the
# default value.
# If you want to change the port on a SELinux system, you have to tell
# SELinux about this change.
# semanage port -a -t ssh_port_t -p tcp #PORTNUMBER
#
#Port 22
#AddressFamily any
#ListenAddress 0.0.0.0
......
3、显示文件前后内容
3.1 head命令
查看文件开头的一部分内容,默认显示10行,可加选项调节
用法:head [选项]... [文件]...
- -c N:指定获取前N字节
- -n N:指定获取前N行,N如果为负数,表示从文件头取到倒数第N前
基本功能
- head命令用于查看文件的开头部分内容。默认情况下,它会显示文件的前 10 行内容,这对于快速浏览文件的开头,获取文件的基本信息(如文件头部的注释、配置文件的初始设置等)非常有用。
- 例如,对于一个文本文件example.txt,使用head example.txt命令,就会输出该文件的前 10 行内容。
指定行数显示
- 可以使用-n选项来指定要显示的行数。例如,head -n 5 example.txt会显示文件example.txt的前 5 行内容。这在需要查看文件开头特定行数(而不是默认的 10 行)的情况下很方便,比如查看一个代码文件的前几行函数定义或者一个日志文件的最开始几条记录。
与管道操作符结合使用
- head命令经常和管道操作符(|)一起使用,用于对其他命令的输出进行筛选,只取开头部分。例如,cat file.txt | head -n 3,首先cat file.txt会输出文件file.txt的全部内容,然后通过head -n 3筛选,最终只输出前 3 行内容。这种结合方式在处理长命令输出或者需要快速查看命令输出开头部分时很有用,比如查看ls -l命令输出的前几个文件的详细信息。
多个文件操作
- head命令可以同时对多个文件进行操作。例如,head file1.txt file2.txt会分别显示file1.txt和file2.txt的前 10 行内容。如果想在每个文件内容输出的开头显示文件名,可以使用-v选项,如head -v file1.txt file2.txt,这样会在输出每个文件内容之前先显示文件名。
head -c 数字N # 取前N个字符
head -n 数字N 文件名 # 取前N行内容
head -n -数字N 文件名 # 除去文件的后N行的内容
seq 20 >file1 # 创建测试文件
head file1 # 默认显示前十行内容
head -n 2 file1 # 使用 -n 选项,后面跟数字,指定显示前几行内容
head -n -18 file1 # 去除文件后 18 行内容
head -n3 file1 # 也可以连在一起
echo 12345 |head -c2 # 查看前 2 个字符
echo 12345 |head -c6 # 查看前 6 个字符
echo 好好学习 |head -c2 # 查看前 2 个字符,中文一般占3个字符,所以不显示
echo 好好学习 |head -c3 # 这样就会显示一个中文
echo 好好学习 |head -c6 # 显示两个中文
命令示例:
seq 20 >file1
head file1
head -n 2 file1
head -n -18 file1
head -n3 file1
echo 12345 |head -c2
echo 12345 |head -c3
echo 好好学习 |head -c2
echo 好好学习 |head -c3
echo 好好学习 |head -c6
输出结果:
[root@MineGi ~]# seq 20 >file1
[root@MineGi ~]# head file1
1
2
3
4
5
6
7
8
9
10
[root@MineGi ~]# head -n 2 file1
1
2
[root@MineGi ~]# head -n -18 file1
1
2
[root@MineGi ~]# head -n3 file1
1
2
3
[root@MineGi ~]# echo 12345 |head -c2
12[root@MineGi ~]# echo 12345 |head -c3
123[root@MineGi ~]# echo 好好学习 |head -c2
[root@MineGi ~]# echo 好好学习 |head -c3
好[root@MineGi ~]# echo 好好学习 |head -c6
好好[root@MineGi ~]#
3.2 tail命令
tail查看文件结尾的一部分内容,默认显示10行,可加选项调节
用法:tail [选项]... [文件]...
- –f:动态更新尾部的信息,等于使用tailf
基本功能
- tail命令用于查看文件的末尾部分内容。它与head命令相对,默认情况下会显示文件的最后 10 行内容,这在查看日志文件以获取最新记录、查看文件的最新更新部分等场景中非常有用。
- 例如,对于一个日志文件access.log,使用tail access.log命令可以输出该文件的最后 10 行访问记录。
指定行数显示
- 通过-n选项可以指定要显示的行数。例如,tail -n 5 access.log会显示access.log的最后 5 行内容。这种灵活性使得用户可以根据自己的需求查看文件末尾的特定行数,比如只想查看最后 3 行错误信息。
动态跟踪文件更新(实时查看)
- tail命令的-f(follow 的缩写)选项可以用于动态跟踪文件的更新情况。当一个文件不断有新内容写入时(如系统的运行日志),使用tail -f log.txt,命令会一直显示文件的最后几行内容,并且每当文件有新内容添加时,会自动更新显示,实时显示新的末尾部分。这对于实时监控服务器日志、应用程序日志等场景非常重要,可以及时发现新出现的问题或事件。
与管道操作符结合使用
- 和head命令类似,tail也可以与管道操作符(|)结合。例如,cat file.txt | tail -n 3会先输出file.txt的全部内容,然后通过tail -n 3筛选,最终只输出最后 3 行内容。这种方式可以用于从命令输出中快速获取最后部分内容,比如查看df -h命令输出的最后几行磁盘空间相关信息。
多个文件操作
- tail命令可以同时对多个文件进行操作。例如,tail file1.txt file2.txt会分别显示file1.txt和file2.txt的最后 10 行内容。使用-v选项可以在显示每个文件内容之前先显示文件名,如tail -v file1.txt file2.txt。
tail -f 文件名 # 实时追踪查看该文件内容,等于 tailf 文件名
tail -n 数字N 文件名 # 查看文件最后N行内容
tail -n +数字N 文件名 # 从第N行开始显示文件内容
窗口1
seq 20 >file1 # 创建测试文件
tail -f file1 # 实时追踪查看该文件内容,按 Ctrl + C 退出
窗口1
tail -n 3 file1 # 查看最后三行内容
tail -n2 file1 # 也可以连写
tail -n+18 file1 # 从第 18 行开始查看,也可以连写
echo test1 >>file1 # 追加内容 test1
echo test2 >>file1 # 追加内容 test2
命令示例:
窗口1
seq 20 >file1
tail -f file1
窗口1
tail -n 3 file1
tail -n2 file1
tail -n+18 file1
echo test1 >>file1
echo test2 >>file1
输出结果:
[root@MineGi ~]# seq 20 >file1
[root@MineGi ~]# tail -f file1
11
12
13
14
15
16
17
18
19
20
test1
test2
^C
[root@MineGi ~]#
[root@MineGi ~]# tail -n 3 file1
18
19
20
[root@MineGi ~]# tail -n2 file1
19
20
[root@MineGi ~]# tail -n+18 file1
18
19
20
[root@MineGi ~]# echo test1 >>file1
[root@MineGi ~]# echo test2 >>file1
[root@MineGi ~]#
3.3 wc命令
wc作用:统计文件中的单词数量(Word Count)等
用法:wc [选项]... [文件]...
常用选项:
- -l:只统计行数
- -w:只统计单词个数
- -c:只统计字节数
基本功能
- wc(word count 的缩写)命令主要用于统计文件中的行数、单词数和字节数。这三个统计信息默认按照 “行数 单词数 字节数 文件名” 的顺序输出。
- 例如,对于一个简单的文本文件example.txt,内容为 “Hello world. This is a test.”,使用wc example.txt命令,会输出类似于 “3 7 32 example.txt” 的结果,其中 “3” 表示行数,“7” 表示单词数,“32” 表示字节数(包括空格和标点符号)。
只统计行数(-l 选项)
- 使用-l选项可以只统计文件中的行数。例如,wc -l file.txt会输出文件file.txt的行数。这种方式在统计代码文件的行数、日志文件的记录数等场景中很有用。
只统计单词数(-w 选项)
- wc命令的-w选项用于只统计单词数。例如,wc -w poem.txt会输出poem.txt中的单词数量,这对于文本分析(如统计文章的词汇量)等场景比较有用。
只统计字节数(-c 选项)
- 通过-c选项可以只统计文件的字节数。例如,wc -c data.txt会输出data.txt的字节数,在处理文件存储、网络传输文件大小估算等场景时可能会用到。
多个文件统计
- wc命令可以同时对多个文件进行统计。例如,wc file1.txt file2.txt会分别统计file1.txt和file2.txt的行数、单词数和字节数,并且在最后还会给出所有文件统计信息的总和。例如,输出可能类似于 “3 7 32 file1.txt 4 9 40 file2.txt 7 16 72 total”,其中 “total” 部分显示了两个文件统计信息相加后的总和。
wc /etc/passwd # 统计单个文件的信息
wc /etc/{passwd,shadow} # 统计多个文件的信息
wc -l /etc/passwd # 只统计行数
wc -w /etc/passwd # 只统计单词数
wc -c /etc/passwd # 只统计字节数
ls /etc/ |wc -l # 结合管道符 | 统计/etc下文件或目录个数
ls /etc/*/ |wc -l # 结合管道符 | 统计/etc下子目录下文件或目录个数
history |wc -l # 结合管道符 | 统计历史命令个数
命令示例:
wc /etc/passwd
wc /etc/{passwd,shadow}
wc -l /etc/passwd
wc -w /etc/passwd
wc -c /etc/passwd
ls /etc/ |wc -l
ls /etc/*/ |wc -l
history |wc -l
输出结果:
[root@MineGi ~]# wc /etc/passwd
21 29 926 /etc/passwd
[root@MineGi ~]# wc /etc/{passwd,shadow}
21 29 926 /etc/passwd
21 21 639 /etc/shadow
42 50 1565 总用量
[root@MineGi ~]# wc -l /etc/passwd
21 /etc/passwd
[root@MineGi ~]# wc -w /etc/passwd
29 /etc/passwd
[root@MineGi ~]# wc -c /etc/passwd
926 /etc/passwd
[root@MineGi ~]# ls /etc/ |wc -l
179
[root@MineGi ~]# ls /etc/*/ |wc -l
482
[root@MineGi ~]# history |wc -l
763
[root@MineGi ~]#
3.4 grep命令
作用:在文件中查找并显示包含指定字符串的行
用法: grep [选项]... PATTERN [FILE]...
- -i:查找时忽略大小写
- -v:反转查找,输出与条件不相符的行
- -o:仅显示匹配到的字符串
- -E: 查找时支持正则表达式
- -f:对比两个文件的相同行
- -w: 查找时将条件视为完整单词
- -c:统计匹配的行数
- -n:显示匹配的行号
- -r:递归目录,但不处理软链接
- -R:递归目录,但处理软链接
- “^…”:表示以…开头
- “…$”:表示以…结尾
- “^$”:表示空行
基本功能
- grep命令用于在文件中搜索指定的模式(可以是字符串、正则表达式等),并输出包含该模式的行。这是一个非常强大的文本处理工具,广泛应用于日志文件分析、代码查找等场景。
例如,有一个文本文件example.txt,内容为:
This is line 1.
Another line with a keyword.
The third line.
使用grep "keyword" example.txt命令,会输出 “Another line with a keyword.”,因为这一行包含了 “keyword” 这个搜索模式。
区分大小写搜索(默认)与忽略大小写搜索(-i 选项)
- 默认情况下,grep命令是区分大小写的。例如,grep "Line" example.txt不会匹配 “line” 开头的行。
- 使用-i选项可以忽略大小写进行搜索。如grep -i "line" example.txt会输出所有包含 “line” 或 “Line” 等不同大小写形式的行,即:
This is line 1.
Another line with a keyword.
The third line.
显示行号(-n 选项)
- 可以使用-n选项在输出结果中显示行号。例如,grep -n "line" example.txt会输出:
1:This is line 1.
2:Another line with a keyword.
3:The third line.
- 这种方式在代码文件或长文本文件中定位包含特定模式的行时非常有用。
统计匹配行数(-c 选项)
- grep命令的-c选项用于统计包含指定模式的行数,而不输出具体的行内容。例如,grep -c "line" example.txt会输出 “3”,表示文件中有 3 行包含 “line” 这个模式。
递归搜索目录(-r 选项)
- 当需要在一个目录及其子目录下的所有文件中搜索指定模式时,可以使用-r选项。例如,grep -r "error" /var/log会在/var/log目录及其子目录下的所有文件中搜索包含 “error” 的行,这对于在系统日志目录中查找错误信息非常有用。
反向搜索(-v 选项)
- -v选项用于输出不包含指定模式的行。例如,grep -v "line" example.txt会输出:
The third line.
- 这种反向搜索在排除某些行或者筛选出不包含特定内容的行时很有用。
拓展:
正则表达式:匹配文件中的字符串(支持grep、awk、sed等命令)
通配符:匹配文件名(支持ls、find等命令)
grep bash /etc/passwd # 在文件中过滤出含有 bash 关键字的行
grep root /etc/passwd # 在文件中过滤出含有 root 关键字的行
grep ROOT /etc/passwd # 在文件中过滤出含有 ROOT 关键字的行
grep -i ROOT /etc/passwd # 在文件中过滤出含有 ROOT 关键字的行,不区分大小写
grep -v nologin /etc/passwd # 在文件中排除含有 nologin 关键字的行
echo -e "pass\npasswd" >test # 创建测试文件 test
cat test # 查看文件内容
grep pass test # 在文件中过滤出含有 pass 关键字的行
grep -w pass test # 在文件中过滤出含有 pass 关键词的行
grep ^bin /etc/passwd # 在文件中过滤出含有以 bin 开头的行
grep "^bin|bash$" /etc/passwd # 在文件中过滤出含有以 bin 开头和以 bash 结尾的行
grep -E "^bin|bash$" /etc/passwd # 需要开启正则,使用 -E 选项
egrep "^bin|bash$" /etc/passwd # 和上面的命令等价
命令示例:
grep bash /etc/passwd
grep root /etc/passwd
grep ROOT /etc/passwd
grep -i ROOT /etc/passwd
grep -v nologin /etc/passwd
echo -e "pass\npasswd" >test
cat test
grep pass test
grep -w pass test
grep ^bin /etc/passwd
grep "^bin|bash$" /etc/passwd
grep -E "^bin|bash$" /etc/passwd
egrep "^bin|bash$" /etc/passwd
输出结果:
[root@MineGi ~]# grep bash /etc/passwd
root:x:0:0:root:/root:/bin/bash
testuser:x:1000:1000::/home/testuser:/bin/bash
[root@MineGi ~]# grep root /etc/passwd
root:x:0:0:root:/root:/bin/bash
operator:x:11:0:operator:/root:/sbin/nologin
[root@MineGi ~]# grep ROOT /etc/passwd
[root@MineGi ~]# grep -i ROOT /etc/passwd
root:x:0:0:root:/root:/bin/bash
operator:x:11:0:operator:/root:/sbin/nologin
[root@MineGi ~]# grep -v nologin /etc/passwd
root:x:0:0:root:/root:/bin/bash
sync:x:5:0:sync:/sbin:/bin/sync
shutdown:x:6:0:shutdown:/sbin:/sbin/shutdown
halt:x:7:0:halt:/sbin:/sbin/halt
testuser:x:1000:1000::/home/testuser:/bin/bash
[root@MineGi ~]# echo -e "pass\npasswd" >test
[root@MineGi ~]# cat test
pass
passwd
[root@MineGi ~]# grep pass test
pass
passwd
[root@MineGi ~]# grep -w pass test
pass
[root@MineGi ~]# grep ^bin /etc/passwd
bin:x:1:1:bin:/bin:/sbin/nologin
[root@MineGi ~]# grep "^bin|bash$" /etc/passwd
[root@MineGi ~]# grep -E "^bin|bash$" /etc/passwd
root:x:0:0:root:/root:/bin/bash
bin:x:1:1:bin:/bin:/sbin/nologin
testuser:x:1000:1000::/home/testuser:/bin/bash
[root@MineGi ~]# egrep "^bin|bash$" /etc/passwd
root:x:0:0:root:/root:/bin/bash
bin:x:1:1:bin:/bin:/sbin/nologin
testuser:x:1000:1000::/home/testuser:/bin/bash
[root@MineGi ~]#
3.5 egrep命令
作用:增强型过滤(grep -E)
格式:egrep [选项] “查找条件1|查找条件2|查找条件3…” 目标文件
基本功能与扩展正则表达式
- egrep命令是grep命令的扩展版本,它支持扩展正则表达式。正则表达式是一种用于描述字符模式的强大工具,egrep能够更灵活地匹配复杂的文本模式。
- 例如,使用egrep "a|b" file.txt,其中a|b是一个简单的扩展正则表达式,表示匹配包含a或者b的行。这会在file.txt中查找所有包含a或者b的行并输出。
字符类匹配
- 在egrep中,可以使用字符类来匹配一组字符。例如,egrep "[aeiou]" file.txt会查找文件file.txt中包含元音字母(a、e、i、o、u)的行。
- 还可以使用范围表示法,如egrep "[a - z]" file.txt会查找包含小写字母的行。注意,在字符类中,-用于表示范围,如果要匹配-字符本身,需要将其放在字符类的开头或结尾,或者进行转义。
重复匹配
- egrep支持使用*(零次或多次匹配)、+(一次或多次匹配)和?(零次或一次匹配)来表示重复。例如,egrep "ab*c" file.txt会匹配ac、abc、abbc等形式的行,其中b可以出现零次或多次。
- egrep "ab + c" file.txt则要求b至少出现一次,会匹配abc、abbc等,但不会匹配ac。
分组匹配
- 可以使用括号进行分组匹配。例如,egrep "(ab)+c" file.txt会匹配abc、ababc、abababc等形式的行,即ab作为一个整体可以出现一次或多次,然后跟一个c。
与grep的比较
- grep命令在一些基本的文本模式匹配上和egrep有重叠的功能,但grep使用的是基本正则表达式,在处理复杂模式时可能需要更多的转义字符。例如,在grep中要匹配a|b,需要写成grep "a|b" file.txt,而egrep直接使用a|b即可,操作更加简洁明了,尤其在处理复杂的模式匹配时效率更高。
命令示例:
grep -E "^bin|bash$" /etc/passwd
egrep "^bin|bash$" /etc/passwd
输出结果:
[root@MineGi ~]# grep -E "^bin|bash$" /etc/passwd
root:x:0:0:root:/root:/bin/bash
bin:x:1:1:bin:/bin:/sbin/nologin
testuser:x:1000:1000::/home/testuser:/bin/bash
[root@MineGi ~]# egrep "^bin|bash$" /etc/passwd
root:x:0:0:root:/root:/bin/bash
bin:x:1:1:bin:/bin:/sbin/nologin
testuser:x:1000:1000::/home/testuser:/bin/bash
[root@MineGi ~]#
3.6 paste命令
横向合并两个文件的内容,默认以空格隔开
用法:paste [选项]... File1 File2
- -d:指定分隔符
基本功能
- paste命令主要用于将多个文件按行合并(或在终端中输入的多个文本流按行合并),并以制表符(\t)作为默认的分隔符,将各文件(或文本流)对应的行拼接在一起输出。
- 例如,有两个文件file1.txt内容为 “1”、“3”,file2.txt内容为 “2”、“4”,使用paste file1.txt file2.txt命令后,输出为 “1 2”、“3 4”(中间的空格是制表符的显示效果)。
指定分隔符(-d 选项)
- 可以使用-d选项来指定分隔符,而不是默认的制表符。例如,paste -d "," file1.txt file2.txt会以逗号作为分隔符,将两个文件的对应行合并输出。对于上述例子中的file1.txt和file2.txt,输出会变为 “1,2”、“3,4”。
- 分隔符可以是单个字符,也可以是多个字符组成的字符串。例如,paste -d " - " file1.txt file2.txt会以 “-” 作为分隔符,输出 “1 - 2”、“3 - 4”。
从标准输入读取内容(-s 选项)
- -s选项允许paste命令从标准输入读取内容并进行合并。例如,可以在终端中输入多行内容,然后使用paste -s来合并这些行。假设在终端依次输入 “a”、“b”、“c”,然后输入paste -s,会输出 “a b c”(中间是制表符)。
- 也可以将-s选项与-d选项结合使用,指定从标准输入读取内容时的分隔符。例如,paste -s -d ":",在输入 “a”、“b”、“c” 后,会输出 “a:b:c”。
合并多个文件的应用场景
- 数据整理:在处理数据文件时,如果有多个文件包含相关数据的不同部分,paste命令可以将这些数据按行合并,方便后续的数据分析或处理。例如,一个文件包含用户的姓名,另一个文件包含用户的电话号码,通过paste命令可以将姓名和电话号码合并到一个文件中,便于查看和使用。
- 文本格式转换:在将文本从一种格式转换为另一种格式时,paste命令很有用。例如,将两个以换行符分隔的列表转换为以特定分隔符分隔的表格形式的文本,用于在电子表格软件中导入等场景。
seq 3 >file1 # 创建测试文件1
echo -e 'a\nb' >file2 # 创建测试文件2
head -v file1 file2 # 查看文件内容
paste file1 file2 # 合并两个文件内容
paste -d'|' file1 file2 # 合并两个文件内容,并指定分隔符为 |
命令示例:
seq 3 >file1
echo -e 'a\nb' >file2
head -v file1 file2
paste file1 file2
paste -d'|' file1 file2
输出结果:
[root@MineGi ~]# seq 3 >file1
[root@MineGi ~]# echo -e 'a\nb' >file2
[root@MineGi ~]# head -v file1 file2
==> file1 <==
1
2
3
==> file2 <==
a
b
[root@MineGi ~]# paste file1 file2
1 a
2 b
3
[root@MineGi ~]# paste -d'|' file1 file2
1|a
2|b
3|
[root@MineGi ~]#
3.7 split命令
分割文件
用法:split 选项 要切割的文件 输出文件名前缀 后缀长度(-a)
- 输出文件名前缀:设置拆分后的文件的名称前缀,split 会自动在前缀后加上编号,默认从 aa 开始
- 后缀长度(-a):默认的后缀长度是 2,也就是按 aa、ab、ac 这样的格式依次编号
基本功能
- split命令用于将一个大文件分割成多个较小的文件。这在文件大小超过系统限制、需要方便地传输或存储文件片段等情况下非常有用。
- 例如,有一个较大的文件bigfile.txt,可以使用split命令将其分割成多个小文件。默认情况下,每个小文件的大小约为 1000 行(具体行数可能因系统和文件内容等因素略有差异),并且新生成的小文件命名是以xaa、xab、xac等形式依次类推。
指定分割后的文件大小(-b 选项)
- 使用-b选项可以指定每个分割后文件的大小。大小可以以字节(B)、千字节(KB)、兆字节(MB)、吉字节(GB)等为单位。
- 例如,split -b 1MB bigfile.txt会将bigfile.txt分割成多个大小约为 1MB 的小文件。这些小文件的命名方式与默认情况相同,从xaa开始依次类推。
指定分割后的文件名前缀(-a 选项和 - d 选项)
- -a选项用于指定分割后文件名字符串的长度,-d选项用于指定文件名使用数字编号(而不是默认的字母编号)。
- 例如,split -b 1MB -a 3 -d bigfile.txt part_会将bigfile.txt分割成多个大小约为 1MB 的小文件,文件名前缀为part_,文件名的长度为 3 个字符且使用数字编号,如part_001、part_002等。
按行数分割(-l 选项)
- 除了按大小分割,还可以使用-l选项按行数分割文件。例如,split -l 500 bigfile.txt会将bigfile.txt按每行 500 行进行分割,生成多个小文件。
应用场景
- 文件传输:当需要通过网络传输一个很大的文件,而网络或存储设备对文件大小有限制时,split命令可以将文件分割成合适大小的部分,方便传输,传输后再将这些部分合并回原始文件。
- 备份和存储:对于存储容量有限的设备,如移动硬盘或闪存盘,可以将大文件分割后分别存储,后续有需要时再合并。例如,将一个大型数据库备份文件分割后存储在多个小容量的存储设备上。
rm -rf * # 删除当前目录下所有内容(可选)
seq 5 >file1.txt # 创建测试文件,内容为数字 1-5 行
split -l3 file1.txt # 按每 3 行分割文件
ls # 列出一下
head -v xa* # 查看一下内容
rm -rf file1.txt # 删除测试文件
cat xa* >file1.txt # 将之前分割后的文件合并
cat file1.txt # 查看一下内容
fallocate -l 30M bigfile1.txt # 创建大小为 30M 的测试文件
ls -lh bigfile1.txt # 列出一下,确认大小是否为30M
split -b 10M -a 3 -d bigfile1.txt part_ # 将bigfile1.txt分割成多个大小约为 10M 的小文件,文件名前缀为 part_,文件名的长度为 3 个字符且使用数字编号,如part_001、part_002等
ls -lh part_* # 列出一下,查看是否达到目的
命令示例:
rm -rf *
seq 5 >file1.txt
split -l3 file1.txt
ls
head -v xa*
rm -rf file1.txt
cat xa* >file1.txt
cat file1.txt
fallocate -l 30M bigfile1.txt
ls -lh bigfile1.txt
split -b 10M -a 3 -d bigfile1.txt part_
ls -lh part_*
输出结果:
[root@MineGi ~]# rm -rf *
[root@MineGi ~]# seq 5 >file1.txt
[root@MineGi ~]# split -l3 file1.txt
[root@MineGi ~]# ls
file1.txt xaa xab
[root@MineGi ~]# head -v xa*
==> xaa <==
1
2
3
==> xab <==
4
5
[root@MineGi ~]# rm -rf file1.txt
[root@MineGi ~]# cat xa* >file1.txt
[root@MineGi ~]# cat file1.txt
1
2
3
4
5
[root@MineGi ~]# fallocate -l 30M bigfile1.txt
[root@MineGi ~]# ls -lh bigfile1.txt
-rw-r--r-- 1 root root 30M 12月 2 12:21 bigfile1.txt
[root@MineGi ~]# split -b 10M -a 3 -d bigfile1.txt part_
[root@MineGi ~]# ls -lh part_*
-rw-r--r-- 1 root root 10M 12月 2 12:21 part_000
-rw-r--r-- 1 root root 10M 12月 2 12:21 part_001
-rw-r--r-- 1 root root 10M 12月 2 12:21 part_002
[root@MineGi ~]#
4、压缩和解压缩
4.1 gzip和bzip2命令
作用:压缩,选项为1-9的数字控制压缩级别,数字越大压缩级别越高。压缩后文件格式为“.gz”或“.bz2”,使用以上两种压缩方式,源文件就不存在了
格式:gzip [-9] 文件名
格式:bzip2 [-9] 文件名
4.2 gunzip和bunzip2命令
作用:解压缩格式为.gz的压缩文件
格式:gunzip 文件名 或 gzip -d 文件名
作用:解压缩格式为.bz2的压缩文件
格式:bunzip2 文件名 或 bzip2 -d 文件名
gzip 命令
- 功能概述
- gzip 是 GNU 计划开发的一款压缩工具,用于对文件进行压缩和解压缩。它通过 LZ77 算法和哈夫曼编码来减小文件的大小。通常会将原文件压缩成.gz后缀的文件。
- 基本用法
- 压缩文件:
- 命令格式:gzip [选项] 文件名
- 例如,要压缩一个名为example.txt的文件,可以使用gzip example.txt。执行该命令后,会生成一个名为example.txt.gz的压缩文件,并且原example.txt文件会被删除。
- 如果不想删除原文件,可以使用-c选项,如gzip -c example.txt > example.txt.gz。这样会将压缩后的内容输出到指定的文件,原文件保留。
- 解压缩文件:
- 命令格式:gunzip [选项] 文件名.gz或者gzip -d [选项] 文件名.gz
- 例如,要解压缩example.txt.gz文件,可以使用gunzip example.txt.gz或者gzip -d example.txt.gz。解压缩后会得到example.txt文件。
- 压缩文件:
- 常用选项
- -r:递归地压缩或解压缩目录下的所有文件。例如,gzip -r my_folder会递归压缩my_folder目录下的所有文件。
- -v:显示详细的信息,如压缩比等。例如,gzip -v example.txt在压缩文件时会显示压缩前后文件的大小和压缩比等信息。
- -#:#是一个数字(1 - 9),用于指定压缩比,-1表示最快但压缩比最低,-9表示最慢但压缩比最高。例如,gzip -9 large_file.txt会以最高压缩比压缩large_file.txt文件。
bzip2 命令
- 功能概述
- bzip2 是一个基于 Burrows - Wheeler 变换的无损压缩工具,它通常可以提供比 gzip 更高的压缩比,但压缩速度可能会稍慢。压缩后的文件后缀一般是.bz2。
- 基本用法
- 压缩文件:
- 命令格式:bzip2 [选项] 文件名
- 例如,要压缩test.txt文件,使用bzip2 test.txt,会生成test.txt.bz2压缩文件,同时原文件被删除。若要保留原文件,可以使用-k选项,如bzip2 -k test.txt。
- 解压缩文件:
- 命令格式:bunzip2 [选项] 文件名.bz2或者bzip2 -d [选项] 文件名.bz2
- 例如,要解压缩test.txt.bz2文件,可以使用bunzip2 test.txt.bz2或者bzip2 -d test.txt.bz2,解压缩后得到test.txt文件。
- 压缩文件:
- 常用选项
- -z:强制进行压缩,即使已经是压缩文件格式。
- -c:将压缩或解压缩的结果输出到标准输出。例如,bzip2 -c file.txt > file.txt.bz2用于压缩并将结果输出到指定文件,同时保留原文件。
- -v:显示详细的压缩信息,如压缩率等。
- -9:表示最高的压缩级别,和 gzip 类似,数字越大压缩比越高,但速度越慢。例如,bzip2 -9 large_file.txt会以最高压缩级别压缩large_file.txt。
rm -rf * # 删除当前目录下所有内容(可选)
fallocate -l 30M bigfile1.txt # 创建测试文件
ls -lh bigfile1.txt # 长格式列出一下
gzip -5 bigfile1.txt # 使用 gzip 压缩文件,级别为 5
ls # 列出一下,源文件 bigfile1.txt 已被自动删除
ls -lh bigfile1.txt.gz # 长格式列出一下
gzip -d bigfile1.txt.gz # 解压缩文件,也可以使用直接 gunzip bigfile1.txt.gz
ls # 列出一下,压缩文件 bigfile1.txt.gz 已被自动删除
bzip2 bigfile1.txt # 使用 bzip2 压缩文件,默认级别,提示未找到命令
yum install -y bzip2 # 使用 yum 安装 bzip2,演示使用的 -q 选项为静默安装
bzip2 bigfile1.txt # 再次使用 bzip2 压缩文件
ls # 列出一下,源文件 bigfile1.txt 还是被自动删除
ls -lh bigfile1.txt.bz2 # 长格式列出一下
bunzip2 bigfile1.txt.bz2 # 解压缩文件,也可以使用直接 bzip2 -d bigfile1.txt.bz2
ls # 列出一下,压缩文件 bigfile1.txt.bz2 已被自动删除
命令示例:
rm -rf *
fallocate -l 30M bigfile1.txt
ls -lh bigfile1.txt
gzip -5 bigfile1.txt
ls
ls -lh bigfile1.txt.gz
gzip -d bigfile1.txt.gz
ls
bzip2 bigfile1.txt
yum install -y bzip2
bzip2 bigfile1.txt
ls
ls -lh bigfile1.txt.bz2
bunzip2 bigfile1.txt.bz2
ls
输出结果:
[root@MineGi ~]# rm -rf *
[root@MineGi ~]# fallocate -l 30M bigfile1.txt
[root@MineGi ~]# ls -lh bigfile1.txt
-rw-r--r-- 1 root root 30M 12月 2 12:49 bigfile1.txt
[root@MineGi ~]# gzip -5 bigfile1.txt
[root@MineGi ~]# ls
bigfile1.txt.gz
[root@MineGi ~]# ls -lh bigfile1.txt.gz
-rw-r--r-- 1 root root 30K 12月 2 12:49 bigfile1.txt.gz
[root@MineGi ~]# gzip -d bigfile1.txt.gz
[root@MineGi ~]# ls
bigfile1.txt
[root@MineGi ~]# bzip2 bigfile1.txt
-bash: bzip2: 未找到命令
[root@MineGi ~]# yum install -y -q bzip2
软件包 bzip2-1.0.6-13.el7.x86_64 已安装并且是最新版本
[root@MineGi ~]# bzip2 bigfile1.txt
[root@MineGi ~]# ls
bigfile1.txt.bz2
[root@MineGi ~]# ls -lh bigfile1.txt.bz2
-rw-r--r-- 1 root root 50 12月 2 12:49 bigfile1.txt.bz2
[root@MineGi ~]# bunzip2 bigfile1.txt.bz2
[root@MineGi ~]# ls
bigfile1.txt
[root@MineGi ~]#
4.3 tar命令
作用:制作归档文件、释放归档文件
格式:
归档:tar [选项c…] 归档文件名 源文件或目录
释放:tar [选项x…] 归档文件名 [-C 目标目录]
常用选项:
- -c:创建.tar格式的包文件
- -x:解开.tar格式的包文件
- -v:输出详细信息
- -f:表示使用归档文件(后面需紧跟归档文件名)
- -p:打包时保留原始文件及目录的权限(不建议使用)
- -t:不解压,列表查看包内的文件(要和f一起使用)
- -C:解包时指定释放的目标目录
- -z:调用gzip程序进行压缩或解压
- -j:调用bzip2程序进行压缩或解压
- -p:打包时保留文件及目录的权限
- -P:打包时保留文件及目录的绝对路径(不建议使用)
- --remove:选项打包压缩时可删除源文件
注意事项
- 1、tar命令的选项前可以省略“-”,在解压时无需选择“-z”或“-j”,命令可以自行识别
- 2、tar命令通过-zcf 选项创建打包压缩文件时(.tar.gz = .tgz)
功能概述
- tar命令用于对文件和目录进行打包和压缩。它最初的设计目的是将多个文件合并成一个归档文件(通常称为 “tar 包”),方便文件的存储和传输。虽然tar本身主要是一个打包工具,但它经常与压缩工具(如gzip、bzip2等)结合使用,来创建压缩的归档文件。
基本语法
- tar [选项] [文件名或目录名]
常用选项及操作
- 创建归档文件(打包)
- 选项:-c(用于创建新的归档文件)、-v(显示详细信息,如打包的文件列表)、-f(指定归档文件名)。
- 示例:打包一个目录mydir,创建一个名为mydir.tar的归档文件,可以使用tar -cvf mydir.tar mydir。这个命令会将mydir目录及其内容打包成mydir.tar文件,并且在终端显示打包的详细过程,包括每个被打包的文件或子目录的名称。
- 查看归档文件内容
- 选项:-t(列出归档文件中的内容)、-v(显示详细信息)、-f(指定归档文件名)。
- 示例:查看mydir.tar归档文件中的内容,可以使用tar -tvf mydir.tar。这会列出mydir.tar中包含的所有文件和目录的详细信息,如权限、所有者、大小和文件名等。
- 解包归档文件
- 选项:-x(用于解包归档文件)、-v(显示详细信息)、-f(指定归档文件名)。
- 示例:解包mydir.tar归档文件到当前目录,可以使用tar -xvf mydir.tar。这个命令会将mydir.tar中的文件和目录解压到当前目录下,并且在终端显示解包的详细过程。
结合压缩工具使用
- 与 gzip 结合(创建.tar.gz或.tgz文件)
- 首先打包然后使用gzip压缩:可以先使用tar -cvf mydir.tar mydir打包,再使用gzip mydir.tar压缩,得到mydir.tar.gz。也可以一步完成,使用tar -zcvf mydir.tar.gz mydir,-z选项表示在打包的同时使用gzip进行压缩。
- 解压缩并解包.tar.gz文件:可以先使用gunzip mydir.tar.gz解压缩得到mydir.tar,再使用tar -xvf mydir.tar解包。也可以一步完成,使用tar -zxvf mydir.tar.gz。
- 与 bzip2 结合(创建.tar.bz2文件)
- 创建:可以先打包再压缩,如tar -cvf mydir.tar mydir,然后bzip2 mydir.tar得到mydir.tar.bz2;也可以一步完成,使用tar -jcvf mydir.tar.bz2 mydir,其中-j选项表示在打包的同时使用bzip2进行压缩。
- 解压缩并解包.tar.bz2文件:可以先使用bunzip2 mydir.tar.bz2解压缩得到mydir.tar,再使用tar -xvf mydir.tar解包;也可以一步完成,使用tar -jxvf mydir.tar.bz2。
rm -rf * # 删除当前目录下所有内容(可选)
fallocate -l 30M bigfile.txt # 创建测试文件
tar -zcvf 01-bigfile.tar.gz bigfile.txt # 与 gzip 结合(创建.tar.gz文件),创建压缩文件,显示创建过程
tar zcf 02-bigfile.tar.gz bigfile.txt # 与 gzip 结合(创建.tar.gz文件),创建压缩文件,不显示创建过程
tar zcf 03-bigfile.tgz bigfile.txt # 与 gzip 结合(创建.tgz文件)创建压缩文件
tar cf 04-bigfile.tar bigfile.txt # 创建归档文件,未压缩
tar jcf 05-bigfile.tar.bz2 bigfile.txt # 与 bzip2 结合(创建.tar.bz2文件)创建压缩文件
ls -lh # 长格式列出一下
tar tf 01-bigfile.tar.gz # 查看压缩文件内容
tar xf 02-bigfile.tar.gz # 原地解压,若本地有源文件,会直接覆盖
tar xf 05-bigfile.tar.bz2 # 原地解压,若本地有源文件,会直接覆盖
ls # 列出一下
mkdir dir1 # 创建 dir1 目录
tar xf 03-bigfile.tgz -C dir1 # 使用 -C 选项解压到 dir1 目录下
ls dir1 # 长格式列出一下
ls -lh dir1 # 列出一下
命令示例:
rm -rf *
fallocate -l 30M bigfile.txt
tar -zcvf 01-bigfile.tar.gz bigfile.txt
tar zcf 02-bigfile.tar.gz bigfile.txt
tar zcf 03-bigfile.tgz bigfile.txt
tar cf 04-bigfile.tar bigfile.txt
tar jcf 05-bigfile.tar.bz2 bigfile.txt
ls -lh
tar tf 01-bigfile.tar.gz
tar xf 02-bigfile.tar.gz
tar xf 05-bigfile.tar.bz2
ls
mkdir dir1
tar xf 03-bigfile.tgz -C dir1
ls dir1
ls -lh dir1
输出结果:
[root@MineGi ~]# rm -rf *
[root@MineGi ~]# fallocate -l 30M bigfile.txt
[root@MineGi ~]# tar -zcvf 01-bigfile.tar.gz bigfile.txt
bigfile.txt
[root@MineGi ~]# tar zcf 02-bigfile.tar.gz bigfile.txt
[root@MineGi ~]# tar zcf 03-bigfile.tgz bigfile.txt
[root@MineGi ~]# tar cf 04-bigfile.tar bigfile.txt
[root@MineGi ~]# tar jcf 05-bigfile.tar.bz2 bigfile.txt
[root@MineGi ~]# ls -lh
总用量 61M
-rw-r--r-- 1 root root 30K 12月 2 13:36 01-bigfile.tar.gz
-rw-r--r-- 1 root root 30K 12月 2 13:36 02-bigfile.tar.gz
-rw-r--r-- 1 root root 30K 12月 2 13:36 03-bigfile.tgz
-rw-r--r-- 1 root root 31M 12月 2 13:36 04-bigfile.tar
-rw-r--r-- 1 root root 133 12月 2 13:36 05-bigfile.tar.bz2
-rw-r--r-- 1 root root 30M 12月 2 13:36 bigfile.txt
[root@MineGi ~]# tar tf 01-bigfile.tar.gz
bigfile.txt
[root@MineGi ~]# tar xf 02-bigfile.tar.gz
[root@MineGi ~]# tar xf 05-bigfile.tar.bz2
[root@MineGi ~]# ls
01-bigfile.tar.gz 03-bigfile.tgz 05-bigfile.tar.bz2
02-bigfile.tar.gz 04-bigfile.tar bigfile.txt
[root@MineGi ~]# mkdir dir1
[root@MineGi ~]# tar xf 03-bigfile.tgz -C dir1
[root@MineGi ~]# ls dir1
bigfile.txt
[root@MineGi ~]# ls -lh dir1
总用量 30M
-rw-r--r-- 1 root root 30M 12月 2 13:36 bigfile.txt
[root@MineGi ~]#
三、文本编辑器vi和vim
1、文本编辑器作用
- 创建或修改文本文件
- 维护 Linux 系统中的各种配置文件
- Linux中最常用的文本编辑器
- vi:类UNIX操作系统的默认文本编辑器
- vim:vim是vi文本编辑器(一般简称为vi编辑器)的增强版本
2、常见的三种工作模式
命令或普通(Normal)模式、插入(Insert)、输入或编辑模式、扩展命令(extended command )、冒号或末行模式
- 命令模式:默认模式,可以实现移动光标,主要处理做复制,粘贴,剪切,删除等操作
- 输入模式:主要处理输入文本信息,编辑等操作
- 末行模式:主要处理保存退出等操作
3、不同模式之间的切换
命令模式切换输入模式
- a:在光标后插入内容
- A:在光标所在行末尾插入内容
- i:从当前光标前插入内容
- I :在光标所在行行首插入内容
- o:在当前光标下插入空行
- O:在当前光标上插入空行
命令模式切换末行模式
- :英文键盘冒号:
输入模式切换命令模式
- 按 Esc 键
末行模式切换命令模式
- 按 Esc 键
4、命令模式快捷键
此模式下,可使用方向键(上、下、左、右键)或 k、j、h、i 移动光标的位置,还可以对文件内容进行复制、粘贴、替换、删除等操作
4.1 光标移动
操作键 | 说明 |
h键或方向键← | 光标左移 |
i键或方向键→ | 光标右移 |
j键或方向键↓ | 光标下移 |
k键或方向键↑ | 光标上移 |
4.2 行内跳转
操作键 | 说明 |
Home 或 "^" 或数字 "0" | 跳转至行首 |
End 或 "$" | 跳转至行尾 |
w | 单词与单词间跳转,下一个单词的词首 |
4.3 行间跳转
操作键 | 说明 |
G键 | 跳转至末行 |
1G或gg | 跳转至首行 |
#G | 跳转至第#行, # 是数字 |
:# | 跳转至第#行, # 是数字 |
4.4 翻屏跳转
快捷键 | 说明 |
Ctrl+f | 向文件尾部翻一屏,相当于Pagedown |
Ctrl+b | 向文件首部翻一屏,相当于Pageup |
Ctrl+d | 向文件尾部翻半屏 |
Ctrl+u | 向文件首部翻半屏 |
4.5 复制、删除等操作
操作键 | 说明 |
x 或 Del | 删除光标处的单个字符 |
d | 删除 |
dd | 删除当前光标所在行 |
#dd | 删除N行,# 是数字 |
dw | 删除一个单词 |
d^ | 删除当前光标之前到行首的所有字符 |
d$ | 删除当前光标处到行尾的所有字符 |
u | 按一次取消最近的一次操作,重复 u 键,回复多步操作 |
U | 撤销全部光标落在这行后所有此行的更改 |
y | 复制 |
yy | 复制当前整行的内容到剪切板 |
#yy | 删除从光标所在行开始的第N行内容,# 是数字 |
yw | 复制一个单词 |
P | 粘贴到光标位置处之前(粘贴到上一行) |
p | 将缓冲区的内容粘贴到光标位置之后(粘贴到下一行) |
~ | 转换大小写 |
/字符 | 向下查找该字符 |
?字符 | 向上查找该字符 |
r | 只替换光标所在处的一个字符 |
ZZ | 保存并退出 |
ZQ | 不保存退出 |
4.6 递增递减数字
操作键 | 说明 |
Ctrl + a | 递增数字 |
Ctrl + x | 递减数字 |
4.7 其它操作
操作键 | 说明 |
J | 合并当前行和下一行 |
Ctrl + r | 对使用u命令撤销操作进行恢复 |
5、输入模式快捷键
使 Vim 进行输入模式的方式是在命令模式状态下输入 i、I、a、A、o、O 等插入命令,当编辑文件完成后按 Esc 键即可返回命令模式
快捷键 | 功能描述 |
i | 在当前光标所在位置插入随后输入的文本,光标后的文本相应向右移动 |
I | 行首插入命令 |
o | 在光标所在行的下面插入新的一行。光标停在空行首,等待输入文本 |
O | 在光标所在行的上面插入新的一行。光标停在空行的行首,等待输入文本 |
a | 在当前光标所在位置之后插入随后输入的文本 |
A | 行尾插入命令 |
6、末行模式快捷键
文件中的指定内容执行保存、查找或替换等操作。使 Vim 切换到编辑模式的方法是在命令模式状态下按“:”(英文冒号)键,此时 Vim 窗口的左下方出现一个“:”符号,这是就可以输入相关指令进行操作了
6.1 辅助操作
命令 | 说明 | ||
set nu | set nonu | 显示行号 | 取消显示行号 |
set ic | set noic | 忽略字符的大小写 | 取消忽略字符的大小写 |
set paste | set nopaste | 复制保留格式 | 复制不保留格式 |
set list | set nolist | 显示隐藏字符 | 不显示隐藏字符 |
set cul | set nocul | 设置光标所在行的标识线 | 取消光标所在行的标识线 |
set key=password | set key= | 加密 | 取消加密 |
set ai | set noai | 自动缩进 | 取消自动缩进 |
set all | 建立帮助 |
6.2 查找替换
通式:范围 s/文件中的旧内容/替换的内容/修饰符
范围 | 说明 |
% | 全文 |
# | 第#行,#代表数字,如1d(删除第一行)、3y(复制第三行) |
$ | 最后一行 |
$-1 | 倒数第二行 |
2,5 | 第二到三行 |
2,+3 | 从第二行开始往后三行 |
拓展:
如何给文件所有行的开头加上#
:% s/^/#/
如何将文件所有行的开头的#去除
:% s/^#//
修饰符 | 说明 |
c | 全局替换,每次替换前询问 |
i | 忽略大小写 |
g | 全局替换,默认情况下,每一行只替换第一次出现 |
文件内容查找
- /word:从上而下在文件中查找字符串 “word”
- ?word:从下而上在文件中查找字符串 “word”
- n:定位下一个匹配的被查找的字符串
- N:定位上一个匹配的被查找的字符串
文件内容替换
- :s /old/new:将当前行中查找到的第一个 “old” 字符串替换为 “new”
- :s /old/new/g:将当前行中查找到的所有 “old” 字符串替换为 “new”
- :#,# s/old/new/g:在行号 “ #,# ” (# 是数字)范围内替换所有 “old” 字符串替换为 “new”
- :% s/old/new/:在整个文件范围内替换第一个 “old” 字符串替换为 “new”
- :% s/old/new/g:在整个文件范围内替换所有 “old” 字符串替换为 “new”
- :% s/old/new/c:在替换命令末尾加入c命令,将对每个替换动作提示用户进行确认,可以按小 a 进行一次性确认
6.3 保存、退出等操作
快捷键 | 说明 |
q | 退出不保存 |
q! | 强制退出不保存 |
w | 保存 |
w 新文件名 | 另存为新文件 |
wq或zz或x | 保存并退出 |
X | 加密(vim) |
数字N | 跳到第N行 |
1,$ co $ | 从第一行到第最后一行复制,到最后一行后 |
e 其他文件名(如果已修改需要加e!) | 打开新文件进行编辑 |
r 其他文件名 | 在当前文件中读入其他文件内容 |
!命令 | 执行命令 |
vim学习工具:vimtutor
vim键盘图
https://vim.fandom.com/wiki/From_Vim_Help
标签:02,文件,file1,txt,tar,MineGi,root,目录
From: https://blog.csdn.net/linuxxiaocaizi/article/details/144189350