find
根据时间戳:
以“天”为单位;
-atime [+|-]#,
#: [#,#+1) 2 那就是大于等于二天小于三天
+#: [#+1,∞] +4 大于等于五天及五天以上
-#: [0,#) -3 0至三天以内的不包含3天 #find /etc/ -atime -1 (passwd magedu)
-mtime
-ctime
以“分钟”为单位:
-amin #find /etc/ -amin -1
-mmin
-cmin
-perm
mode:精确权限匹配 # find -perm 755
+mode[/mode] 任何一类(u,g,o)对象的权限中只要能一位匹配即可,或关系,+ 从centos7开始淘汰
# find -perm /444 # find -perm +111
-mode 每一类对象都必须同时拥有指定权限,与关系0 表示不关注 # find -perm -777
#find -perm /444 任何一位有4 就可以筛选出 (还可以表示为+444)
#fing -perm /044 组和其他人4有就可以筛选出(还可以表示为+044)
#find -perm /400 只要user上有4就可以筛选出(还可以表示为+400)
#find -perm -200 user上必须有2
#find -perm -210 user上必须有2,组上必须有1
#find -perm -666 每位权限上必须有6,但是不包括766
-print 默认的处理动作,显示至屏幕 # find -perm -777 -print只显示文件路径
-delete 直接删除所查找到的文件,不询问。 # find -perm /111 -delete(删除满足条件的文件)
-ls 长列出所查找到的文件 ,显示权限等 # find -perm /777 -ls
-fls file 将查找到的文件长列出导入到指定文件。
> file
#find /etc/ -regex “..conf$” -fls /app/find.txt不包含错误信息
#less /app/find.txt
也可以如下:
#find /etc/ -regex “..conf$” >/app/find1.txt
#vim /app/find1.txt
#find /etc/ -regex “..conf$” >find1.txt 2>&1 可以导出错误结果
-ok command {} \; 对查找到的文件当做下一命令的参数去执行(交互式)
#find /etc/ -regex “..conf$” -ok cp -a {} /app/{}.bak \;
cp一个文件 -a 表示文件复制过程权限,链接都不改变 {}代表原文件就是前面搜索到的文件 {}.bak代表目的文件
#find /etc/ -regex “..conf$” -ok cp -a {} /app/{}.bak \;-maxdepth 1表示一级目录下的文件
#find /etc/ -maxdepth 1 -regex “..conf$” -ok rm -rf {} \; 删除命令
-exec command \; 对查找到的文件当做下一命令的参数去执行(非交互式)
#find /etc/ -maxdepth 1 -regex “..conf$” -exec cp -a {} /app/ \; -maxdepth 1表示一级目录下的文件 跟ok
一样但是少了询问
# find /etc -regex “..conf$” -exec ls {} \;
find -name “.conf” -exec cp {} {}.orig \;
find /tmp -ctime +3 -user joe -ok rm {} \;
find ~ -perm -002 -exec chmod o-w {} \;
find /data –type f -perm 644 -name “.sh” –exec chmod 755 {} \;
find /home –type d -ls
{}:用于引用查找到的文件名称自身
xargs:
touch a{1..1000000} 当创建很多文件是rm就会删除不了这时用 xargs来参数传递
echo {1..30000000} | xargs touch
find |xargs rm
由于很多命令不支持管道|来传递参数,而日常工作中有这个必要,所以就有了xargs
注意:文件名或者是其他意义的名词内含有空格符的情况,有些命令不能接受过多参数,
命令执行可能会失败,xargs可以解决
如:
find /sbin -perm +700|xargs ls -l
find 和 xargs 格式:find| xargs ccommand
练习:
1、查找/var目录下属主为root,且属组为mail的所有文件
find /var -user root -a -group mail -ls
2、查找/var目录下不属于root、lp、gdm的所有文件
find /var -not \( -user root -o -user lp -o -user gdm \) -ls
3、查找/var目录下最近一周内其内容修改过,同时属主不为root,也不是postfix的文件
find /var/ -mtime -7 -not -user root -not -user postfix -ls
4、查找当前系统上没有属主或属组,且最近一个周内曾被访问过的文件
find / -nouser -o -nogroup -a -atime -7 -ls
5、查找/etc目录下大于1M且类型为普通文件的所有文件
find /etc/ -size +1M -a -type f -ls
6、查找/etc目录下所有用户都没有写权限的文件
find /etc ! -perm /222 -ls
7、查找/etc目录下至少有一类用户没有执行权限的文件
find /etc ! -perm -111 -ls
gnome 搜索工具 图形化的搜索工具
压缩和解压:
compress
.Z #compress abc(原有文件没有生产新文件 abc.z)
-d 解压缩 #compress -d abc.Z
uncompress #uncompress abc.Z
zcat X.Z > X 解压并导入新文件
-c 将结果打印到屏幕上,配合重定向,不会覆盖原文件,但权限会变。 #compress -c abc (看到的全是乱码其实是
压缩文件,并将压缩文件的内容打印出来)
#compress -c abc > abc.Z 原本的文件还在并生产压缩文件 #compress -dc abc.Z > abc
s
-f 默认不对硬链接数为2及以上的文件压缩,加上f,强制压缩指定文件,而其他同inode的文件硬链接数减1.
-v 显示详细过程。 #compress -v abc
演示过程: #cp /var/log/messages . #ls #ls -lh查看详细信息 #cp messages messages1 #cat messages1 >> messages (尽量让文件大点多导入几次)
# cp messages abc 拷贝 #compress abc压缩 (原有文件没有生产新文件 abc.z)
#compress -dc abc.Z > abc
rm -rf abc
ln messages abc (创建硬链接) 当两个文件是链接是 # compress abc没用 但是 # compress -f abc就可以压缩
messages不变链接数减一
> 压缩过程权限会改变因为相当于又重定向了 , 直接压缩文件不导入权限并不改变
原文件会丢失
gzip
.gz #gzip messages 生成messages.gz 原文件会丢失
-d 解压缩 # gzip -d messages.gz
gunzip
zcat X.gz > X
-c 将结果打印到屏幕上,配合重定向,不会覆盖原文件,但权限会变。# gzip -c messages >messages.gz
# gzip -c messages #gzip -dc messages.gz> messages
-f 如果文件是链接文件,默认不对硬链接数为2及以上的文件压缩,加上f,强制压缩指定文件,而其他同inode的文件硬链接数减1.
-v 显示详细过程。
-# 数字越大,压缩比越高,速度越慢,文件越小。
-1 等于 –fast
-2,3,4,5,6(default),7,8
-9 等于 –best
可tab补齐
bzip2
.bz2
-d 解压缩
bunzip
bzcat X.bz2 > X
-k 保留原文件
-c 将结果打印到屏幕上,配合重定向,不会覆盖原文件,但权限会变。
-f 默认不对硬链接数为2及以上的文件压缩,加上f,强制压缩指定文件,而其他同inode的文件硬链接数减1.
-v 显示详细过程。
-# 数字越大,压缩比越高,速度越慢,文件越小。
-1 等于 –fast
-2,3,4,5,6,7,8
-9 等于 –best (default)
xz
.xz
-d 解压缩
xzcat
-k 保留原文件
-f 默认不对硬链接数为2及以上的文件压缩,加上f,强制压缩指定文件,而其他同inode的文件硬链接数减1.
-v 显示详细过程。
-# 数字越大,压缩比越高,速度越慢,文件越小。
-0 等于 –fast
-1 -2,3,4,5,6(default),7,8
-9 等于 –best
zip
.zip
unzip
|zip 将生成的文件名 –
可以将管道前的输出结果转为文件并压缩。通过此方式压缩的文件只能使用“unzip -p 压缩包 > 新文件 ”来解压缩
unzip -p 预览解压缩后的内容到屏幕,可以配置重定向将结果保存到指定文件,权限会发生变化。
zip -r 新文件名.zip 被压缩打包的工具(可以多个文件)
tar
-cf 创建包名字 原文件(可以指定多个)
-tf 包名字 显示包中的文件名
-tvf 详细显示包中的文件名
-rf 包名字 新文件名(可以指定多个)
–delete -f 包名字 被删除的文件名(可以指定多个)
-xf 包名字 解出所有的文件到当前目录
-xf 包名字 文件名 解所指定的文件到当前目录
-C 解包到指定目录
-v 显示过程
-Jcf 创建包的名字(.tar.xz) 原文件(可以指定多个) 打包并用xz压缩
-jcf 创建包的名字(.tar.bz2) 原文件(可以指定多个) 打包并用bzip压缩
-zcf 创建包的名字(.tar.gz) 原文件(可以指定多个) 打包并用gzip压缩
-T 指定个列表,包含需要被打包的文件,以换行符为间隔
-X 指定个排除列表,以换行符为间隔
分割:
分割大的tar文件为多份小文件:
split –b Size –d tar-file-name prefix-name 将tar包分隔为多个文件
splid -b 1M -d messades.tgz messades-parts -b文件划分大小, -d 文件名
splid -b 5k -d test.tar.gz newtest 分成五个小文件
cat 被分隔出的多个文件名 > 单个文件名
cat newtest.tar.gz0 > test.tar.gz2
cpio复制
ls * |cpio -o > 文件名.cpio 打包。 #ls |cpio -ov > new.cpio
ls group gshadow passwd shadow |cpio -o >aaa
cpio -id < 文件名.cpio 解开被cpio打包的文件 #cpio -id <new.cpio 查看new.cpio的文件
gzip 文件名.cpio 生成文件名为文件名.cpio.gz
/boot/initramfs-xxxx.img
Centos6: cpio.gz文件:
#zcat initramfs-xxxx.img |cpio -id
#zcat aaa.cpio.gz|cpio -id 解压被cpio打包的文件
Centos7: cpio文件 :
#cpio -id < initramfs-xxxx.img
-tv < 文件名.cpio 预览cpio打包的文件。
将etc目录备份:
#find ./etc -print | cpio -ov >etc.cpio
内容预览:
#cpio -tv < etc.cpio
要解包文件:
#cpio -idv < etc.cpio
xfs
ext4
rescue
sda1 /boot /mnt/sysimage/boot
sda2 / /mnt/sysimage
sda3 swap
sda4 extend
sda5 /app /mnt/sysimage/
/mnt/sysimage/root -> /mnt/sysimage/lib64
ldd +绝对路径 查看动态库
/lib64/libc.so.6
chroot /mnt/sysimage
cd ../../../
dns chroot > /var/name/chroot/var/named
A (A)
a.so (A)
b.so (A)
c.so (B) 如果想要安装A 要检测B有没有,没有就不安装,A依赖于B B又依赖于C C又依赖于A 循环
A -> B -> C -> A
debian deb dpkg 包管理器会检测当要安装包时会自动检测所需要的所有包,并一起安装
ubuntu deb apt-get包的管理器
redhat redhat package manager = rpm 红帽子的包管理器
RPM package manager RPM对应包的批量管理 YUM
GNU Gnu is not unix
YUM DNF fedora
httpd-xxxx.tar.gz包含: xxx.c源代码 …so readme.txt = > httpd-xxxx.rpm 变成
httpd.deb
ftp.deb
bind.deb
练习:统计光盘中Packages下,各种架构的rpm包的数量。
ls *.rpm |rev |cut -d. -f2|sort |rev |uniq -c rev 对于筛选出的 反着输出
Packages]# ls | egrep -o “[^\.]+\.rpm$” |cut -d. -f1 |sort |uniq -c
A -> B -> C -> D -> A
testapp.rpm
testapp.so文件
/usr/lib/testapp/testapp.so
/usr/bin/testapp 执行文件存放地方
#cd /run/media/root/CentOS\ 7\ x86_64/ 包的存放路径
#cd Packages/
解决包的依赖管理工具:
yum: rpm包管理器的前端工具
apt-get:ded包管理器前端工具
zypper: suse上的rpm 前端工具
dnf:Fedora 18+rpm 包管理器前端管理工具
查看二进制程序所依赖的库文件:
ldd /PATH/TO/BINARY_FILE #ldd /sbin/ifconfig
管理及查看本机装载的库文件:
ldconfig
/sbin/ldconfig -p:显示本机已经缓存的所有可用库文件名及文件路径映射关系
配置文件:/etc/ld.so.conf, /etc/ld.so.conf.d/*.conf
缓存文件: /etc/ld.so.cache
如:
#cd /etc/ld.so.conf.d/
#vim testapp.conf
/user/lib/testapp/
#ldconfig
rpm 数据库var/lib/rpm #cd /var/lib/rpm 记录安装过的包数据和信息
-i –instal 安装包
#rpm -i httpd-2.4.6-45.el7.centos.x86_64.rpm
#rpm -i httpd-tools-2.4.6-45.el7.centos.x86_64.rpm (httpd包的安装,还依赖于两个库文件)
#rpm -i screen-4.1.0-0.23.20120314git3c2946.el7_2.x86_64.rpm
–test 检测
–nodeps 忽略依赖性关系直接安装
-v 显示详细信息
-vi 显示包名
-vv 显示更详细信息
-h 显示进度
-ivh 显示包名进度条
–test: 测试安装,但不真正执行安装,即dry run模式
#rpm -ivh –test screen-4.1.0-0.23.20120314git3c2946.el7_2.x86_64.rpm
–nodeps:忽略依赖关系
–replacepkgs 已安装过的包重装。
–replacefiles 其他已安装的RPM包的文件,与即将装的RPM中的文件冲突时,则覆盖文件并安装。
–nosignature: 不检查来源合法性
–nodigest:不检查包完整性
–noscripts:不执行程序包脚本:
%pre: 安装前脚本; –nopre #rpm -ivh –noscripts –nopre screen-4.1.0-0.23.20120314git3c2946.el7_2.x86_64.rpm
%post: 安装后脚本; –nopost
%preun: 卸载前脚本; –nopreun
%postun: 卸载后脚本; –nopostun
-Uvh 当有旧的版本的包时,则卸载旧包再装新包,如没有旧包,直接装新包。
-Fvh 当有旧的包时,卸载旧包装新包,无旧包时,nothing
–oldpackage 降级 已有新包,装旧包。
–force 强制安装。–replacepkgs –replacefiles –oldpackage
查询安装包:
-q 软件包名 查询已安装过的软件包名。#rpm -q tree
-qa 列出所有的已安装过的rpm包
#rpm -qa
-qa “name*” #rpm -qa “tre*”
-qa |grep name #rpm -qa |grep tree
-qf 查询一个文件来自于哪一个rpm包 (已安装的rpm) #rpm -qf /bin/ls
-q –changelog 版本更新日志 #rpm -q –changelog tree
-qc 查询软件包的配置文件(不是所有包都有配置文件)#rpm -qc aide
-qd 查询软件包的帮助文档 #rpm -qd aide
-qi 查询软件包的详细信息 #rpm -qi tree #rpm -qi `rpm -qf /bin/ls`
-ql 查询软件包所安装到系统当中的所有文件路径 #rpm -ql tree
-q –scripts 查询软件包自带的脚本 #rpm -q –scripts `rpm -qf /bin/ls`
-q –provides 查询自身的功能 #rpm -q –provides `rpm -qf /bin/ls` #rpm -q –provides tree
-qR 查询实现自身的功能需要什么能力
-qp[licd] rpm包 查看未安装的rpm包的各项信息 #rpm -qp http
-p 针对尚未安装的程序包文件做查询操作
-e 软件名
–nodeps 忽略依赖性。强制卸载
–import GPG-KEY…. 导入公钥 gpd生成公钥
-qa “gpg-pubkey*” 显示所有已导入的公钥
-e gpg-pubkey….
-K rpm包 验证某rpm签名是否合法 #rpm -K tree-1.6.0-10.el7.x86_64.rpm (md5 not ok是应为没有公钥 )
进入centos6.9光盘 # ls #rpm –import RPM-CPG-KEY-Centos-6(导入公钥)
#rpm -qa “gpg-pubkey*” 查看公钥信息
yum rpm的前端程序,可解决软件包相关依赖性,可在多个库之间定位软件包,up2date的替代工具
yum存储了很多rpm已及包的相关元数据(防置于特定目录repodata下)yum需要建立仓库仓库repository
配置文件:/etc/yum.conf为仓库提供公共配置
/etc/yum.repos.d/*.repo为仓库的指向提供配置
#vim /etc/yum.conf yum有缓存
#cd /etc/yum.repos.d 提供一些默认的地址
#vim /etc/yum.repos.d
编写仓库:
#cd /etc/yum.repos.d
#vim magedu.repos.d 文件必须以repo 结尾
格式:
[base]名 仓库的id
name=magedu 26 repo
baseurl=http://172.16.0.1/centos/6/目录
file:///media/dvd/centos6.9 本地地址
file:///run/media/root/Centos\ 7\ x86_64
gbgkey=file:///run/media/root/Centos\ 7\ x86_64/RPM-CPG-KEY-Centos-7公钥
gpgcheck=1 不检查默认1 就不用公钥的设置了照样能安装 # yum install httpd
#cd #yum repolist
repolist 列出repo信息 #cd #yum repolist 列出仓库
install 包名 # yum install httpd安装
enabled={1|0}代表仓库是否启动 1开启
:.!将内容显示出来
设置缓存:
#cd /var/cache/yum/
#ls
#cd x86_64/
#ls
#cd #
#ls
#cd base/
#yum clean all
# yum repolist
原创文章,作者:MOMO,如若转载,请注明出处:http://www.178linux.com/84550