linux基础之find、tar和sed用法

知识点:

find

Linux find命令用来在指定目录下查找文件。任何位于参数之前的字符串都将被视为欲查找的目录名。如果使用该命令时,不设置任何参数,则find命令将在当前目录下查找子目录与文件。并且将查找到的子目录和文件全部进行显示。

语法

find   path   -option   [   -print ]   [ -exec   -ok   command ]   {} \;

参数说明 :

pathname: find命令所查找的目录路径。例如用.来表示当前目录,用/来表示系统根目录。
-print: find命令将匹配的文件输出到标准输出。
-exec: find命令对匹配的文件执行该参数所给出的shell命令。相应命令的形式为’command’ { } ;,注意{ }和\;之间的空格。
-ok: 和-exec的作用相同,只不过以一种更为安全的模式来执行该参数所给出的shell命令,在执行每一个命令之前,都会给出提示,让用户来确定是否执行。

#-print 将查找到的文件输出到标准输出
#-exec command {} ; —–将查到的文件执行command操作,{} 和 ;之间有空格
#-ok 和-exec相同,只不过在操作前要询用户

例:find . -name .svn | xargs rm -rf

====================================================

-name filename #查找名为filename的文件
-perm #按执行权限来查找
-user username #按文件属主来查找
-group groupname #按组来查找
-mtime -n +n #按文件更改时间来查找文件,-n指n天以内,+n指n天以前
-atime -n +n #按文件访问时间来查GIN: 0px">

-ctime -n +n #按文件创建时间来查找文件,-n指n天以内,+n指n天以前

-nogroup #查无有效属组的文件,即文件的属组在/etc/groups中不存在
-nouser #查无有效属主的文件,即文件的属主在/etc/passwd中不存
-newer f1 !f2 找文件,-n指n天以内,+n指n天以前
-ctime -n +n #按文件创建时间来查找文件,-n指n天以内,+n指n天以前
-nogroup #查无有效属组的文件,即文件的属组在/etc/groups中不存在
-nouser #查无有效属主的文件,即文件的属主在/etc/passwd中不存
-newer f1 !f2 #查更改时间比f1新但比f2旧的文件
-type b/d/c/p/l/f #查是块设备、目录、字符设备、管道、符号链接、普通文件
-size n[c] #查长度为n块[或n字节]的文件
-depth #使查找在进入子目录前先行查找完本目录
-fstype #查更改时间比f1新但比f2旧的文件
-type b/d/c/p/l/f #查是块设备、目录、字符设备、管道、符号链接、普通文件
-size n[c] #查长度为n块[或n字节]的文件
-depth #使查找在进入子目录前先行查找完本目录
-fstype #查位于某一类型文件系统中的文件,这些文件系统类型通常可 在/etc/fstab中找到
-mount #查文件时不跨越文件系统mount点
-follow #如果遇到符号链接文件,就跟踪链接所指的文件
-cpio %; #查位于某一类型文件系统中的文件,这些文件系统类型通常可 在/etc/fstab中找到
-mount #查文件时不跨越文件系统mount点
-follow #如果遇到符号链接文件,就跟踪链接所指的文件
-cpio #对匹配的文件使用cpio命令,将他们备份到磁带设备中
-prune #忽略某个目录

tar

linux下最常用的打包程序就是tar了,使用tar程序打出来的包我们常称为tar包,tar包文件的命令通常都是以.tar结尾的。生成tar包后,就可以用其它的程序来进行压缩。

1.命令格式:

tar[必要参数][选择参数][文件]

2.命令功能:

用来压缩和解压文件。tar本身不具有压缩功能。他是调用压缩功能实现的

3.命令参数:

-A, --catenate       追加 tar 文件至归档
-c, --create      创建一个新归档
-r, --append      追加文件至归档结尾
-u, --update     仅追加比归档中副本更新的文件
-x, --extract, --get      从归档中解出文件
-t, --list      列出归档内容
-z, --gzip, --gunzip, --ungzip 通过 gzip 压缩归档
-j, --bzip2    通过 bzip2 压缩归档
-J, --xz     通过 xz 过滤归档
–lzip       通过 lzip 过滤归档
–lzma     通过 lzma 过滤归档
-Z, --compress, --uncompress 通过 compress 压缩归档
-v, --verbose   详细地列出处理的文件过程
-k, --keep-old-files    保留源文件不覆盖
-m, --touch    不要解压文件的修改时间
-W, --verify    在写入以后尝试校验归档
f, --file=ARCHIVE   使用归档文件或 ARCHIVE 设备,这个参数是最后一个,后面只接文件名
-b, --blocking-factor=BLOCKS 设置每个记录 BLOCKS x 512 字节
-C, --directory=DIR   改变至目录 DIR
–help          显示帮助信息
–version         显示版本信息

4.用法

压缩

  • tar –cvf jpg.tar *.jpg 将目录里所有jpg文件打包成tar.jpg
  • tar –czf jpg.tar.gz *.jpg 将目录里所有jpg文件打包成jpg.tar后,并且将其用gzip压缩,生成一个gzip压缩过的包,命名为jpg.tar.gz
  • tar –cjf jpg.tar.bz2 *.jpg 将目录里所有jpg文件打包成jpg.tar后,并且将其用bzip2压缩,生成一个bzip2压缩过的包,命名为jpg.tar.bz2
  • tar –cZf jpg.tar.Z *.jpg 将目录里所有jpg文件打包成jpg.tar后,并且将其用compress压缩,生成一个umcompress压缩过的包,命名为jpg.tar.Z
  • rar a jpg.rar *.jpg rar格式的压缩,需要先下载rar for linux
  • zip jpg.zip *.jpg zip格式的压缩,需要先下载zip for linux

解压

  • tar –xvf file.tar 解压 tar包
  • tar -xzvf file.tar.gz 解压tar.gz
  • tar -xjvf file.tar.bz2 解压 tar.bz2
  • tar –xZvf file.tar.Z 解压tar.Z
  • unrar e file.rar 解压rar
  • unzip file.zip 解压zip

总结

  1. *.tar 用 tar –xvf 解压
  2. *.gz 用 gzip -d或者gunzip 解压
  3. .tar.gz和.tgz 用 tar –xzf 解压
  4. *.bz2 用 bzip2 -d或者用bunzip2 解压
  5. *.tar.bz2用tar –xjf 解压
  6. *.Z 用 uncompress 解压
  7. *.tar.Z 用tar –xZf 解压
  8. *.rar 用 unrar e解压
  9. *.zip 用 unzip 解压

sed

Linux sed 命令是利用脚本来处理文本文件。

sed 可依照脚本的指令来处理、编辑文本文件。

Sed 主要用来自动编辑一个或多个文件、简化对文件的反复操作、编写转换程序等。

语法

sed [-hnV][-e<script>][-f<script文件>][文本文件]

参数说明

  • -e

动作说明

  • a :新增, a 的后面可以接字串,而这些字串会在新的一行出现(目前的下一行)~
  • c :取代, c 的后面可以接字串,这些字串可以取代 n1,n2 之间的行!
  • d :删除,因为是删除啊,所以 d 后面通常不接任何咚咚;
  • i :插入, i 的后面可以接字串,而这些字串会在新的一行出现(目前的上一行);
  • p :打印,亦即将某个选择的数据印出。通常 p 会与参数 sed -n 一起运行~
  • s :取代,可以直接进行取代的工作哩!通常这个 s 的动作可以搭配正规表示法!例如 1,20s/old/new/g 就是啦!

作业练习:

1、查找/etc目录下大于1M且类型为普通文件的所有文件

# 知识点 find
# 一步一步来,我们先找出/etc下所有普通文件
[flamenca@localhost ~]$ find /etc -type f
...
/etc/sane.d/teco2.conf
/etc/sane.d/teco3.conf
/etc/sane.d/test.conf
/etc/sane.d/u12.conf
/etc/sane.d/umax.conf
/etc/subgid-
/etc/nfs.conf
# 出来一大堆
# 但题目中还说要文件大小大于1M的普通文件
# 所以.. 
[root@localhost ~]# find /etc/ -type f -size +1M
/etc/udev/hwdb.bin
/etc/selinux/targeted/contexts/files/file_contexts.bin
/etc/selinux/targeted/policy/policy.31
/etc/selinux/targeted/active/policy.kern
/etc/selinux/targeted/active/policy.linked
/etc/brltty/zh-tw.ctb

2、打包/etc/目录下面所有conf结尾的文件,压缩包名称为当天的时间,并拷贝到/usr/local/src目录备份。

# 知识点 tar
# conf 结尾 *.conf
# 当天时间怎么表示呢? `date +%F`
# 我们试一试
[root@localhost ~]# date +%F
2020-03-23

# 所以答案我们显而易见
# 但还是慢慢来比较稳妥
# 先打包
[root@localhost ~]# tar -cvf `date +%F`.tar /etc/*.conf
tar: Removing leading '/ ' from member names
/etc/asound.conf
/etc/autofs.conf
/etc/autofs_ldap_auth.conf
/etc/brltty.conf
/etc/cgconfig.conf
/etc/cgrules.conf
/etc/cgsnapshot_blacklist.conf
/etc/chrony.conf
/etc/dleyna-server-service.conf
/etc/dnsmasq.conf
...

# 注意:tar: Removing leading '/ ' from member names
# 这一句,是为啥出现的呢?什么意思?
# 其原因是tar默认为相对路径,使用绝对路径的话就回报这个错,可以使用-P参数(注意大写)解决这个问题

# 打包好了,我们开始复制咯
[root@localhost etc]# tar -zvcPf `date +%F`.tar.gz /etc/*.conf && cp `date +%F`.tar.gz /usr/local/src
/etc/asound.conf
/etc/autofs.conf
/etc/autofs_ldap_auth.conf
/etc/brltty.conf
/etc/cgconfig.conf
/etc/cgrules.conf
/etc/cgsnapshot_blacklist.conf
...
#检查一下
[root@localhost etc]# cd /usr/local/src
[root@localhost src]# ls
2020-03-23.tar.gz

3、利用sed 取出ifconfig命令中本机的IPv4地址

# 知识点 sed
# 这个简单,只要用好正则表达式基本答案就出来了
# 首先我们要找到那一行,并观察特征作出正则表达式
# 比如我的
[root@localhost src]# ifconfig ens33
ens33: flags=4163<UP,BROADCAST,RUNNING,MULTICAST>  mtu 1500
        inet 192.168.1.4  netmask 255.255.255.0  broadcast 192.168.1.255
        inet6 fe80::298d:cfea:e788:42bb  prefixlen 64  scopeid 0x20<link>
        ether 00:0c:29:5b:fc:1e  txqueuelen 1000  (Ethernet)
        RX packets 3926  bytes 891637 (870.7 KiB)
        RX errors 0  dropped 0  overruns 0  frame 0
        TX packets 1109  bytes 175715 (171.5 KiB)
# ipv4的地址在第二行,在inet后面,特征是有数字有点,后面跟了一些东西,用.*表示
# 所以我们可以这样
[root@localhost src]# ifconfig ens33 |sed -nr '2s/^[^0-9]+([0-9.]+).*/\1/p'
192.168.1.4
# 仔细看一下这个s参数后面的东西s/^[^0-9]+([0-9.]+).*/\1/p

# 解释一下哈,我们知道前面内容^[^0-9]+([0-9.]+).*是来表示第二行内容的
# 而([0-9.]+)是代表IP地址的写法,且用括号分组了
# 之后的 /\1/p 是打印这部分的内容

4、删除/etc/fstab文件中所有以#开头,后面至少跟一个空白字符的行的行首的#和空白字符

# 知识点 sed
# 还是老样子,写出题目要求的正则表达式内容,就做出来了
# 你看啊,其实题目要的效果就是去除#和空格,留下之后的内容,所有我们将之后的内容括号分组

# s/^#[[:space:]]+(.*)/\1/
# 就这样

[root@localhost src]# sed -r 's/^#[[:space:]]+(.*)/\1/' /etc/fstab 

#
/etc/fstab
Created by anaconda on Thu Dec 26 14:35:01 2019
#
Accessible filesystems, by reference, are maintained under '/dev/disk'
See man pages fstab(5), findfs(8), mount(8) and/or blkid(8) for more info
#
/dev/mapper/centos-root /                       xfs     defaults        0 0
UUID=499c0046-6a79-4a41-9297-533134c65bf4 /boot                   xfs     defaults        0 0
/dev/mapper/centos-home /home                   xfs     defaults        0 0
/dev/mapper/centos-swap swap                    swap    defaults        0 0

5、处理/etc/fstab路径,使用sed命令取出其目录名和基名

# 知识点 sed
# 这个简单,这个取得路径方法很简单,还是正则表达式
# 基名和目录名两块这么来写 (/.*)/(.*) 看着特抽象是不是?
# 以两个括号中间的 / 作为切入点看,右边的不就是基名,左边的都是目录名

# 咱们先取个基名吧
[root@localhost src]# echo /etc/fstab |sed -nr 's@(/.*)/(.*)@\2@p'
fstab
# 格式不是 s///嘛,为了看起来清楚点,我给改成s@@@了

# 取目录名吧
[root@localhost src]# echo /etc/fstab |sed -nr 's@(/.*)/(.*)@\1@p'
/etc

# 完事了嗷

猜你喜欢

转载自blog.csdn.net/FlamencaH/article/details/105054924
今日推荐