locate,find,sed,包管理,文件解压缩

Posted seeet

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了locate,find,sed,包管理,文件解压缩相关的知识,希望对你有一定的参考价值。

本周学习内容知识点总结与实践

   本周总共分为四大点和一个补充点sed行编辑器、文件查找、文件压缩解压、软件包管理。
 现在开始逐个分解讲解其功能及实践操作的截图

一、文件查找:在文件系统上查找符合条件的文件

locate命令: 用来查找文件或目录,locate命令查找比find快,比如在/tmp下新建了一个xx文件夹,此时再使用locate去查找xx文件夹时发现无法找到文件夹,因为locate是事先把系统内所有档案名称及路径都索引到数据库了,在使用时尽量手动操作updatedb更新数据库。
选项

 -i:不区分大小写的搜索			示列locate -i  pasSSWd
 -n:只列出查询出结果的前三个 	示列:locate  -n3 passwd
 -r:使用基本正则表达式需要加r	示列:locate -r ‘\.conf$‘

find命令:实时查找工具,通过遍历指定路径完成文件查找
选项

-maxdepth:最大搜索目录深度,指定目录下的文件为1级
-depth:先处理目录内的文件,再处理指定目录
    示列:find /tmp/ -maxdepth 2 -name wujiancong
-mindepth:查看不小于多深的文件,不低于所限内容
    示列:find  /etc  -mindepth 4 -name  *.conf
-name:“文件名称” 支持glob函数 *,?,[],[^]
-iname:“文件名称” 不区分大小写查找  
-inum:按inode号查找
-samefile  name 相同inode号的文件
-regex:以模式匹配整个文件路径,而非文件名称
     示列:find /etc  -regex  “.*\.sh$"

根据属主、属组查找

-user username :查找属主为指定用户UID的文件
    示列:find  -user wjc 
-group  grpname:查找属组为指定组GID的文件
    示列:find -user joe -not -group joe
-uid  userID:查找属主为指定的UID号的文件
-nouser:查找没有属主的文件
-nogroup:查找没有属组的文件

根据文件类型查找

 -type
 f:普通文件    d:目录文件         l:符号链接文件	
 p:管道文件    s:套接字文件       b:块设备文件		
 c:字符设备文件	-empty:空文件或目录
    find /tmp -type d 查找tmp下的目录文件
    find /tmp -type f 查找tmp下的普通文件
    find / -type p    查找/下的管道文件

组合条件查找

 组合条件:
 与:-a	或:-o	非:-not !
 德.摩根定律:
 (非A)或(非B)=非(A且B)
 (非A)且(非B)=非(A或B)
 查找tmp下非用户root与非f开头的文件 
     示列: find /tmp/ \(-not -user root -a -not -name ‘f*‘\)

根据文件大小查找

 -size [+|-]#UNIT
 常用单位:k, M, G,c(byte)
 #UNIT: (#-1, #]如:6k 表示(5k,6k]
 -#UNIT:[0,#-1]如:-6k 表示[0,5k]
 +#UNIT:(#,∞)如:+6k 表示(6k,∞)
       查找大于5k文件:find /tmp/ -size +5k
       查找小于5k文件:find /tmp/ -size -5k

以时间为单位查找

 -amin  查找n分钟以前被访问过的所有文件。
 -atime 查找n天以前被访问过的所有文件。
 -cmin  查找n分钟以前文件状态被修改过的所有文件。
 -ctime 查找n天以前文件状态被修改过的所有文件。
 -mmin  查找n分钟以前文件内容被修改过的所有文件。
 -mtime 查找n天以前文件内容被修改过的所有文件。

以权限查找 find /tmp -perm 755

查询到的标准输出再进行处理动作

-print:默认的处理动作,显示至屏幕
-ls:类似于对查找到的文件执行“ls -l”命令
-delete:删除查找到的文件
-fls file:查找到的所有文件的长格式信息保存至指定文件中
-ok COMMAND  \; 对查找到的每个文件执行由COMMAND指定的命令,对于每个文件执行命令之前,都会交互式要求用户确认
-exec COMMAND  \; 对查找到的每个文件执行由COMMAND指定的命令
: 用于引用查找到的文件名称自身
find传递查找到的文件至后面指定的命令时,查找到所有符合条件的文件一次性
传递给后面的命令
由于很多命令不支持管道|来传递参数,xargs用于产生某个命令的参数,xargs
可以读入 stdin 的数据,并且以空格符或回车符将 stdin 的数据分隔成为参数
许多命令不能接受过多参数,命令执行可能会失败,xargs可以解决
注意:文件名或者是其他意义的名词内含有空格符的情况
find和xargs的组合:find | xargs COMMAND
示例:
ls | xargs rm 删除当前目录下的大量文件
find /sbin/ -perm +700 | ls -l 这个命令是错误的
find /bin/ -perm /7000 | xargs ls -Sl 查找有特殊权限的文件,并排序
find /bin/ -perm -7000 | xargs ls -Sl 此命令和上面有何区别?
find -type f -name “*.txt” -print0 | xargs -0 rm 以字符nul分隔
find示例
备份配置文件,添加.orig这个扩展名
find -name “*.conf” -exec cp  .orig \; ?提示删除存在时间超过3天以上的joe的临时文件
find /tmp -ctime +3 -user joe -ok rm  \; ?在主目录中寻找可被其它用户写入的文件
find ~ -perm -002 -exec chmod o-w  \; ?查找/data下的权限为644,后缀为sh的普通文件,增加执行权限
find /data –type f -perm 644 -name “*.sh” –exec chmod 755  \; ?查看/home的目录
find /home –type d -ls

二、归档压缩解压

压缩工具:zip、gzip、gunzip=gunzip -d、zcat、使用gzip压缩便使用zcat 查看压缩内容

 gzip 压缩文件 
 示列:gzip  message   压缩完成之后不保留原文件 默认压缩.gz后缀
    -c:将压缩结果输出,可以使用重定向将其保存为压缩文件,从而保留源文件
 bzip2 :压缩完成之后不保留原文件 默认压缩.gz
     -k:压缩和解压时都保留源文件
 xz:压缩 
 归档工具
     tar [options]   file.tar   file1
 创建归档 
    tar -cpvf /tmp/geeee.tar /tmp/
 tar xvf :解压缩
    -c:创建归档
    -x:展开归档
    -t:不展开而直接查看被归档的文件
    -z:使用gzip压缩
    -Z:使用compress进行解压缩
    -j:使用bz2压缩
    -J:使用xz压缩
    -v:显示解压缩执行过程
    -f:指定要处理的文件名

三、sed 行编辑器

sed工具:是一种流编辑器,它是文本处理中非常中的工具,能够完美的配合正则表达式使用,功能不同凡响。处理时,把当前处理的行存储在临时缓冲区中,称为“模式空间”(pattern space),接着用sed命令处理缓冲区中的内容,处理完成后,把缓冲区的内容送往屏幕。接着处理下一行,这样不断重复,直到文件末尾。文件内容并没有 改变,除非你使用重定向存储输出。Sed主要用来自动编辑一个或多个文件;简化对文件的反复操作;编写转换程序等。

选项:

 -n 不输出模式空间内容到屏幕,即不自动打印  sed -n ‘3p’
 -e 多点编辑
 -f /PATH/SCRIPT_FILE 从指定文件中读取编辑脚本
 -r 支持使用扩展正则表达式
 -i.bak 备份文件并原处编辑
     sed -i.bak ‘/^# User/aAAA‘ /tmp/bash:先备份然后在操作# User开头的末尾加入AAA

地址命令
sed工具地址定界
(1) 不给地址:对全文进行处理
(2) 单地址:#指定的行,$:最后一行
/pattern/:被此处模式所能够匹配到的每一行:sed -n ‘/^[^#]/p‘ /etc/fstab

(3) 地址范围: 
   #,#    sed -n ‘3,5p’ 三行到第五行
   #,+#	  sed -n ‘3,+5p’ :表示三行往后再加5行
(4) ~:步进    
    1~2 奇数行:seq  10 | sed -n ‘1~2p’:表示基数行1、3、5显示
    2~2 偶数行: seq 10|sed -n ‘2~2p‘:偶数行2、4、6显示
    /pat1/,/pat2/      示列: sed -n ‘/^U/p’ /etc/fstab:以u开头的行
 #,/pat1/ 		示列:sed -n ‘/^b/,/^f/p‘ /etc/passwd:以b开头到f开头的行
 ‘//,// 示列:sed -n ‘/24\ /May\ /2018:11:56:00/,/24\ /May\ /2018:11:56:39/p‘ access_log
    查看日志某时间段到某时间段的日志内容带/ 需加反\转义
 sed -n ‘s/[[:alpha:]]/\l&/gp‘  koko   :替换为小写
 sed -n ‘s/[[:alpha:]]/\u&/gp‘  koko:替换为大写  

sed编辑命令

 d 删除模式空间匹配的行,并立即启用下一轮循环
 p 打印当前模式空间内容,追加到默认输出之后
 a [\]text 在指定行后面追加文本,支持使用\n实现多行追加
    示列:sed ‘/^r/ahello‘ /tmp/passwd:以r开始的行后面追加hello
 i [\]text 在行前面插入文本
    示列:sed ‘/^k/i jiji‘ koko:在以某字母或数字开头的行前面插入内容至文本
 G 在行后面插入内容  sed  ‘afak‘G 
 c [\]text 替换行为单行或多行文本
    示列:sed -i.bak ‘/^Listen 80/c Listen 8080‘ /etc/httpd/conf/httpd.conf :备份修改文件内容
 w /path/file 保存模式匹配的行至指定文件
    示列:seq 15 | sed ‘2,6w   /tmp/sed.log‘:将2-6行保存至指定文件
 r /path/file 读取指定文件的文本至模式空间中匹配到的行后
    示列:seq 15 | sed ‘2,6r /etc/issue‘:指定行追加文件内容
 = 为模式空间中的行打印行号
    示列:sed ‘/^#/=‘ /etc/fstab :以#开头的行打印行号
 ! 模式空间中匹配行取反处理
    示列:sed -n ‘/^#/!p‘ /etc/fstab :!取反打印不是以#号开头的行

sed替换工具

 s/// 查找替换,支持使用其它分隔符,s@@@,s###
    示列cat /jiji |sed ‘/^root/!d‘|sed ‘s/root/test/2‘:将第二个root替换为test
    sed -nr ‘/CMDLINE/s#(.*)rd.lvm#\1 net.ifnames=0"#p‘ /etc/default/grub

插入内容

 sed  ‘s/kk/JJ/‘ koko :查找修改文件内容,修改需加sed -i
 sed -i ‘s/kk/JJ/‘ koko :s///查找替换文件内容,默认所有替换
 sed -r ’s/^(SELINUX=)disabled/\1enforcing/‘ /etc/selinux/config:反向替换引用
 cat setZone.txt  | sed -e ‘s/\(port=8\)\([0-9]+\)\(.*\)\(zoneid="\)/\1\2\3\4\2/g‘

替换标记:

 g 行内全局替换
 p 显示替换成功的行
 w /PATH/FILE 将替换成功的行保存至文件中

sed 高级用法

 ifconfig ens33 |sed -n ‘2p‘| sed ‘s/^.*inet //‘|sed ‘s/ net.*$//‘  取网卡
 ifconfig ens33|sed -rn ‘2s/^[^0-9]+([0-9.]+).*/\1/p‘
 P: 打印模式空间开端至\n内容,并追加到默认输出之前
 h: 把模式空间中的内容覆盖至保持空间中
 H:把模式空间中的内容追加至保持空间中
 g: 从保持空间取出数据覆盖至模式空间
 G:从保持空间取出内容追加至模式空间
 x: 把模式空间中的内容与保持空间中的内容进行互换
 n: 读取匹配到的行的下一行覆盖至模式空间
 N:读取匹配到的行的下一行追加至模式空间
 d: 删除模式空间中的行
 D:如果模式空间包含换行符,则删除直到第一个换行符的模式空间中的文本, 并不会读取新的输入行,而使用合成的模式空间重新启动循环。如果模式空间不包含换行符,则会像发出d命令那样启动正常的新循环
    示列  
     sed -n ‘n;p‘ FILE
     sed ‘1!G;h;$!d‘ FILE
     sed‘N;D’FILE
     sed ‘$!N;$!D‘ FILE
     sed ‘$!d‘ FILE
     sed ‘G’ FILE
     sed ‘g’ FILE
     sed ‘/^$/d;G’ FILE
     sed ‘n;d‘ FILE 
     sed -n ‘1!G;h;$p‘ FILE

四、RPM、YUM包管理

rpm命令管理程序包
安装、卸载、升级、查询、校验、数据库维护
rpm -i|--install [install-options] PACKAGE_FILE…
rpm安装:rpm -ivh  packet包路径
   -i:(表示安装)-v:(显示安装过程)-h:(使用#显示进度条)组合一起使用
rpm  -q   包名 :查询是否安装某包
rpm  -qa 列出当前安装所有的包
rpm  -qa 包名:查询包名
rpm  -e   包名:卸载安装
rpm  -ql  包名:查看安装后的文件列表
rpm  -i    包路径包名   --replacepkgs:覆盖安装
rpm  -qi  包名 :查看安装过的软件的详细信息描述
rpm  -qc 包名:查看安装后的配置文件
rpm  -q    --provides httpd    查看某个包属于谁的
rpm -V  包名   查看安装包是否改变
rpm	-K  包名  检测包是否被更改
rpm  -qf 包名:查看磁盘文件来自哪个包
rpm2cpio 包文件|cpio –itv 预览包内文件
rpm2cpio 包文件|cpio –id “*.conf” 释放包内文件

rpm升级
rpm -U|--upgrade [install-options] PACKAGE_FILE...
rpm -F|--freshen [install-options] PACKAGE_FILE...
     upgrade:安装有旧版程序包,则“升级”
   如果不存在旧版程序包,则“安装”
   freshen:安装有旧版程序包,则“升级”
   如果不存在旧版程序包,则不执行升级操作
   rpm -Uvh 安装包和路径
   rpm -Fvh 安装包和路径
        --oldpackage:降级
        --force: 强制安装

yum命令:是一个在Fedora和RedHat以及SUSE中的Shell前端软件包管理器。基於RPM包管理,能够从指定的服务器 自动下载RPM包并且安装,可以自动处理依赖性关系,并且一次安装所有依赖的软体包,yum可以查找、安装、删除。

示列
repolist:列出所有可用的yum包
clean all:清理缓存
list:	列出所有可用的包
info:	显示包的详细信息
grouplist:列出所有的包组
groupinfo "package_group_name": 显示包组信息 
yum check-update:检查可升级的包
yum check-update:检查可升级的包
     update packe_name ....:指定升级的程序包
要升级到指定版本要带版本号:
  downgrade packe_name:降级
erase|remove pack_name ....:依赖的包也会被卸载
whatprovides|provides /path/to/somefile: 查询某文件是由谁提供的
groupinstll "group_name" 安装包组
groupremove ”group_name“:卸载组
yum history:查看yum的命令历史
  yum history info 6
  yum history undo 6 
日志 :/var/log/yum.log
--nogpgcheck:禁止进行gpg check
-y: 自动回答为“yes”
-q:静默模式
--disablerepo=repoidglob:临时禁用此处指定的repo
--enablerepo=repoidglob:临时启用此处指定的repo
--noplugins:禁用所有插件 

yum 仓库配置
yum仓库的一些变量
yum的repo配置文件中可用的变量:
$arch: 平台,i386,i486,i586,x86_64等
$basearch:基础平台;i386, x86_64
$YUM0-$YUM9:自定义变量
新建一个文件进行配置 /etc/yum.repo.d/xxx.repo [name] 仓库名称 name=hu 仓库名称 baseurl=配置仓库地址 enable=1:启用仓库 0:禁用仓库 gpgcheck=1:启用key 0警用key gpgkey=启用key后填入key

编译安装示列
源码编译安装tree-1.8
1、yum -y install gcc 相关依赖的包
2、官网下载源码
3、wget ftp://mama.indstate.edu /linux/tree/tree-1.8.0.tgz
  tar -xvf  tree-1.8.tgz
  cd tree-1.8.tgz
4、cat README、INSTALL
5、vim Makefile
  prefix = /apps/tree
6、  make -j cpu内核数 | && make install
7、man帮助vim /etc/man_db.conf
  MANDATORY_MANPATH    /apps/tree/man
8、PATH
  vim /etc/profile.d/env.sh
  PATH=/apps/bin:$PATH
  ./etc/profile.d/env.sh
  make  clean   删除重新编

以上是关于locate,find,sed,包管理,文件解压缩的主要内容,如果未能解决你的问题,请参考以下文章

解压缩到管道,然后在流中的文件上运行PDF信息

find && sed

find && sed

find/sed/tar命令练习

文件查找和压缩

第十章文件查找和压缩