鸟哥的linux私房菜学习笔记《二十三》通配符、重定向、管道等bash用法

    xiaoxiao2021-03-25  109

    通配符:

    *:任意个字符 ?:任意单个字符 []:其中任意个 [-]:顺序某段 [^]:非其中任何一个 # 显示以cron开头的文件名 [root@CentOS ~]# ll /etc/cron* # 显示/etc/下的刚好是5个字母的文件名 [root@CentOS ~]# ll /etc/????? # 显示/etc/下含有数字的文件名 [root@CentOS ~]# ll /etc/*[0-9]* # 显示/etc/下开头非为小写字母的文件名 [root@CentOS ~]# ll /etc/[^a-z]* # 复制/etc/下开头非为小写字母的文件到/tmp中 [root@CentOS ~]# cp -a /etc/[^a-z]* /tmp

    bash中的特殊符号:

    重定向

    标准输入:代码为0,使用<<< 标准输出:代码为1,使用>或>> 标准错误输出:代码为2,使用后2>或2>> >:会覆盖原文件 >>:在源文件后追加 1>:将正确结果覆盖指定文件 1>>:将正确结果追加在指定文件后面 2>:将错误结果覆盖指定文件 2>>:将错误结果追加指定文件 <:由文件导入 <<:结束的关键词,到此输入结束 # 将stdout与stderr分别存到不同文件 [root@CentOS ~]# find /home -name .bashrc > list_right 2> list_error # 将错误信息丢弃,屏幕显示正确结果 [root@CentOS ~]# find /home -name .bashrc 2> /dev/null # 将命令的全部结果写入list文件(以下两种都可以) [root@CentOS ~]# find /home -name .bashrc > list 2>&1 [root@CentOS ~]# find /home -name .bashrc &> list [root@CentOS ~]# cat > catfile < ~/.bashrc [root@CentOS ~]# ll catfile ~/.bashrc -rw-r--r--. 1 root root 176 39 09:24 catfile -rw-r--r--. 1 root root 176 922 2004 /root/.bashrc # 两个文件一样 # <<"。。。"指定结束标志: [root@CentOS ~]# cat > catfile << "eof" > this is a test > OK noe stop > eof [root@CentOS ~]# tee:双向重定向 流向文件并且屏幕输出 参数: -a:以累加方式将数据加入文件 last:该命令用来列出目前与过去登录系统的用户相关信息。 # 将last输出一份到test.list: [root@CentOS ~]# last | tee last.list |cut -d " " -f1 # 将ls的数据存一份到~/homefile,同时屏幕也有输出信息 [root@CentOS ~]# last | tee ~/.homefile | more # tee后街的文件会被覆盖,加上-a可以将信息累加 [root@CentOS ~]# last | tee -a ~/.homefile | more &&,||命令执行判断依据: cmd1 && cmd2:并且关系,一假则假,前面正确后面才执行 cmd1 || cmd2:或者关系,一真则真,前面错误后面才执行 cmd1 && cmd2 || cmd3:cmd1正确执行cmd2,cmd1错误执行cmd3

    cut选取命令 参数: -d:后接分隔符,用于分段 -f:根据-d分的段,选取第几段 -c:以字符的单位取出固定字符区间

    # 以: 为分隔,显示第五段 [root@CentOS ~]# echo $PATH | cut -d ':' -f 5 # 以: 为分隔,显示3和5段 [root@CentOS ~]# echo $PATH | cut -d ':' -f 3,5 # 将export的信息去第12字符以后的 [root@CentOS ~]# export declare -x CVS_RSH="ssh" declare -x USER="kevin" declare -x USERNAME="kevin" declare -x WINDOWID="52428804" declare -x WINDOWPATH="1" [root@CentOS ~]# export | cut-c 12- CVS_RSH="ssh" USER="kevin" USERNAME="kevin" WINDOWID="52428804" WINDOWPATH="1"

    grep:选取命令 参数: -a:将binary文件以text文件的方式查找数据 -c:计算找到‘查找字符串’的次数 -i:忽略大小写 -n:顺便输出行号 -v:反向选择 –color=auto:将找到的关键字显示颜色

    # 将last中出现root的那一行显示出来 [root@CentOS ~]# last | grep 'root' # 将last中未出现root的那部分显示 [root@CentOS ~]# last | grep -v 'root' # 将last输出信息中,只要有root就取出,并且显示一列 [root@CentOS ~]# last | grep 'root' | cut -d ' ' -f1 # 取出/etc/man.config内含MANPATH的那几行 grep --color=auto 'MANPATH' /etc/man.config

    sort、uniq、wc:排序命令 last:该命令用来列出目前与过去登录系统的用户相关信息 1 . sort

    # 利用last将输出的数据仅取账号,并加以排序 [root@CentOS ~]# last | cut -d ' ' -f1 | sort

    2 . uniq:用于将重复的行删掉只显示一个 参数: -i:忽略大小写 -c:进行计数

    # 使用last将账号列出,仅取账号列,进行排序后仅取出一位 [root@CentOS ~]# last | cut -d ' ' -f1 | sort | uniq # 使用last将账号列出,仅取账号列,进行排序后仅取出一位,并想知道每个人登录的次数 [root@CentOS ~]# last | cut -d ' ' -f1 | sort | uniq -c

    3 . wc:计算输出信息的整体数据 参数: -l:仅列出行 -w:仅列出字数 -m:仅列出字符数

    # 统计/etc/man.config里面到底有多少字、行、字符数 [root@CentOS ~]# cat/etc/man.config | wc # 这个月登录系统的总人数 [root@CentOS ~]# ;last | grep [a-zA-Z] | grep -v 'wtmp' | wc -l # 要知道账号文件中有多少账号: [root@CentOS ~]# cat /etc/passwd | wc -l

    字符转换 1 . tr:文字替换 参数: -d:删除当中的某个字符串 -s:替换字符串

    # 将/erc/passwd文件中的:删除 [root@CentOS ~]# cat /etc/passwd | tr -d ' ' # 删除DOS文件中的断行字符(^M可以用\r代替) [root@CentOS ~]# cat /root/passwd | tr -d '\r' > /root/passwd/linux

    2 . col:tab键转空格 参数: -x:将tab键转成空格键

    #将tab转成空格键 [root@CentOS ~]# cat /etc/man.config | col -x cat -A | more

    3 . join:处理两个文件间的数据 参数: -t:默认空格作为分隔符,并且对比第一个字段 -i:忽略大小写 -1:第一个文件用哪个字段来分析 -2:第二个文件用哪个字段来分析

    # 用root身份,将/etc/passwd与/etc/shadow相关数据整合成一份 [root@CentOS ~]# head -n 3 /etc/passwd /etc/shadow [root@CentOS ~]# join -t ':' /etc/passwd /etc/shadow # 整合/etc/passwd第四个字段的GID和是/etc/groupw的第三个字段,整合两个文件 [root@CentOS ~]# head -n 3 /etc/passwd /etc/group [root@CentOS ~]# join -t ':' -1 4 /etc/passwd -2 3 /etc/group

    4 . paste:将两行贴在一起 参数: -d:后接分隔符,默认tab键 -:如果filename写成-,表示标准输入

    # 将/etc/passwd与/etc/shadow的同一行粘贴在一起 [root@CentOS ~]# paste /etc/passwd /etc/shadow # 先将/etc/group读出。然后与上题粘贴在一起,且仅取出第三行 [root@CentOS ~]# cat /etc/group | paste /etc/passwd /etc/shadow - | head -n 3

    5 . expand:将tab键转成空格 参数: -t:后面接数字,一个tab键代表8个空格,我们也可以自定义一个tab键代表多少个空格

    # 将/etc/man.config内行首为MANPATH的字样取出,仅取前三行 [root@CentOS ~]# grep '^MANPATH' /etc/man.config | head -n 3 # 承上题,将所有的符号都列出来 [root@CentOS ~]# grep '^MANPATH' /etc/man.config | head -n 3 | cat -A # 承上题,将tab键设成6个字符 [root@CentOS ~]# grep '^MANPATH' /etc/man.config | head -n 3 | expand -t 6 - | cat -A

    split:切割命令 参数: -b:切割的文件大小 -l:以行数来切割

    # 我的/etc/passswd有700多KB,若想要分成300KB一个文件时 [root@CentOS ~]# split -b 300k /etc/termcap termcap # 将三个文件合并成一个文件 [root@CentOS ~]# cat termcap* >> termcap # 使用ls -al输出信息,每十行记录一个文件 [root@CentOS ~]# ls -al / | split -l 10 - lsroot [root@CentOS ~]# wc -l lsrootxargs:参数代换 参数:
    转载请注明原文地址: https://ju.6miu.com/read-16755.html

    最新回复(0)