04_Linux基础-.&..-cat-tac-重定向-EOF-Shell-more-ps-less-head-tail-sed-grep-which-whereis-PATH-bash-usr-locate-find

本文涉及的产品
日志服务 SLS,月写入数据量 50GB 1个月
简介: cat-tac-重定向-EOF-Shell-more-ps-less-head-tail-sed-grep-which-whereis-PATH-bash-usr-locate-find

04_Linux基础-.&..-cat-tac->&>>-EOF-Shell-more-ps-less-head-tail-sed-grep-which-whereis-PATH-bash-/usr-locate-find


一. 回顾

回顾
//        将/home/目录下的所有文件和文件夹复制到/jindafu目录下
        cp  /home/*  .  -r
#注:复制文件夹 接-r        递归复制(因为提到了文件夹)
#注:所有    通配符*
//        复制/etc/hosts文件到jindafu,不给予覆盖提醒
        用cp的绝对路径
            which  cp    得到cp的路径
            /usr/bin/cp  /etc/hosts  .
#注:不给予提醒 输入cp命令的绝对路径    因为cp命令是别名 所有会有提醒
//        将xiena目录改名为xienana
        mv  xiena/  xienana
//        将singer目录下的所有文件复制到hejiong目录下
        cp  haiquan/singer/*  hejiong/
#注:所有    通配符*
#注:复制文件不接-r
//        删除所有的xienana目录
        find命令 或 tree查看xienana在哪  rm  -rf  路径
        find  /hunantv/  -name  “xienana”  -exec  rm  -rf  {} \;
//        查看目录结构 tree  查看类型 file
//        echo  $PS1  $PS2 怎么看PS1 PS2
//        hostname  查看主机名
//        echo  $SHELL  查看默认shell  (是bash)
//        cat  /ect/shells  查看机器里有哪些shell
        sh  bash  exit
#/etc    存放配置文件
//        d  目录
        -  普通文件
        l  链接文件
        c  字符设备文件(显示)
        b  块设备文件 (磁盘)
//        reboot  重启机器
//        clear  清屏
//        别名 alias , unalias , vim  /root/.bashrc
//        env  环境变量  set  所有变量

二. . .. 删不掉

//        rm  -rf  不会删除隐藏文件
        rm  -rf  .lixh  删除隐藏文件
        .和..删不掉

三. cat

//        ls  查看文件夹里的内容
        cat 1.查看文件里的内容
            2.可以将多个文件连接到一起输出
        -n, --number  给输出的行进行编号
        用处2: cat  tangliangfei.txt  wangtc.txt (连接功能)
        先将tangliangfei.txt内容输出,再将wangtc.txt内容输出

tac 与 cat

//        tac 逆序显示,从最后一行到第一行
            不能接-n
        cat 正序显示,从第一行到最后一行 (有-n选项)

四. 重定向

//        >  输出重定向,会覆盖原来的内容,如果文件不存在会自动新建
            重定向:就是将在屏幕上输出的内容,改变输出的方向,输出到文件里
        >>  追加输出重定向,不会覆盖原来的内容,只是在末尾追加,如果文件不存在会自动新建
        >会覆盖原来的内容,>>不覆盖,末尾追加
        # cat  tangliangfei.txt  wangtc.txt  >tang_wang.txt
        # echo 123456789  >>tang_wang.txt 
        (学会cat与>、>>的组合)

五. here document

//        生成指定内容的文件 --》here document  --》主要用在写脚本生成指定的内容
        //  <<EOF 定义的结束字符串
            当输入EOF的时候,结束  end of file 
# cat   >chenpeng.txt  <<EOF  (注1:后面不一定非得EOF,但要起的有意义)
> chen peng                    (注2:1个>符号,原来内容会被覆盖)
> jiangsu
> xinhua
> nongda
> linux
> cali
> EOF (注3:点回车)

# cat >>cali.txt <<end(注1:2个>符号,内容追加,不覆盖)
> sanchuang
> nongda
> changsha

六. Shell 脚本

//        shell脚本: 其实是一个文件,文件里面有很多的linux命令,这个文件可以执行,被执行的时候,会执行文件里的所有的命令
# vim  first_shell.sh
#!/bin/bash(注1:声明这个脚本使用的解释器是bash)

mkdir  -p  /test(注2:存在不报错,不存在就新建)

cd /test

mkdir sc{1..100}

touch pengyf{1..100}.txt

cp /etc/hosts  /test

cat >sanchuang.txt  <<EOF(注3:回车后直接打,文本文件里没有提示符>)
sanchuang   hunan  changsha  furongqu hunannongda
feng de yong
linux
EOF(注4:结束)

echo "####################################"
cat  -n  sanchuang.txt 
echo "####################################"
脚本写好了↑↑↑
# bash  first_shell.sh   执行脚本(注:内容如下)
####################################
     1    sanchuang   hunan  changsha  furongqu hunannongda
     2    feng de yong
     3    linux
####################################
//        脚本在执行的时候,是从第1条命令,自上而下执行,如果中间有命令执行失败,后面的命令还是会执行的(Python中间出错,没有异常捕获的话,不再执行)

七. more

// more命令  分页显示 (注1:没有-n选项,cat有-n选项)
        用途:全屏方式分页显示文件内容
交互操作方法:
     按Enter键向下逐行滚动
     按空格键向下翻一屏、按b键向上翻一屏   back
     按q键退出 (注2:显示完自动退出,与less的差别)
# more  messages 

八. ps aux

//        # ps aux  查看linux当前运行的进程的信息--》任务管理器(ps  -aux也可以)
        # ps -aux|more
        # cat messages |more 和 more messages 一样
        # cat -n messages |more 显示行号

九. less

// less命令
    用途:与more命令相同,但扩展功能更多
    交互操作方法:
     与more命令基本类似,但个别操作会有些出入
    【page down】【page up】上翻下翻页(注1:more不支持)
    显示完不退出,按q退出 (注2:与more的差别)
    (注3:也支持空格、b、Enter,凡是more支持的less都支持)
# less messages 
# cat messages |less

十. head

// head命令(注1:默认取前10行,连续的几行)
        用途:查看文件开头的一部分内容(默认为10行)
        格式:head -n number 文件名
        格式:head -数字  文件名
        cat  -n  passwd  |head  显示前10行,有编号
        head  passwd  显示前10行,没有编号
        head  -5  passwd  显示前5行(没编号)
        head  -n  5  passwd  显示前5行(没编号,与上一条命令效果一样)

十一. tail

// tail命令
        用途:查看文件结尾的少部分内容(默认为10行)
        格式:tail  -n  number 文件名
        格式:tail  -数字   文件名
           tail  -f  文件名  = tailf        # 注:tailf不知道怎么用
            #注:tail  -f 动态的监控文件末尾的变化
tail  passwd  取末尾10行(无编号)
cat  -n  passwd  |tail  取末尾10行(有编号)
cat  -n  passwd  |tail  -5  取末尾5行(有编号)
cat  -n  passwd  |tail  -1  最后1行(有编号)
cat  -n  passwd  |tail  -n  3  取末尾3行(有编号)

tail  -n  2  passwd  显示最后2行
tail  -n  -2  passwd  与上条效果一样
tail  -n  +2  passwd  显示从第2行到末尾  (注1:用处:统计有多少行的时候,不想显示首行,统计磁盘挂载的时候不想看到标题这一行)
    (注2:df  -Th 显示linux里的磁盘分区的使用情况)
    df  -Th|tail  -n  +2  统计磁盘挂载不显示标题行
    df  -Th|tail  -n  +2|wc  -l  统计行数

# tail -f feng.txt   动态的监控文件末尾的变化
(注4:经常用来查看日志文件的变化,根据日志的记录去排错)
(注2:重新打开窗口连过去,右边修改文件内容,左边动态监控文件末尾的变化,一有新的内容就显示)(注3:Ctrl+C 强行终止)
tail  -f 扩展 
    特别适合看某些日志文件
        /var  存放动态变化的文件  variable  变量,变化的,可变的
        log  日志:是程序记录它发生的事情
# cd  /var/log        (注1:/var/log 存放大量日志文件)
# tail  -f  secure   查看secure日志文件 (注2:secure 安全)
(注3:别的窗口做操作,日志文件末尾动态更新)

十二. sed

    1.取出passwd的第3行
    # cat -n /etc/passwd|head -3|tail -1 (注1:先取前3行,再取最后1行,用|管道)
    # cat  /etc/passwd|head -3|tail -1 (注2:与上面命令比,没有编号3)
    2.取出passwd文件的第5行到10行
    #注:这种 先看末尾 用head 因为行数是从前到后计算的
    # cat -n /etc/passwd|head |tail -6 (注3:先head取默认前10行,再取后六行)
                                       (注4:从第5行到10行,tail  -6,不是-5)
    # cat -n messages |head -200|tail -101  (100到200行)
    3.取出第3行,第5行,第10行
    # sed  -n  '1p;3p;5p'  passwd (注5:-n是选项,符合要求的选项显示出来,不是显示行号的意思)

    练习3扩展
    // sed
        -n 作用:只是显示符合要求的行(注9:不符合要求的行不显示)
            1p;3p;5p
            1p 显示第1行  p 是print命令
            ; 命令连接符号
        # cat  -n  passwd  |sed  -n  ‘1p;3p;5p’ (注6:显示1、3、5行,有编号)
        # sed  -n  '1p;3p;5p'  passwd (注7:没有编号)
                                      (注10:用双引号””也可以)
        # cat -n passwd |sed -n  '3p;5p;10p'  显示不连续的3,5,10行的内容    (这样写显示行号)
        # cat -n passwd |sed -n  '3,10p' 显示第3行到第10行的内容,中间是连续的

        # cat -n passwd |sed  '3,10p'(注8:sed后不接-n的话,会显示所有的行[包括不符合要求的行],只不过3到10行输出两遍,所有一定要接-n)

总结:sed  1.显示连续的  2.显示不连续的

十三. grep

//        grep 文本过滤 (过滤的是文件,不是文件夹目录)
        grep  “root”  /etc/passwd 包含root的行
        grep  “^liang”  /etc/passwd 以liang开头的行
        grep  “bash$”  /etc/passwd 以bash结尾的行
        Ctrl + c 终止
//        文本处理三剑客 sed  grep  awk

十四. which

which  查找可执行文件并显示所在的位置
        搜索范围由PATH环境变量指定
    # which  mkdir
    /usr/bin/mkdir
    # cd /usr/bin/
    # ll mkdir
    -rwxr-xr-x. 1 root root 195192 4月  10 02:53 mkdir

    rwxr-xr-x 权限
    r  读  read   --》cat  vim
    w  写  write  --》 vim   >>
    x  执行 execute   ---》运行

    # ll first_shell.sh
    -rw-r--r--. 1 root root…… (注1:脚本无可执行权限)
    # bash  first_shell.sh  (注2:用bash去执行它)
    # chmod  +x  first_shell.sh  (注3:给它可执行权限)
    -rwxr-xr-x.  root root……  (注4:有可执行权限了)
    # ./first_shell.sh  (注5:直接执行,直接在当前终端执行,当前bash执行)
    # /lianxi/first_shell.sh  (注6:接绝对路径,接文件,直接执行)
    # chmod  -x  first_shell.sh  (注7:取消可执行权限)
    # /lianxi/first_shell.sh 
    -bash: /lianxi/first_shell.sh: 权限不够  (取消可执行权限后不能直接执行)

whereis

//        whereis 查找命令放到哪里(注1:跟which很像)(注2:没什么用,man手册在哪里不是很重要)
        # whereis  mkdir
        mkdir:  /usr/bin/mkdir  /usr/share/man/man1/mkdir.1.gz
                                (注2:压缩文件,是它的文档)
        1.查看命令安放路径
        2.该命令man手册的路径(man的时候看的内容的存放路径)
    //whereis和which的区别
        Which不显示man手册的路径,whereis显示man手册的路径
        # whereis  mkdir
        mkdir:  /usr/bin/mkdir  /usr/share/man/man1/mkdir.1.gz
        # which  mkidr
        /usr/bin/mkdir
    //whereis和which 都是到PATH变量里去找的 (共同点)

十五. PATH

//PATH是路径
which命令在查找命令的时候,会到PATH变量指定的路径下查找
# which fengdeyong
/usr/bin/which: no fengdeyong in (/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/root/bin)
(备注1:红色为路径  备注2:多个文件夹用:冒号隔开)
# echo $PATH  (注3:$PATH 引用PATH变量)
/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/root/bin
查找的顺序是从左往右找,如果在第1个里面找到了,就不会往后面找,以此类推

深入理解 PATH 变量的作用

1.编写一个schello.c的文件

# vim schello.c (注1:编写脚本如下)
#include<stdio.h>
int main(){
    printf("hello,world\n"); (注2:\n 换行)
    printf("i am cali\n");
    return 0;
}
# file schello.c 
schello.c: C source, ASCII text (注3:C语言文件,文本文件,机器不能识别)

2.编译成二进制程序文件

gcc 是linux里的一个编译器,将c源码文件编译成二进制文件

image-20220313140253260

gcc 是linux里的一个编译器,将c源码文件编译成二进制文件

# yum  install  gcc -y
# gcc  -o  schello  schello.c  (注1:-o  输出一个二进制文件)(注2:编译schello.c的命令)
# ls        (↑↑注3:schello产生的文件,schello原来文件)
schello  schello.c (注2:生成绿色可执行权限的文件 schello)
# ll
总用量 20
-rwxr-xr-x. 1 root root 12744 9月  18 15:12 schello
-rw-r--r--. 1 root root    93 9月  18 15:08 schello.c
# ./schello        (注4:./ 运行)
# /lianxi/sc/schello  (注5:绝对路径运行,./相对路径或绝对路径都可以运行)
# schello 不能运行 (注6:linux不知道schello放在哪里,它只会到PATH变量里去找)
-bash: schello:未找到命令 (注7:PATH变量没有当前所在路径,没有/lianxi/sc)
(解决如下)

要让 Linux 系统知道我们的命令在哪里?

1.适应PATH变量,将我们的命令复制到PATH变量已有的路径下
# echo $PATH
/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/root/bin
# cp  schello  /usr/local/bin/
# schello (注1:成功运行)
hello,world
i am cali
# which schello
/usr/local/bin/schello (注2:复制到PATH变量的路径下后bash可以找到schello)
2.修改PATH变量,添加我们自己的命令所在的路径
①临时修改PATH变量
# PATH=/lianxi/sc:$PATH   临时修改PATH变量
(注3:先引用PATH变量的值,在和/lianxi/sc:字符串拼凑在一起再赋值给PATH变量)
(注3:$PATH——》/lianxi/sc:+$PATH重新组合——》赋值PATH变量  从右到左)
# echo $PATH
/lianxi/sc:/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/root/bin
(注4:新的PATH变量,前面多了/lianxi/sc:)
[root@sanchuang-linux sc]# which schello(注5:which 可以找到)
/lianxi/sc/schello
# schello (注6:bash可以运行)
hello,world
i am cali
②永久有效
修改文件,添加PATH变量,让它永久生效
# vim  /root/.bashrc  
    .bashrc这个文件是linux系统开机启动或者用户登录都会运行这个文件里的命令,所以才会永久有效
PATH=/lianxi/sc:$PATH (注1:打进去,放到最后一行)
//        mkdir 用C写的

//        # yum  install  python3  -y   安装python3软件
        # python3 (注1:进入Python3解释器)
        >>> a = 10 (注2:提示符>>>)
        >>> b = 20 (注4:Python不需要编译,Python代码直接运行,用Python解释器去解释)
        >>> sg = "tangliangfei"
        >>> c = a  + b
        >>> c
        30
        >>> print(sg) (注3:输出)
        tangliangfei
        >>> exit() (注5:exit()退出出 exit()是exit函数)
//扩展
.py结尾的文件,是python程序文件
.sh结尾,shell脚本
.c结尾,c语言
# vim  sc_py_hello.py
#!/usr/bin/python3 (注1:which python3——》/usr/bin/python3)
                   (注2:申明脚本是Python脚本,里面的命令用Python3解释器去解释)
username = input("please input your name:")(注3:引号里面只是提示符,提示输什么)
                   (注4:input()函数会接收你输入的东西,赋值给username)
age = input("please input your age:")

print(f"your name is {username} ,your age is {age}")(注5:print(f ) 语法)
                   (注6:{username}{age} 引用变量的值)

# ls
schello  schello.c  sc_py_hello.py
# python3  sc_py_hello.py (注7:直接执行Python3,类似于bash  a.sh)
please input your name:cali
please input your age:18
your name is cali ,your age is 18
[root@sanchuang-linux sc]# cat sc_py_hello.py 
 
# /lianxi/sc/sc_py_hello.py (注1:不能直接运行,如下 权限不够,pwd查看路径)
-bash: /lianxi/sc/sc_py_hello.py: 权限不够
# chmod +x sc_py_hello.py (注2:给它可执行权限)
# /lianxi/sc/sc_py_hello.py (注3:可以直接执行了)
please input your name:wangtc
please input your age:18
your name is wangtc ,your age is 18

//怎样让sc_py_hello.py 在PATH变量里运行
    # which  sc_py_hello.py (注1:能运行,因为之前在PATH变量里已经添加这个路径了(/lianxi/sc))
    # sc_py_hello.py (注2:能运行,因为之前在PATH变量里已经添加这个路径了(/lianxi/sc))
    # echo  $PATH
    /lianxi/sc:/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/root/bin
  总结:跟是用什么语言写的关系不大
        1.把它放到PATH变量所在的路径里面,并2.给它可执行权限 就能直接运行
    # chmod  -x  sc_py_hello.py (注3:取消可执行权限)
    # sc_py_hello.py  (注4:不给它可执行权限,路径放在PATH变量所在的路径下,也不能直接执行)
    -bash:  /lianxi/sc/sc_py_hello.py: 权限不够
  总结:写的Python程序,一定要1.给它可执行权限,并2.把它放到PATH变量所在路径下面,不然不能执行
    //扩展  (注2:总结:文件名字很长,想敲个短一点的命令,考虑用别名 [快捷键])
    # alias sc_py_hello=sc_py_hello.py   定义别名,可以缩短命令的长度
    # sc_py_hello(注1:不想输这么长,可以使用别名,别名可以用来偷懒)
    please input your name:feng (运行成功,条件是在PATH变量路径下和可执行权限,如上面的操作)
    please input your age:19
    your name is feng ,your age is 19
    # which sc_py_hello
    alias sc_py_hello='sc_py_hello.py'
        /lianxi/sc/sc_py_hello.py

十六. bash

    //bash 是linux非常好的shell解析器 (注1:2件事要做)
        1.查找命令 --》PATH变量的路径下
        2.告诉内核去启动命令(运行这个命令)

十七. /usr

// /usr  存放linux程序的目录   unix  system  resource 
    /usr/bin  存放二进制程序,所有的用户都可以使用  binary
    /usr/sbin   存放二进制程序,有比较高的权限(root)的用户执行的程序  super user binary
        # which  useradd(注1:查找useradd命令路径)
        /usr/sbin/useradd (注2:存放在sbin目录下)
        # su  -  xulilin (注3:切换为普通用户)
        $ which  useradd
        $ /usr/sbin/useradd
        $ useradd  xu123 (注4:普通用户不能执行sbin/下高级别命令)
        ……报错useradd:Permission denied (注5:权限被拒绝)

十八. locate

//        locate 知识点(注4:需要安装)(注5经常需要更新# updatedb)
# yum provides locate -y  查询locate是哪个软件包提供的(注1:新知识点)
mlocate-0.26-20.el8.x86_64 : An utility for finding files by name
(注3:yum  provides …… -y 查询某命令是哪个软件包提供的)
(注2:从结果知道 mlocate提供locate命令)
# yum install  mlocate -y 安装mlocate软件
locate命令
格式:locate 文件名
(注5:locate是到自己的数据库查找的,能具体到/下面,且必须更新自己的数据库)
根据每天更新的数据库(/var/lib/mlocate)查找,速度块
    /var/lib/mlocate/mlocate.db
    database  数据库(注6:db的解释)
数据库里的内容还是根据/目录下的内容生成
每天会自动更新数据库    /var/lib/mlocate/mlocate.db
手动更新数据库updatedb
# updatedb   生成和更新数据库mlocate.db (注1:手动更新)
# cd /var/lib/mlocate/
# ls
mlocate.db
# locate mkdir(注2:将linux系统里面文件名里面包含了mkdir的文件全部找出来)
/usr/bin/mkdir
/usr/lib/python3.6/site-packages/pip/_vendor/lockfile/mkdirlockfile.py
/usr/lib/python3.6/site-packages/pip/_vendor/lockfile/__pycache__/mkdirlockfile.cpython-36.opt-1.pyc
/usr/lib/python3.6/site-packages/pip/_vendor/lockfile/__pycache__/mkdirlockfile.cpython-36.pyc
/usr/share/man/man1/mkdir.1.gz
# which mkdir(注3:只是找到/usr下的mkdir,其他地方的mkdir没找出来)
/usr/bin/mkdir
locate查找的范围:
    /--》mlocate.db里去查找(注2:在 根下面自己的数据库mlocate.db下面去查找)
    方式:模糊查找,文件名里包含就可以
    缺点:新的文件,有时候找不到,因为没有更新数据库   --》updatedb(注3:手动更新)
    可以查找任何文件(注4:新建的文件,# updatedb手动更新数据库,否则找不到)
which 查找的范围:PATH变量
    方式:精确查找(注1:文件名必须一模一样)
    只能查找命令

which、whereis、locate、find

//        which、whereis、locate、find 命令查找类
        Which、whereis  只能找命令
        loacte  也可以查找普通文件、可以查找任何文件

十九. find

//* find命令

         格式:find  [查找范围]  [查找条件] [动作]


    find 可以找1.命令、2.文件 (即任何文件)

 (注1:融合了which、whereis、locate所有功能)

find命令

用途:用于查找文件或目录

格式:find  [查找范围]  [查找条件] [动作]

常用查找条件

==-name==:按文件名称查找

==-iname==:按文件名称查找,不区分大小写

==-size==:  按文件大小查找

-user:  按文件属主查找

==-type==:  按文件类型查找

-perm :按文件权限查找

==-mtime== :按文件更改时间查找

-newer:按比某个文件更新的查找
-name和-iname
    # find /lianxi  -name "lixh.txt"(注1:精确查找,-name根据文件名来)
    /lianxi/lixh.txt
    # find  / -name  "schello"(注2:精确查找,可以/下查找)
    /lianxi/sc/schello
    # find  / -name  "schello*"(注3:*模糊查找,可以/下查找)
    /lianxi/sc/schello.c
    /lianxi/sc/schello
    # find  / -name  "li*.txt"(注4:*模糊查找)
    # find  / -iname  "lixh.txt" (注5:-iname 查找的文件名不区分大小写)
    /lianxi/lixh.txt
    /lianxi/LIXH.TXT
-size (大小)
    # ll  -h  看文件夹下的每个文件的大小
    # du  -a 查看文件夹下的每个文件的大小(单位KB)
     du  -ah  查看文件夹下的每个文件的大小 (单位K、M、G)
    # find  /boot  -size  +1M(注1:+1M 大于1M的 全部找出来)(注2:-1M、1M:小于1M,等于1M)
    /boot/grub2/fonts/unicode.pf2  (注3:查找的结果不是特别精准)
    /boot/initramfs-4.18.0-193.el8.x86_64kdump.img
    /boot/initramfs-4.18.0-193.el8.x86_64.img
-type (类型)
    # find  .  -type  d (注1:查找目录)
    # find  .  -type  f (注2:查找普通文件)
    # find  .  -type  l (注3:链接文件)
    # find  .  -type  c (注4:字符设备文件)
    # find  .  -type  b (注5:块设备文件)
    # find  .  -type  p (注6:管道文件)
    # find  .  -type  s (注7:socket文件)(进程与进程通信的文件)
-mtime (以24小时为单位) 按文件更改时间查找
-mmin  (以分钟为单位)
    # find  .  -time  +1  1天以前
    # find  .  -time  -1  1天以内
    # find  .  -mmin  -30  30分钟以内
    # find  .  -mmin  +30  30分钟以前
-user (属于哪个用户创建的文件)(用处不大)
    # find  .  -user  root
    # find  /  -user  cali
-newer (比指定文件更新的文件,后建的文件)
    # find  .  -newer  feng.txt
//    特殊查找条件
-o :逻辑或,只要所给的条件中有一个满足,寻找条件就算满足 or
-not :逻辑非,在命令中可用“!”表示。该运算符表示查找不满足所给条件的文件
-a:逻辑与,系统默认是与,可不加,表示只有当所给的条件都满足时,寻找条件才算满and

  find  /boot -size +1024k  -a -name “vmlinuz*”(注1:逻辑与 -a可不加,系统默认逻辑与)
  find  /boot -size +1024k  -o -name “vmlinuz*”
  find  .  -user nie  -type f   -size  +1k  -o  -name  "vmlinuz*" 
  find  .  -user nie  -type f  \( -size +1k -o -name "vmlinuz*" \)  (注3:()改变了优先级,\解释在下方)(注5:\(  \)即()  改变了优先级)
  find   /home  !-user  hello  -exec  ls  -ld  {}  \;
\  转义字符 (注2:因为小括号()有特殊作用,接上/以后让它表示只是小括号)
默认情况下-a的优先级高,先执行逻辑与(-a),再执行逻辑或(-o)
# find  / -iname "*.conf"  -size +1k  -type f  -user root -o -size +10M
(注4:前面先组合成一个条件,要么满足-o前面的,要么满足-o后面的条件)
//    扩展,接上面的命令 -exec 和 -ok
      # find  /lianxi  -name  "li*.txt"  -exec  rm -rf  {}  \;(注1:前面是查找,-exec表示要执行的动作)相关解释如下
    -exec  执行后面的命令
    rm -rf  具体删除命令
    {} 代表前面的find查找出来的内容,理解为一个容器存放前面find查找到的内容
    \; 表示find命令结束符号
    # find /lianxi -name "*.txt"  -size +1k  -type f  -exec cp {} /fengdeyong \;
    (注2:文件名.txt结尾的,大小大于1k的,文件,拷贝到fengdeyong里面)
    (注3:find 找/lianxi 下的每一层)
    -ok
    -ok 让你确认一下,再执行
    # find . -name "*wang*" -ok rm -rf {} \;
    < rm ... ./wangtc.txt > ? y
    < rm ... ./tang_wang.txt > ? y

总结:-exec执行命令,不给与确认(写脚本常用,方便)
     -ok 执行命令,需要确认
-maxdepth  查找文件时,目录的深度
    # find  .  -name  bb
    ./aa/bb
    ./aa/bb/bb
    ./bb
    # find  .  -maxdepth  1  -name  bb(注2:只挖1级)
    ./bb
    # find  .  -maxdepth  2  -name  bb(注3:只挖2级)
    ./aa/bb
    ./bb
    # find  .  -maxdepth  3  -name  bb(注4:只挖3级)
    ./aa/bb
    ./aa/bb/bb
    ./bb
    (注1:不接-maxdepth的话,有多少层挖多少层)
    # find /lianxi  -name  "*.txt"
    (注6:不接-maxdepth,东西太多了,挖的太深了)
    /lianxi/tangliangfei.txt
    /lianxi/chenpeng.txt
    /lianxi/cali.txt
    /lianxi/feng.txt
    /lianxi/aa/bb/feng.txt
    /lianxi/aa/feng.txt
    # find /lianxi -maxdepth 1 -name  "*.txt"
    (注5:这种情况用的多,只想找1层的,只挖/lianxi下面的,子文件夹、子子文件夹下面都不要)
    /lianxi/tangliangfei.txt(注7:显示如下)
    /lianxi/chenpeng.txt
    /lianxi/cali.txt
    /lianxi/feng.txt
//        !取反 的使用,接上面的命令(注1:lianxi下面的不是*.txt的)
    # find  /lianxi  -maxdepth  1  !  -name  "*.txt"(只对后面的条件取反)
    /lianxi
    /lianxi/passwd
    /lianxi/first_shell.sh
    /lianxi/messages
    /lianxi/sc
    /lianxi/LIXH.TXT
    /lianxi/aa
    /lianxi/bb

相关实践学习
日志服务之使用Nginx模式采集日志
本文介绍如何通过日志服务控制台创建Nginx模式的Logtail配置快速采集Nginx日志并进行多维度分析。
目录
相关文章
|
2月前
|
Shell Linux
Linux shell编程学习笔记30:打造彩色的选项菜单
Linux shell编程学习笔记30:打造彩色的选项菜单
|
1月前
|
Web App开发 网络协议 Linux
linux命令总结(centos):shell常用命令汇总,平时用不到,用到就懵逼忘了,于是专门写了这篇论文,【便持续更新】
这篇文章是关于Linux命令的总结,涵盖了从基础操作到网络配置等多个方面的命令及其使用方法。
62 1
linux命令总结(centos):shell常用命令汇总,平时用不到,用到就懵逼忘了,于是专门写了这篇论文,【便持续更新】
|
18天前
|
运维 监控 Shell
深入理解Linux系统下的Shell脚本编程
【10月更文挑战第24天】本文将深入浅出地介绍Linux系统中Shell脚本的基础知识和实用技巧,帮助读者从零开始学习编写Shell脚本。通过本文的学习,你将能够掌握Shell脚本的基本语法、变量使用、流程控制以及函数定义等核心概念,并学会如何将这些知识应用于实际问题解决中。文章还将展示几个实用的Shell脚本例子,以加深对知识点的理解和应用。无论你是运维人员还是软件开发者,这篇文章都将为你提供强大的Linux自动化工具。
|
2月前
|
Shell Linux
Linux shell编程学习笔记82:w命令——一览无余
Linux shell编程学习笔记82:w命令——一览无余
|
2月前
|
Oracle Java 关系型数据库
Linux下JDK环境的配置及 bash: /usr/local/java/bin/java: cannot execute binary file: exec format error问题的解决
如果遇到"exec format error"问题,文章建议先检查Linux操作系统是32位还是64位,并确保安装了与系统匹配的JDK版本。如果系统是64位的,但出现了错误,可能是因为下载了错误的JDK版本。文章提供了一个链接,指向Oracle官网上的JDK 17 Linux版本下载页面,并附有截图说明。
Linux下JDK环境的配置及 bash: /usr/local/java/bin/java: cannot execute binary file: exec format error问题的解决
|
2月前
|
人工智能 监控 Shell
常用的 55 个 Linux Shell 脚本(包括基础案例、文件操作、实用工具、图形化、sed、gawk)
这篇文章提供了55个常用的Linux Shell脚本实例,涵盖基础案例、文件操作、实用工具、图形化界面及sed、gawk的使用。
424 2
|
1月前
|
存储 Shell Linux
【Linux】shell基础,shell脚本
Shell脚本是Linux系统管理和自动化任务的重要工具,掌握其基础及进阶用法能显著提升工作效率。从简单的命令序列到复杂的逻辑控制和功能封装,Shell脚本展现了强大的灵活性和实用性。不断实践和探索,将使您更加熟练地运用Shell脚本解决各种实际问题
23 0
|
2月前
|
Shell Linux 开发工具
linux shell 脚本调试技巧
【9月更文挑战第3天】在Linux中调试shell脚本可采用多种技巧:使用`-x`选项显示每行命令及变量扩展情况;通过`read`或`trap`设置断点;利用`echo`检查变量值,`set`显示所有变量;检查退出状态码 `$?` 进行错误处理;使用`bashdb`等调试工具实现更复杂调试功能。
|
3月前
|
JavaScript 关系型数据库 Shell
Linux shell编写技巧之随机取字符串(一)
本文介绍了Linux Shell脚本的编写技巧,包括环境配置、变量命名规则和缩进语法,并提供了一个实例练习,展示如何使用`$RANDOM`变量和`md5sum`命令来生成随机的8位字符串。
54 4
|
3月前
|
Unix Shell Linux
在Linux中,什么是 BASH?
在Linux中,什么是 BASH?