Linux云计算 |【第一阶段】ADMIN-DAY4

主要内容:

tar归档及压缩、重定向与管道操作、find命令查找、wc、find高级用法exec{}\;、vim高级使用;

一、归档和压缩(tarball)

tar 用于归档文件和目录,它的名称来源于 "tape archive",最初设计用于磁带备份。tar 本身并不进行压缩,它只是将多个文件和目录打包成一个单独的归档文件(通常称为 tarball)。

归档的含义:

  • 归档是指将多个文件和目录组合成一个单独的文件。这个过程不会改变文件的内容,也不会减小文件的大小。归档的主要目的是为了方便文件的传输、备份和存储。

压缩的含义:

  • 压缩是指通过某种算法减小文件的体积,以便节省存储空间和提高传输效率。常见的压缩算法包括 gzip、bzip2 和 xz。

tar工具的常用选项

  • [-c]  创建归档
  • [-x]   释放归档
  • [-f]   指定归档/释放的文件名称(必须在所有选项的最后)
  • [-z、-j、-J]   调用.gz、.bz2、.xz格式的工具进行处理
  • [-t]   显示归档中的文件清单
  • [-C]  指定释放路径
  • [-v]  显示压缩内容

1)制作 tar备份包

格式:tar -[z、j、J]cf  /存放路径/压缩包名字  /源文件...

注意:压缩包名字的扩展名比如.tar.gz,可不写,只为方便辨认,不写压缩包后缀颜色为黑色;

注意:压缩包名字如果不带存放路径,是默认保存在当前路径;

① tar -zcf 备份文件.tar.gz 被备份的文档...

② tar -jcf 备份文件.tar.bz2 被备份的文档...

③ tar -Jcf 备份文件.tar.xz 被备份的文档...

例如,使用 tar 命令归档一个目录:

tar -cvf archive.tar /path/to/directory
  • -c 表示创建一个新的归档文件。
  • -v 表示在归档过程中显示详细信息。
  • -f 指定归档文件的名称。

例如,使用 tar 和 gzip 结合创建一个压缩的归档文件:

tar -czvf archive.tar.gz /path/to/directory  # 使用 gzip 压缩
  • -z 表示使用 gzip 进行压缩。

同样,可以使用 bzip2 或 xz 进行压缩:

tar -cjvf archive.tar.bz2 /path/to/directory  # 使用 bzip2 压缩
tar -cJvf archive.tar.xz /path/to/directory   # 使用 xz 压缩

2)从tar备份包恢复文档

格式:tar -xf  /路径/备份文件名 [-C 目标文件夹]

注意:压缩时若输入的绝对路径,会把路径压缩到压缩包内,但目录为空目录,无影响;

注意:释放文档若不指定路径,则释放在当前目录;

注意:压缩一个例如/opt下的文件,释放也在opt下,同名文件会强制覆盖;

例如:压缩时若输入的绝对路径,会把路径压缩到压缩包内,但目录为空目录,无影响;

[root@student ~]# mkdir /nsd01
[root@student ~]# tar -xf /opt/passwd.tar.gz -C /nsd01/  //释放压缩包
[root@student ~]# ls /nsd01/
etc    //空目录
[root@student ~]# ls /nsd01/etc/
Passwd

常见报错:释放的压缩包不存在时,释放后报错无法open:没有那个文件或目录

[root@student ~]# tar -xf /opt/pass.tar.gz -C /nsd01/
tar: /opt/pass.tar.gz:无法 open: 没有那个文件或目录
tar: Error is not recoverable: exiting now

3)查看tar备份包内容

格式:tar -tf 备份文件.tar.gz

例如:

[root@student ~]# tar -tf /opt/passwd.tar.bz2 etc/passwd

常见报错:

[root@student ~]# tar -tf /nsd01/etc
tar: /nsd01/etc:无法 read: 是一个目录
tar: 处于磁带的起点,现在退出
tar: Error is not recoverable: exiting now

[root@student ~]# tar -tf /nsd01/etc/passwd    //压缩包已释放非归档文件
tar: 它似乎不像是一个 tar 归档文件
tar: 跳转到下一个头
tar: 由于前次错误,将以上次的错误状态退出

二、重定向输出

用途:将屏幕显示信息作为内容保存到文件(文件不存在时,会新建文件)

格式:

  • 覆盖重定向:cmd命令-显示内容 > 保存文件
  • 追加重定向:cmd命令-显示内容 >> 保存文件

注意:命令有输出的才能作为显示内容,写入文本文件当中

 例如:覆盖重定向

[root@student ~]# head -3 /etc/passwd > /opt/passwd.txt
[root@student ~]# cat /opt/passwd.txt
root:x:0:0:root:/root:/bin/bash
bin:x:1:1:bin:/bin:/sbin/nologin
daemon:x:2:2:daemon:/sbin:/sbin/nologin

例如:追加重定向

[root@student ~]# hostname >> /opt/passwd.txt
[root@student ~]# cat /opt/passwd.txt
root:x:0:0:root:/root:/bin/bash
bin:x:1:1:bin:/bin:/sbin/nologin
daemon:x:2:2:daemon:/sbin:/sbin/nologin
student.tmooc.cn

补充:重定向通常结合 Echo 打印命令,将内容打印输出

例如:

[root@student ~]# echo AJ.nike.cn >> /etc/hostname
[root@student ~]# cat /etc/hostname
student.tmooc.cn
AJ.nike.cn

三、管道操作

用途:将前一条命令的标准输出传递给后一条命令,作为后面命令的参数处理;

格式:cmd1命令 | cmd2命令 [ | cmd3命令] .. ..

注意:前面命令必须有输出,才能传递后面命令作为参数;

例如:显示ifconfig命令的前两行内容

[root@student ~]# ifconfig | head -2   
eth0: flags=4163<UP,BROADCAST,RUNNING,MULTICAST>  mtu 1500
inet 192.168.122.124  netmask 255.255.255.0  broadcast 192.168.122.255

 例如:显示/etc/passwd第九行内容

[root@student ~]# cat -n /etc/passwd | head -9 | tail -1
     9 mail:x:8:12:mail:/var/spool/mail:/sbin/nologin

例如:重定向配合管道输出

[root@student ~]# cat -n /etc/passwd | head -9 | tail -1 > /opt/1.txt
[root@student ~]# cat /opt/1.txt
     9 mail:x:8:12:mail:/var/spool/mail:/sbin/nologin

例如:通过重定向,去掉“空行”和“注释”的显示

[root@student ~]# grep -v ^# /etc/default/useradd | grep -v ^$ > /opt/user.txt
[root@student ~]# cat /opt/user.txt
GROUP=100
HOME=/home
INACTIVE=-1
EXPIRE=
SHELL=/bin/bash
SKEL=/etc/skel
CREATE_MAIL_SPOOL=yes

四、find查找基本使用

用途:根据预设的条件递归查找对应的文件

格式:find [目录] [选项1] [选项2]...

注意:可以查找到隐藏文件并输出;

注意:不写目录,则为当前目录查找;

常用选项表示:

  • [-type]  类型(f 文件、d 目录、l 快捷方式)
  • [-name]   “文档名称”
  • [-size]   +|-文件大小(k、M、G)(注意:-1G、-1M无法识别,1024M)
  • [-user]   用户名(文件的所有者)
  • [-mtime]  修改时间(过去时间)

例如1:查找类型为目录

[root@student ~]# find /boot/ -type d
/boot/
/boot/efi
/boot/efi/EFI
/boot/efi/EFI/centos
...

例如2:查找类型为快捷方式

[root@student ~]# find /etc -type l
/etc/mtab
/etc/fonts/conf.d/65-0-lohit-bengali.conf
/etc/fonts/conf.d/20-unhint-small-dejavu-sans.conf
[root@student ~]# ls -l /etc/mtab
lrwxrwxrwx. 1 root root 17 3月   1 14:53 /etc/mtab -> /proc/self/mounts
...

例如3:查找类型为文件

[root@student ~]# find /boot/ -type f
/boot/grub2/device.map
/boot/grub2/i386-pc/gcry_rmd160.mod
/boot/grub2/i386-pc/acpi.mod
/boot/grub2/i386-pc/gcry_rsa.mod
...

例如4:查找名字为passwd

[root@student /]# find /etc/ -name "passwd"
/etc/passwd
/etc/pam.d/passwd

例如5:查找名字为tab结尾

[root@student /]# find /etc/ -name "*tab"
/etc/fstab
/etc/crypttab
/etc/mtab
/etc/selinux/targeted/active/modules/100/updfstab
...

[root@student /]# ls /etc/*tab  //ls方式查找之能查/etc目录下匹配*tab
/etc/anacrontab  /etc/crypttab  /etc/inittab  /etc/rwtab
/etc/crontab     /etc/fstab     /etc/mtab     /etc/statetab

例如6:查找名字为a开头

[root@student /]# find /root/ -name "a*"
/root/anaconda-ks.cfg
/root/.cache/abrt
/root/.cache/abrt/applet_dirlist
/root/.cache/abrt/applet_dirlist

例如7:两个[条件]同时满足

[root@student /]# mkdir /mnt/nsd01
[root@student /]# mkdir /mnt/nsd02
[root@student /]# touch /mnt/nsd03.txt
[root@student /]# echo 1234 > /mnt/nsd04.txt
[root@student /]# find /mnt/ -name "nsd*"
/mnt/nsd01
/mnt/nsd02
/mnt/nsd03.txt
/mnt/nsd04.txt
[root@student /]# find /mnt/ -name "nsd*" -type f  //查找名字满足nsd开头且类型为文件
/mnt/nsd03.txt
/mnt/nsd04.txt
[root@student /]# find /mnt/ -name "nsd*" -type d  //查找名字满足nsd开头且类型为目录
/mnt/nsd01
/mnt/nsd02

例如8:选项[-o],两个[条件]满足其一

[root@student /]# find /mnt/ -name "nsd*" -o -type f  //
/mnt/nsd01
/mnt/nsd02
/mnt/nsd03.txt
/mnt/nsd04.txt

例如9:查找满足大小文件

[root@student /]# find /boot/ -size +300k
/boot/grub2/fonts/unicode.pf2
/boot/System.map-3.10.0-862.el7.x86_64
/boot/vmlinuz-3.10.0-862.el7.x86_64
...

例如10:

[root@student /]# find /boot/ -size -2M
/boot/
/boot/efi
/boot/efi/EFI
...

注意:查找的文件大小用整型,浮点型识别不了

[root@student /]# find /boot/ -size -5.9M
find: Invalid argument `-5.9M' to -size

例如11:查找数据所有者为natasha

[root@student /]# useradd natasha
[root@student /]# ls /home/
lisi  natasha  student  wangwu  zhangsan
[root@student /]# find /home/ -user natasha
/home/natasha
/home/natasha/.mozilla
/home/natasha/.mozilla/extensions
/home/natasha/.mozilla/plugins
/home/natasha/.bash_logout
/home/natasha/.bash_profile
/home/natasha/.bashrc

/proc为内存的数据,一般不占用磁盘空间

[root@student /]# find / -user natasha -type f
find: ‘/proc/9126/task/9126/fdinfo/5’: 没有那个文件或目录
find: ‘/proc/9126/fdinfo/6’: 没有那个文件或目录
/var/spool/mail/natasha
/home/natasha/.bash_logout
/home/natasha/.bash_profile
/home/natasha/.bashrc

例如12:查找3天之前的数据

[root@student /]# find /root/ -mtime +3
/root/.bash_logout
/root/.bash_profile
/root/.bashrc
/root/.cshrc
/root/.tcshrc

例如13:查找最近3天之内的数据

[root@student /]# find /root/ -mtime -3
/root/
/root/anaconda-ks.cfg
/root/.cache
/root/.cache/dconf
/root/.cache/dconf/user

五、wc统计行数

用途:输出每个指定文件的行数、单词计数和字节数

格式:wc [选项]... [文件]...

常用选项

  • [-c]  --bytes           输出字节数统计
  • [m]  --chars           输出字符数统计
  • [l]   --lines             输出行数统计
  • [L]  --max-line-length  显示最长行的长度
  • [w]  --words           显示单词计数

例如:

[root@student /]# wc /etc/passwd
45   86  2330  /etc/passwd      //分别是行数 单词数 字节数 文件名

例如:

[root@student /]# find /root/ -name "a*" | wc -l    //显示行数
11
[root@student /]# find /etc/ -name "*.conf" | wc -l
426

六、Find高级使用

用途:根据条件查找并处理结果;

格式:find [范围] [条件] -exec 处理命令 {}  \;

详细解释:

  • 范围:指定 find 命令搜索的起点目录。例如,/home/user 表示从 /home/user 目录开始搜索。
  • 条件:指定 find 命令搜索文件和目录时使用的条件。条件可以包括文件名、文件类型、文件大小、修改时间等。例如,-name "*.txt" 表示搜索所有文件名以 .txt 结尾的文件。
  • -exec:这是一个选项,表示对找到的每个文件执行指定的命令。
  • 处理命令:这是你希望对找到的文件执行的命令。{} 是一个占位符,表示 find 命令找到的每个文件。
  • ;:这是 -exec 选项的结束标志。注意,\; 前面有一个空格,并且 \ 是用来转义分号的。

例如1:查找满足大小文件并拷贝到/opt 目录下

[root@student /]# find /boot/ -size +10M
/boot/initramfs-0-rescue-48ddf055438941f29c5b67418ab66380.img
/boot/initramfs-3.10.0-862.el7.x86_64.img
[root@student /]# find /boot/ -size +10M -exec cp {} /opt/ \;
[root@student /]# ls /opt/ini*
/opt/initramfs-0-rescue-48ddf055438941f29c5b67418ab66380.img
/opt/initramfs-3.10.0-862.el7.x86_64.img

常见报错1:结束符号错误

[root@student /]# find /boot/ -size +10M -exec cp {} /opt/ \:
find: 遗漏“-exec”的参数

常见报错2:{}查找结果输入错误

[root@student /]# find /boot/ -size +10M -exec cp { } /opt/ \;
cp: 无法获取"{" 的文件状态(stat): 没有那个文件或目录
cp: 无法获取"}" 的文件状态(stat): 没有那个文件或目录
cp: 无法获取"{" 的文件状态(stat): 没有那个文件或目录
cp: 无法获取"}" 的文件状态(stat): 没有那个文件或目录

常见报错3:find是一层一层查找,查找匹配输出一次结果,再匹配再输出

[root@student /]# find /boot/ -size +10M
/boot/initramfs-0-rescue-48ddf055438941f29c5b67418ab66380.img
/boot/initramfs-3.10.0-862.el7.x86_64.img
[root@student /]# find /boot/ -size +10M -exec tar -zcf /opt/test.tar.gz {} \;
tar: 从成员名中删除开头的“/”
tar: 从成员名中删除开头的“/”
[root@student /]# tar -tf /opt/test.tar.gz
boot/initramfs-3.10.0-862.el7.x86_64.img

例如2:假设在 /home/user 目录下找到所有 .txt 文件,并对每个文件执行 cat 命令(显示文件内容)

find /home/user -name "*.txt" -exec cat {} \;

命令工作流程如下:

  1. find /home/user -name "*.txt":在 /home/user 目录下找到所有文件名以 .txt 结尾的文件。
  2. -exec cat {} \;:对找到的每个文件执行 cat 命令,显示文件内容。

注意事项

  • {} 和 \; 之间的空格是必需的。
  • \; 必须用反斜杠 \ 转义,以防止 shell 解释它。

替代语法

-exec 还有一种替代语法,使用 + 而不是 \;,这会使得 find 命令尽可能多地传递文件给 处理命令,从而提高效率:这种情况下,cat 命令会一次性处理多个文件,而不是逐个处理。

find /home/user -name "*.txt" -exec cat {} +

七、Vim的命令模式操作

1)光标跳转

2)复制/粘贴/删除

3)查找/撤销/保存

八、末行模式操作

1)保存/退出/文件操作

2)字符串替换

3)开关参数的控制

 

补充内容:

Linux中大多数配置文件内容,以#开头的行为注释行,还包括空行内容;

例如:显示 ^$ 空行

[root@student ~]# grep ^$ /etc/default/useradd
      # 空行
[root@student ~]#

例如:取反空行

[root@student ~]# grep -v ^$ /etc/default/useradd
# useradd defaults file
GROUP=100
HOME=/home
INACTIVE=-1
EXPIRE=
SHELL=/bin/bash
SKEL=/etc/skel
CREATE_MAIL_SPOOL=yes

例如:显示配置文件有效信息(去除以#开头的注释行和去除空行)

[root@student ~]# grep -v ^# /etc/login.defs | grep -v ^$ > /opt/log.txt
[root@student ~]# cat /opt/log.txt
MAIL_DIR /var/spool/mail
PASS_MAX_DAYS 99999
PASS_MIN_DAYS 0
PASS_MIN_LEN 5
PASS_WARN_AGE 7

小结:

本篇章节为 【第一阶段】ADMIN-DAY4 的学习笔记,可以初步了解到 tar归档及压缩、重定向与管道操作、find命令查找、wc、find高级用法exec{}\;、vim高级使用。除此之外推荐参考相关学习网址:


Tip:毕竟两个人的智慧大于一个人的智慧,如果你不理解本章节的内容或需要相关笔记、视频,可私信小安,请不要害羞和回避,可以向他人请教,花点时间直到你真正的理解。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

小安运维日记

Hey~ 感谢您的充电支持!!

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值