来自 澳门金莎娱乐手机版 2019-12-23 06:55 的文章
当前位置: 金沙澳门官网网址 > 澳门金莎娱乐手机版 > 正文

shell_advanced,advancedbashshell

shell_advanced,advancedbashshell

1、輸入輸出,重定向,管道 2、<(cmd卡塔尔(قطر‎;>(cmd卡塔尔(قطر‎3、>;<;>>;<<;>>>;<<< 4、文本管理_澳门金莎娱乐手机版 ,1:cat;head;tail;cut;wc;sort;uniq;tr;tac;rev     后生可畏、輸入輸出,重定向,管道 1、Linux 程序有多个规范的输入输出,分别是: 标准输入,用数字0表示,暗中认可连接到键盘,程序平常用来获得顾客的输入 规范输出,用数字1象征,暗许连接到显示屏,程序经常用来输出音讯标准错误,用数字2代表,默许连接到显示器,程序常常用来输出错误音信 拆解解析: 命令 passwd 从职业输入读取客户密码,所以顾客能够用键盘输入密码 命令 echo 把结果输出到正规输出,所以能够在荧屏上观望结果 普通客商未有权限查看/root 目录,所以出错,于是 ls 把错误消息输出到专门的学问错误,也便是显示器 2、> 与 >> > 删除原本数据,写入新数据 >> 将新数据追加到原本数据今后 3、/dev/null 俗称:果壳箱文件 # echo hello world > /dev/null --重定向到该公文的多寡都被基本放任了,能够用那几个特点来掩瞒某个输出音讯 # ls / /root 2> /dev/null --屏蔽掉命令的失误音讯 4、输出重定向 客商能够依靠必要,把暗中认可的输入输出的趋向扩充改换 # ls -l > test # ls -l 1> test --两条都是职业输出重定向到 test 文件,即私下认可1可省略 # ls /jjjj 2> test --将正式错误重定向到 test 文件 # ls / /jjjj 1> stdout 2> stderr --将行业内部输出与正统错误分别重定向到多个例外的文件中 # ls /jjjj / > std 2>&1 --将正式错误合併到正规输出,一视同仁定向到四个文书个中 # ls /jjjj / &> std --结果与上条语句等价,尤其简洁 # ls /jjjj / &>> std --也是将行业内部输出与正式错误重定向追加到二个文本 5、标准输入重定向   # cat 0< /etc/passwd   # cat < /etc/passwd   # cat /etc/passwd --cat命令的正统输入来源于文件 /etc/passwd 中 6、管道 下面所陈说的重定向,是把正规化的输入输出连接到文件。大家也能够把七个程序之间的科公输子入输出实行三番两次,完结命令之间数据的传递,这种技巧被形象地称做管道,程序的出口犹如流水在管道中流通同样,从最左侧的前后相继流到最左边的主次。管道是linux shell 里非常常见的本事,利用管道才干可以达到规定的标准至极使用八个小工具,实现特别复杂而苍劲的功用。 # cat /etc/passwd | head -n 3 --左侧的通令的正经八百输出作为侧面的授命的正规化输入 # cat /etc/passwd | head -n 3 | tail -n 1 7、典型输入输出的浓烈斟酌 标准的输入输出是Linux 默以为程序创造好的多少个文本描述符,纵然许多的程序都会采取这四个文件呈报符来作为友好的输入输出,可是那决不是免强性的,也正是说,程序能够不选拔那八个专门的学问的公文描述符,而是本身展开新的文件陈诉符来使用。当程序不应用标准的输入输出时,这里所运用的重定向对其也就不起作用了。比方: passwd: 程序从标准输入读取顾客密码,由此大家能够通过重定向标准输入来向它提供密码 ssh: 命令是用以远程登录的次序,它读取顾客输入的密码时,使用的不是正式输入,因而大家不能够因此重定向标准输入来向它提供密码 8、验证进程的正式输入输出所连接的文书 # sleep 999 1> /tmp/good 2>&1 --在二个终极运营命令 # pgrep -x sleep --在其余一个极限,搜索sleep 的进程ID # lsof -anop 16715 -d 0,1,2 --查看该进度所张开的公文 9、验证重定向产生的时机 # vim file # cat -n file > file --期望cat 会在每风度翩翩行前边加上行号,然后把结果重定向保存回原本的文书file 中 # cat file --为空了 原因:shell 实施命令早前,会先实行重定向操作,在第 2 条命令中,西施行 > file,那一个重定向操作会把文件file 的内容清空。当重定向操作把file 文件清空之后,再cat 该文件,自然就看不到任何内容了 $ sudo ls /root > /root/ls.log --该例子中,客户并未有时机输入密码,因为重定向操作先推行,当前客户是普通客户,不恐怕在路子/root/ls.log 中创制文件,shell 出错并脱离:bash: /root/ls.log: Permission denied。当时还并未有执行命令sudo,所以也就不曾时机输入密码   二、<(cmd卡塔尔;>(cmd卡塔尔国 1、<(cmd卡塔尔 用进程置换的方式重定向规范输入 2、>(cmd卡塔尔国 用进度置换的法子重定向标准输出 3、进度置换 进度的正经输出存到三个有时文件中,再次回到不常文件的门径 <(卡塔尔(قطر‎,当须要利用程序的出口,可是又不想生成叁个中级文件时,能够构思采纳进程置换 # paste <(seq $(wc -l /etc/passwd | cut -d" " -f1)) <(awk -F: '{print $1}' /etc/passwd) # paste <(seq 26卡塔尔 <(awk -F: '{print $1}' /etc/passwd卡塔尔(英语:State of Qatar) --可将该两条命令进行对照   三、>;<;>>;<<;>>>;<<< 1、> --输出重定向,创造(存在则覆盖) # echo 'hello world' > test -- 一纸空文 test 则开创,存在则覆盖里面内容 2、< --输入重定向,来源于文件 # less < /etc/passwd --将 /etc/passwd 里面的剧情输入到工具 less # cat < <(ls /卡塔尔国 --这里运用到命令置换 # wc -l < $(echo /etc/passwd) # wc -l < <(cat /etc/passwd卡塔尔国 --这里运用到进程置换 3、>> --重定向到文件,创制(存在则加多到文件末尾) # echo 'hello george' >> george -- 空头支票 george 则开创,存在则扩充内容至文件末尾 4、<< --重定向,用于Here document 4.1、Here Document 是在Linux Shell 中的风姿洒脱种特殊的重定向格局,它的主导的款式如下: cmd << delimiter Here Document Content delimiter : << delimiter --shell批量注释 Here Document Content delimiter 成效:将五个 delimiter 之间的内容(Here Document Content卡塔尔 传递给 cmd 作为输入参数 4.2、终端 # cat << EOF > one > two > three > EOF EOF --只是叁个标志而已,能够替换到任意的合法字符 > --那些标志是极限发生的唤醒输入音讯的标志符 delimiter -- 应当要顶格写,前边前面无法有任何字符,蕴含空格 4.3、shell # vim here.sh --注:还可在中间使用变量 #!/bin/bash cat << EOF > output.sh echo "hello" echo "world" echo $1 EOF # chmod a+x here.sh # ./here.sh george # cat output.sh --查看里面内容;在这里间 $1 被实行成为了剧本的参数 注意:若不想拓宽这几个变量,则需使用双引号将率先个 EOF 引起来。 4.4、<<- Here Document 还或然有二个用法就是将 '<<' 变为 '<<-'。 使用 <<- 的并世无两变化就是Here Document 的剧情部分每行前面包车型地铁 tab (制表符卡塔尔(英语:State of Qatar)将会被删除掉,这种用法是为了编写制定Here Document的时候可以将内容部分进行缩进,方便阅读代码 5、<<< --重定向,用于Here string # wc -l <<< "$(ls -l /home)" # while read x; do echo "hello";done <<< "$(seq 5)" # bc <<< "2 ^ 10" # vim string.sh #!/bin/bash while read line do if [ "${line#ftp:}" != "$line" ];then awk -F: '{print $6}' <<< $line break fi done < /etc/passwd 注释:循环读取/etc/passwd 文件中的每风流倜傥行,假若是ftp 客商,就打字与印刷出其家目录,并脱离循环 ${line#ftp:}:某行初阶相配到了 ftp: ;则只取该行未相配部分 # chmod a+x string.sh # ./string.sh   四、文本管理_1:cat;head;tail;cut;wc;sort;uniq;tr;tac;rev 文本管理是每一个系统管理员都会每每触发的职务,其宗旨内容是相关工具的行使,关键要点在于灵活地组合多个工具去做到职务1、cat --concatinate,把三个可能多少个文件的內容按順序連接起來,輸出到正式輸出 # cat -n /etc/passwd --呈现文件内容,并且拉长行号 # cat -A /etc/passwd --打字与印刷出一些不可知的字符和职位标识 # cat 1.txt 2.txt > test.txt --合併文件 2、head --读取文件底部 # head -n 3 /etc/passwd --读取文件/etc/passwd 的前方三行 # head -n -1 file --丢掉 file 的末尾大器晚成行 # head -c 3 /etc/passwd --读取文件/etc/passwd 的前头三個字节 # head -c -3 file --丢弃 file 的最后 3 个字节 # head -c 10m /dev/urandom > big --创设贰个10M的公文 3、tail --读取文件尾巴部分 # tail -n 3 /etc/passwd --读取文件 /etc/passwd 后边三行 # tail -n +28 /etc/passwd --从第28行开端读取,直到文件尾巴部分;吐弃尾部的27行 # tail -c 3 /etc/passwd --读取文件 /etc/passwd 的后面三個字节 # tail -c +28 /etc/passwd --从第28字节起头读取,直到文件尾巴部分;放弃底部的27字节 # tail -f /etc/passwd --追踪文件尾巴部分内容的浮动,常用來视察日志文件的变化化,极度实用 4、cut --功效看似于awk,不过从未awk那么刚劲和复杂,当要对数码做分列输出时,日常利用awk,用cut的时候非常的少常用选项: -d --定义分隔符 -b --输出钦点地点的字节(byte卡塔尔国 -c --输出钦命地点的字符(character卡塔尔 # echo "a;b;c d;e" | cut -d ";" -f1,3,4 -- -d 定义分隔符( 暗许是 TAB 卡塔尔国;-f 定义输出对应字段 # cat -n /etc/passwd | cut -d $'n' -f1,3-5,7 -- 使用换行符做分隔符 # echo 笔者是神州人 | cut -b1-3 -- -b 输出钦点地点的字节(byte卡塔尔(英语:State of Qatar);一个utf8 的汉语字占用3个字节 # echo 作者是中华夏儿女 | cut -c2-4 -- -c 输出内定地方的字符(character卡塔尔国;与-b 的分歧表现在管理非Slovak语字符时 # echo 做个英雄的中原人 | cut -b1-2,9 --会输出三个 ”假“ 字 # echo -n 做个英豪的中夏族民共和国人 | xxd --会开掘 1,2,9 那四个字节为:e581 87 # echo -n 假 | xxd --而 ”假“ 也是 5、wc --总结数据的字节数,字符数,单词数,行数 常用选项: -c --总结字节数 -m --计算字符数 -w --总结词数 -l --计算行数 # echo -n 作者是炎黄种人 | wc -c -- -c 总结字节数,5个utf第88中学文占14个字节 # echo -n 作者是神州人 | wc -m -- -m 总结字符数,与-c 的不一致表今后管理非乌Crane语字符时,近似于命令cut # echo -n 笔者是中夏族 | wc -w -- -w 计算词数,未有分开符分开,5个中文算三个词,这与粤语所谓的“词”是莫衷一是的 # echo -n Uppercase CHINESE | wc -w --两个词 # echo -n Uppercase CHINESE | wc -c --16个德文字节,未有 -n 就有21个(因为还应该有四个换行符) # echo -n Uppercase CHINESE | wc -m --拾两个日文字符,未有 -n 就有十多个(因为还会有二个换行符) # wc -l /etc/passwd -- -l 总结行数 6、sort --按行对文本实行排序 常用选项: -t --内定分割符 -k --钦赐排序的字段 -u --去除重复的行 -n, -h --依照数值排序 -r --反过来排序 # cut -d ":" -f7 /etc/passwd | sort -u -- -u 去除重复行 # echo -e "1n2n10" | sort # echo -e "1n2n10" | sort -n -- -n 按数值排序,无法管理K, M, G 等单位字符 # ls -lh | tail -n +2 | sort -k5,5n -- -k 钦命排序的字段 # ls -lh | tail -n +2 | sort -k5,5h -- -h 比照数值排序时,能管理K, M, G 等单位字符 # head -4 /etc/passwd | sort -t: -k7,7 -- -t 以冒号 : 作为字段分割符,按第7字段排序 # head -4 /etc/passwd | sort -t: -k7,7 -k3,3n --先按第7字段排序,若第7字段有近似的,则按第3字段排序 # echo -e "1n2n3" | sort -nr -- -r 对排序反转 # head -4 /etc/passwd | sort -t: -k7,7 -k3,3nr --至反转第3字段排序,也可同一时间对五个字段反转 7、uniq --去除三番若干次的重新行 常用选项: -c --总括重复行的数目 # echo -e "1n1n2n1" | uniq -- 结果中仍然有七个1,因为那四个1是不三番五次的 # echo -e "1n1n2n1" | sort -u -- sort 去除重复则毫不总是 # cut -d: -f7 /etc/passwd | sort | uniq -c -- 在sort命令例子的底蕴上,总括差异的报到shell现身的次数 8、tr --转变,删除,减少肖似字符 常用选项: -d --删除,删除相称到的有着字母 -s --减削,减少相近字符 格式: tr SET1 SET2 注意: 把群集1里面的字符调换到会集第22中学对应地点的字符,所以原则上多个聚众中的字符数目应该相通,可是,如果多个集聚中的字符数不等于,程序也不会出错,请细心这种处境下的结果。要点: a、 tr 不关切五个聚众中是如何字符,它只是轻便地把对应地方的字符各种做替换而已、 b、 tr 做的是单个字符的改动,不能够替换字符串 # echo abc | tr a-z A-Z --把二十六个小写字母调换来相呼应的大写字母 # echo abc | tr ab BA --把 a 和 b,分别转变为 B 和 A # echo 好人做好事 | tr 好 坏 -- “好” 调换为 “坏” # echo abcdefg | tr a-z AB --集结2异常的短,程序自动用集结第22中学最终八个字符来扩大集合2 # echo abcdefg | tr a-b A-Z --集合2较长,程序自动把集结2切短 # echo Abc | tr a-zA-Z A-Za-z --完毕德文字母大小反转 # echo hello world | tr -d ow -- -d 删除,相配到的有所字母 # echo 0123456789 | tr -d 13579 # tr -d '12' < /etc/passwd -- 删除文件/etc/passwd 中的换行符,tr 可用八进制表示两个字符 # echo aabbaacc | tr -s a -- -s,将各类连在一同的多少个 a 裁减至一个 # echo aabbaacc | tr -s a A -- 集结之后再做调换 9、tac --把一个依然三个文本的內容按順序連接起來,輸出到標準輸出,每一种文件中,内容按行号反序打字与印刷 # echo -e "111111111n2222222" > f1 # echo -e "333333333n4444444" > f2 # tac f2 f1 10、rev --把文件中的行左右反转 # echo -e "1234567nabcdefg" > test # rev test   五、扩展 1、cat,md5sum # echo file1 > file1 # echo file2 > file2 --成立多少个文件 # md5sum file1 file2 --相比较他们的 md5 值是不是相符 # head -c 10m /dev/urandom > bigfile --使用随机设备创造多个 10M 的文书 # head -c 3m bigfile > file1 --将前 3M 数据导入 file1 # tail -c 4m bigfile > file3 --将后 3M 数据导入 file3 # head -c 6m bigfile | tail -c 3m > file2 --将中等 4M 数据导入 file2 # ls -lh file* # cat file1 file2 file3 > newbigfile --使用 cat 将多少个文件合并到一个新大文件中 # md5sum newbigfile bigfile --在用命令相比较旧大文件与新大文件的 md5sum 值

1、 輸入輸出,重定向,管道 2、(cmd卡塔尔;(cmd卡塔尔 3、;;;;; 4、文本管理_1:cat;head;tail;cut;wc;sort;uniq;tr;tac;rev 一、輸...

本文由金沙澳门官网网址发布于澳门金莎娱乐手机版,转载请注明出处:shell_advanced,advancedbashshell

关键词: