本周学习内容知识点总结与实践
本周总共分为四大点和一个补充点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 删除重新编