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  文件 即可生效