PS:本来想着这周搞个reset脚本传上来的,但是还有点瑕疵没解决掉,下周看看能不能搞出来把,本周接着上传笔记把
查找
locete
首先需要安装locate软件包 mlocate
其次需要生成磁盘文件的索引数据库 : updatedb
locat -i不区分大小写
-n只显示只列出前几个
-r匹配基本正则表达式
#由于locete依赖磁盘的数据库,所以并不能做到实时搜索更多的使用find命令
find
find是实时搜索,相对locate会慢,但能实时反应文件的位置,且用find时需注意用户对搜索目标的权限(dir需要有rx) find 默认递归
find 默认列出当前文件夹的所有文件
#find无法查找内存中的东西
find -maxdepth 最大深度
-mindepth 最小深度 # find /etc -maxdepth 2 -mindepth 2 只列出2级深度
-depth 先处理文件,最后列出文件夹
-name 按名称搜索 支持通配符用法,记得两侧加引号
# find /etc -name "*passwd*" !!!
-i 忽略大小写 # find -iname
-inum 按节点编号寻找 #find -inum 68795510
#find / -inum 133 -ls
-links n 链接数时n的文件
-regex 匹配正则表达式 #匹配的是完整路径,而不是文件本身
#find / -iregex ".*\.txt"
-user 根据用户名匹配 #find / -user
-ls 相当于ls -l 与ls是两个命令
-delete 删除匹配到的内容
-fls 相当于重定向到文件中
-ok ok后加命令 需要配合 {} ;\ "{}"前面相当于匹配到的内容
#find ~ -type f -ok {} ;\ 吧家目录里的所有普通文件删除;\为结束符
#如果 -ok mv {} \; 的时候 需要主要同名文件的覆盖问题
-exec #exec后加命令 徐配合 {} ;\ 与ok比较特点是不提示
#find /data -name "*.txt" -exec cp {} {}.bak ;\
#吧/data下已.txt结尾的文件复制出一个bak后缀,源文件还在
-nouser 查找没有所有者的文件
-nogroup 查找没有所属组的文件
-uid 查找uid的文件
-gid 查找指定gid的文件
根据类型: (文件的7中类型)
-type b
c
d #find / -type d -ls
f #f普通文件
l
p
s
-empty #空文件或文件夹
与或非:
-a #与 a与b a -a b
-o #find ~ -regex ".*\.txt" -o -regex ".*\.sh$" #~的.sh后缀或者.txt文件
# find ~ \( -regex ".*\.sh$" -o -type l \) -ls
# 查找家目录的.sh后缀的文件或者是链接的文件,并用ls显示出来,(因为存在与或非关系,需加括号,否则表示.sh后缀的文件或用ls显示出管道文件)
-! #非 取反 等于-not
德摩根定律:
!A -a !B = !(A -O B) #非A且非B等于非(A或B)
!A -o !B = !(A -a B) #非A或非B等于非(A且B)
#find /home -not \( -user root -o -user dachui \) -ls
#寻找 home目录下 不是 root 或者dachui 的文件 并ls 显示出来
排除目录:
-path #排除 还需配合 -prune (需要用与跟或的逻辑表现出来)
#find /home -path "/home/xiaochui" -a -prune -o -name "*bash*" -ls
#寻找/home 目录下 除了 xiaochui文件夹下的所有包含bash的文件
##find /home/ \( -path "/home/xiaochui" -o -path "/home/dachui" \) -a -prune -o -name ".bashrc" -ls
##寻找除了/home/dachui和/home/xiaochui除外的/home文件夹下的所有.bashrc文件
###find / \( -path "/sys" -o -path "/proc" \) -a -prune -o -type d -maxdepth 1 -ls
###查看跟下排除/sys 和 /proc 文件夹 信息,最大深度1
文件大小:
-size + - K G M c
#find ~ -name "*bash*" -a -size +10k
#跟正正好好的大小有些许区别
时间查找:
-atime #天
-mtime
-ctime
-amin #分钟
-mmin
-cmin
#find / -atime 10 表示10到11天 +10表示11天以前的文件 -1表示最近一天的文件
权限:
精确搜索:
-prem #find ~ -perm 755 #家目录755权限的文件
模糊搜索:
-prem / 或
-prem - 与
#find ~ -perm -444 u g o 每个人权限至少都是444以上的
#find ~ -perm /666 u g o 其中一个人有7的权限就可以
#find如果不输入路径,默认在当前目录
#find 目标路径 选项
练习
1、查找/var目录下属主为root,且属组为mail的所有文件
# find /var -user "root" -group "mail"
2、查找/var目录下不属于root、lp、gdm的所有文件
# find /var -not \( -user root -o -user lp -o -user xiaochui \)
3、查找/var目录下最近一周内其内容修改过,同时属主不为root,也不是postfix的文件
# find /var -mtime -7 -a -not \( -group root -o -user postfix \)
# find /var -mtime -7 -a -not -group root -a -not -user postfix |wc -l
4、查找当前系统上没有属主或属组,且最近一个周内曾被访问过的文件
# find / -atime -7 -nouser -o -nogroup
5、查找/etc目录下大于1M且类型为普通文件的所有文件
# find /etc -type f -size +1M
6、查找/etc目录下所有用户都没有写权限的文件
# find /etc ! -perm /222 -ls
7、查找/etc目录下至少有一类用户没有执行权限的文件
# find /etc ! -perm -111 -ls
8、查找/etc/init.d目录下,所有用户都有执行权限,且其它用户有写权限的文件
# find /etc/init.d -perm -113
xargs 吧前一个命令的标准输出当作,下一个命令的参数,如未添加命令,则默认未echo
xargs -n #每行显示几个结果 seq 10 |xargs -n3 #每行显示三个数字
-peint0 #以nul(ascii的第一个字符,是不可见字符)作为分隔符,分割文件
#(Linux里不可以以"/" "nul"作为文件名字)
#echo user{1..10} |xargs -n1 useradd 可以实现批量创建账号
文件/文件夹压缩
文件压缩 ::
compress -d 解压
-c 结果输出到标准输出,不删除源文件 (可重定向到文件中)
-v 详情
#compress 压缩比不高 较为少用
#compress 压缩的文件后缀未 ".Z"
gizp -d 解压
-c 结果输出到标准输出,不删除源文件
-k 保留原文件
-n 压缩比1-9 #n为数字
#cat messages | gzip >m.gz 吧一个命令的结果压缩成一个叫m.gz的文件
#gizp 压缩的文件后缀为 ".gz"
#zcat 可直接预览 .Z .gz的压缩文件
bzip2 -d
-c
-k
-n #n为数字
#bzip2 压缩的文件后缀为 ".bz2"
#bzcat可以查看 .bz2的压缩文件
xz -d
-c
-k
-n #n为数字
# 压缩比比较:xz > bzip2 >> gzip >>> compress
#xz压缩效果好但相比其他的压缩工具,速度更慢
#xzcat可以预览.xz的压缩文件
文件夹压缩::
zip -r 对文件夹进行打包
-d 解包到指定目录
-p 管道
unzip 解包
#zip 的格式为 zip /home.dachui.zip /etc 吧etc打包放到/home/dachui文件夹下
#zip打包时候会吧目录本身也打包进去,如只想打包文件夹内的文件可以cd进入到想要打包的文件夹内,就不会有文件夹本身了
#zip打包会丢失文件的属性信息,故更多的使用tar来进行打包
tar -c 打包
-t 预览
-x 解包
#如果解包时候文件还压缩着,也无需先解压在解包,直接xf便可解包
-f 文件
-v 详情
-C 解压到指定目录 (默认当前文件夹)
#tar xf test1.tar.xz -C /root 把当前文件夹下的test1.tar.xz解压到/root文件夹下
-z 把打包的文件压缩成.gz格式 (调用gzip命令)
-j 把打包的文件压缩成.bz2格式 (调用bz2命令)
-J 把打包的文件压缩成.xz格式 (调用xz命令)
--exclude 排除
#tar zcvf /root/a.tgz --exclude=/app/host1 --exclude=/app/host2 /app
tar c /data/ | tar x -C /backup 此法可将/data文件夹复制个backup,相当于做了个备份
#常用的一般是 tar -cvf -xvf -tvf
#tar能保留着文件的属性,但保留不住facl权限
#tar的格式一般为 tar 要保存的路径 要打包的文件 tar -cvf /data/test.tar f1.txt
#cd /etc ; tar Jcvf /data/ni/etc.tar.xz * 此法可将/etc目录的所有文件全部复制到/data/ni下而不复制文件夹
cpio #(不常用)
-o output模式,打包,将标准输入传入的文件名打包后发送到标准输出
-i input模式,解包,对标准输入传入的打包文件名解包到当前目录
-t 预览,查看标准输入传入的打包文件中包含的文件列表
-O filename 输出到指定的归档文件名
-A 向已存在的归档文件中追加文件
-I filename 对指定的归档文件名解压
-F filename 使用指定的文件名替代标准输入或输出
-d 解包生成目录,在cpio还原时,自动的建立目录
-v 显示打包过程中的文件名称
#将etc目录备份
find ./etc -print | cpio -ov > bak.cpio
#将/data内容追加bak.cpio
find /data | cpio -oA -F bak.cpio
#内容预览
cpio –tv < etc.cpio
#解包文件
cpio –idv < etc.cpio
文件压缩严格区分文件后缀名,如不小心将文件名改掉,可以用file查看文件属性,在将正确的文件后缀名改回来,在用相应的工具解压
切割文件
split 语法
split -b 1M -d /root/test.xz /data/haha_zip
#把/root/test.xz这个文件进行切割,以1M为单位切割,存到/data/下文件前缀名字叫haha_zip (-d 是以数字切割)
合并可医用cat cat /data/haha_zip* >/root/test #把多个文件重定向到/root下
windows的ABI接口是PE
Linux的ABI接口时ELF
包工具
rpm:
rpm是红帽的包管理工具,包的后缀都是rpm,同时rpm也是个命令,用来管理包
rpm后缀的文件可以用rpm2cpio来解包
rpm的命名规范 例: #xterm-331-1.el8.x86_64.rpm
#软件名 -版本号-编译次数1-适合于红帽8版的x86架构.rpm包
#i686 32位系统
#x86_64 64位系统
#noarch 无关操作系统 (多是文档,配置文件)
#aarch64
#ppc641e
#i386 Intel微处理器32位的系统
#amd64 64位架构
#centos8的光盘吧包分成两个包:
#base包 基本包
#Appstream包 扩展包
rpm -q 查询包(需正确输入完整包名)(大小写敏感)
-qa 全部包(可以grep模糊搜索)
-qi 对安装的包的信息进行查询
-qip 对磁盘的文件路径的包的信息进行查询(没安装又想查内容,输入完整路径即可)
-qpl 列出此路径的包安装后会在磁盘的那些地方生成文件
-ql 列出安装的包名在磁盘上那些地方生成了文件
-qf 查找磁盘上的文件来自于那个包#(一般先用which 找出文件的路径,在用qf吧找出来的路径当作参数来查找来自于那个包)
# which tree |xargs rpm -qf
# tree-1.7.0-15.el8.x86_64
# 安装后生成的文件不属于任何包
# 包查找依赖/var/lib/rpm的数据库,如此索引数据库被删除,则找不到该文件
-qc 只列出配置文件
-q --changelog 列出更新记录
-q --scripts 查看程序的脚本
-i 安装包(只能安装单个)
-e 卸载(只能卸载没有依赖性的包)
-v 显示细节
-h 显示安装的进度条
-K 检查来源
grouplist 包组列表
--nodeps 忽略依赖性
--replace 覆盖安装
--force 强制
--whatprovides "能力":查询指定的 "功能" 由哪个包所提供
--whatrequires "能力":查询指定的 "功能" 被哪个包所依赖
--root=/路径 以 "目录为跟,吧东西装在此目录下"
## /etc/pki/rpm-gpg/RPM-GPG-KEY-centosofficial
## 此文件可校验文件真伪用下面命令
## rpm --import /etc/pki/rpm-gpg/RPM-GPG-KEY-centosofficial
dpkg
#Debian系列的.rpm包名叫.deb 类似的rpm工具叫 dpkg 包依赖的解决方案是apt
dpkg -i 安装
-r 卸载包 不删除依赖的包不删除配置文件
-p 卸载包 包括配置文件
-l 列出当前已安装的包 类似 rpm-qa
-l "包名" 显示该包的简要说明,类似rpm –qi
-s "包名" 列出该包的状态,包括详细信息,类似rpm –qi
-L 列出该包中所包含的文件,类似rpm –ql
-S 搜索包含pattern的包,类似rpm –qf
-c 列出 deb 包的内容,类似rpm –qpl
--unpack "包名".deb 解开 deb 包的内容
apt
/etc/apt/sources.list #仓库地址,配置ubutun的仓库改此仓库文件即可
apt update 更行数据库 #类似yum clean all
install 安装
remove 卸载
#httpd 在ubutun里叫 apache2
yum/dnf :
yum仓库支持:本地共享;http共享;https共享;ftp共享
yum仓库配置信息放在/etc/yum.repos.d
centos8为什么用dnf,因为centos7的yum用的是python2版本,centos8用python3版本
所以,centos8用dnf
#/etc/yum.conf yum的总配置,不需改动:
# [main]
# gpgcheck=1
##安装软件前校验包签名,0为不校验
# installonly_limit=3
##并发安装数3,多线程安装的意思
# clean_requirements_on_remove=True
##安装完删除安装包
#best=True
##如有多个版本,安装最新版
#man yum.conf 查看yum.conf帮助
/var/cache/yum/$basearch/$releasever 此地址为yum的cache位置
repodata目录下就是元数据 repodata所在的目录就是仓库的位置
/var/log/yum.log 是yum的日志 或者在centos8上 /var/log/dnf.log
同一台机器上不能在多个终端执行yum/dnf
/var/log/anaconda/packaging.log这就是安装系统时候安装的包
yum list 列出所有仓库所有包 #带@的表示已经安装的 #anaconda代表装操作系统时装的
repolist 列出仓库列表
install 安装
remove 卸载 #centos8 会默认吧安装时现在闲下来的依赖包卸载掉
-y 不进行提示
-q 静默安装
-info 查看信息
provides 查看某个文件来自那个包
history yum历史 :
# -info 查看信息
# -undo 撤销
# -redo 重做
repolist #列出所有仓库,如果出现两个仓库,则说明配置成功
repolist all #可以列出状态信息
clean all #清除数据库中的repolist
yum-config-manager --disable 仓库名 #来自于yum-utils包
yum-config-manager --enable 仓库名 #启用禁用仓库
# yum-config-manager --disable epel 禁用epel库
# yum-config-manager --enable epel 启用epel库
yum --disablerepo=[Ae]* --enablerepo=BaseOs list
#临时吧包含A包含e的所有仓库禁用,起用BaseOs仓库,显示仓库列表
yum --disablerepo=[Ae]* --enablerepo=BaseOs list available
#值安装可用的包,不显示已安装的包
reinstall 重新安装
#救援模式好像不支持yum,只能用rpm
yum/dnf失败的多数原因:
1:yum的配置文件格式或路径错误
文件应放在/etc/yum.repo.d/*.repo,且以.repo结尾的文件
2:yum cache 缓存问题
清除缓存 yum clean all
3:网络问题
多试几次
yum客户端配置:
[仓库名称]
name=仓库描述
#mirrorlist= 文件(仓库路径写成了一个文件)
baseurl=仓库地址 #可写多行
gpgcheck=1 #软件校验
gpgkey=导入密钥
enabled=1 #启用此仓库
#建议先把/etc/yum.repo.d/下的文件全部移动走
#创建仓库时,仓库必须方在/etc/yum.repo.d/目录下,且必须为.repo后缀
实例:
cd /etc/yum.repo.d/
mkdir backup ; mv *.repo backup/
vim alibase.repo
[Base]
name=alibaseos
gpgcheck=1
gpgkey=file:///etc/pki/rpm-gpg/RPM-GPG-KEY-centosofficial
baseurl=https://mirrors.aliyun.com/centos/8/BaseOS/x86_64/os/
https://mirrors.huaweicloud.com/centos/8/BaseOS/x86_64/os/
https://mirrors.cloud.tencent.com/centos/8/BaseOS/x86_64/os/
#enabled=0
vim aliappstream.repo
[Appstream]
name=aliappstream
gpgcheck=1
gpgkey=file:///etc/pki/rpm-gpg/RPM-GPG-KEY-centosofficial
baseurl=https://mirrors.aliyun.com/centos/8/AppStream/x86_64/os/
https://mirrors.huaweicloud.com/centos/8/AppStream/x86_64/os/
https://mirrors.cloud.tencent.com/centos/8/AppStream/x86_64/os/
#enabled=0
##创建两个库一个BASE库一个APPstream库
##如果使用脚本创建仓库时需注意,脚本里的变量例如$releasever这不是bash变量,如果时用cat重定向追加到一个文件中,会被认为是一个bash变量而不被识别,如果就想保留$releasever这个描述则添加转义符\转义\$releasever像这样
dnf repolist #列出所有仓库,如果出现两个仓库,则说明配置成功
dnf clean all #清除数据库中的repolist
局域网如何搭配yum源
#总的来说局域网配置yum就是把所有得repo包撞到一台机器(服务器)上
#然后通过httpd的局域网分享功能,把这些包分享出去,供同一网络环境下的用户下载
#所以 配一个repo仓库,仓库里写好网站的路径(这是把repo包下载到你的本机)
#安装httpd 用命令 下载所有的repo包
#用httpd 分享到局域网即可
实战的几个步骤 简单版
可以下载光盘的base/appstream的rpm包也可以互联网上下载
#互联网下载需修改/etc/yum.repo.d/下的repo文件
下载httpd服务,启用httpd服务 #systemctl enable --now httpd
#下载之后会生成一个文件夹 /var/www/html ##把下载好的文件方在此目录下
启动服务之后,把文件放http文件夹下,即可通过内网方式访问 #http://10.0.0.5/extras/extras/Packages/ 例子
dnf reposync --repoid=extras --download-metadata -p /var/www/html/centos
#此条命令可以下载你repolist里的某一个库的所有内容到指定的文件夹
#你可以通过网络方式(建一个repo仓库,走网络下载),用上面命令把仓库的包下载到指定文件夹,用httpd 分享至内网
wget 链接 -P(指定路径)
./configure --help
--prefix=PREFIX #安装到指定路径
编译安装软件
./configure 负责确定安装路径,安装特性,生成Makefile
Makefile
make 编译成二进制
make install 安装
README INSTALL 这两个类似于说明书的作用,安装软件前建议阅读
#下载的源码建议方在/usr/local/src下
编译实例:(tree)
yum -info tree #查看tree的信息 找到官网
wget http://mama.indstate.edu/users/ice/tree/src/tree-1.8.0.tgz
#进入网站找到源码的下载链接 #可通过wget 或者下载到本地在rz -E 传过去
tat xf tree-1.8.0.tgz #解压到当前目录
cat README ;cat INSTALL #查看文档
vim Makefile 修改prefix 变量地址 #修改到你想安装到的位置
make #生成二进制文件 #可能会报错,因为有的依赖的包未安装,如make,gcc
make install #把二进制的文件复制到,指定的文件夹
vim /etv/profile.d/**.sh #修改PATH变量 吧程序路径添加进去
#更推荐用软链接的方式, ln -s 目标位置 变量位置 ,这样更方便
#如果用此法,注意hash缓存
vim /etc/man_db.conf #吧程序的man帮助路径添加到man配置文档中manpath变量里
编译实例:(CMatrix)
wget https://github.com/abishekvashok/cmatrix/archive/v2.0.tar.gz -P /usr/local/src
tar xf XX解压文件 -C /usr/local/src/
cat README INSTALL #查看文档
./configure --help #查看configure特性
./configure --prefix=/apps/cmatrix #让MAKEfile安装到此文件夹下
make -j 2 #生成二进制文件 ##-j 并发下载数
此时提示出错,说缺一个autoconf的包,然后dnf 搜索下载此包
make -j 2 #上次执行失败,此时继续执行
此时有提示 缺少cruese.h #用dnf搜索,如果搜出一大堆,装开发包
装完缺少的包之后,看到了MAKEFILE文件,此时建议将文件夹删除,全部重新来一遍
rm -rf cmatrix
tar -xf cmatrix-v2.0-Butterscotch.tar
./configure --prefix=/apps/cmatrix
make
makeinstall
rm-rf /usr/local/src/cm*
vim /etc/profile.d/env.sh #把路径添加到变量里,也可使用软链接方式
source 文件 即可生效
浙公网安备 33010602011771号