Shell命令笔记

来源:互联网 发布:知行论坛北交大注册 编辑:程序博客网 时间:2024/05/02 06:13

====================== shell 命令============================
shell学习:
cat 未指定任何文件,则默认读取标准输入
tac 从最后一行开始显示,可以看出 tac 是 cat 的倒着写!

tar  --no-same-owner   解压缩的时候默认是将文件权限恢复成打包时文件的权限属性。添加这个选项卡后就可以使用解压缩的用户 
         来作为文件的属主\
         
who 显示目前登录的人数
wc 字数统计, wc -l -w -c

@@一直弄不懂,管道不就是把前一个命令的结果作为参数给下一个命令吗,那在 | 后面加不加xargs有什么区别???

管道是实现“将前面的标准输出作为后面的标准输入”
xargs是实现“将标准输入作为命令的参数”

你可以试试运行:
echo "--help"|cat  #输出 --help
echo "--help"|xargs cat #等价于cat --help。

看看结果的不同。

cp 复制命令会改变文件的权限,想要将档案的所有特性都一起复制过来,可以加上 -a 喔
 -u参数在文件不同时才会发生复制操作。 
    
    

$$sed 命令理解
sed -i -s '/\(nexus ..\)/c\\./nexus ../out/skyapp &' ${SK_BIN_OUT}/runsky.sh

解释:-i表示更改源文件
   -s表示数据源
   命令在中间,则后面有一个反斜杠。 
附 常用选项:
        -n∶使用安静(silent)模式。在一般 sed 的用法中,所有来自 STDIN的资料一般都会被列出到萤幕上。但如果加上 -n 参数后,则只有经过sed 特殊处理的那一行(或者动作)才会被列出来。
        -e∶直接在指令列模式上进行 sed 的动作编辑;
        -f∶直接将 sed 的动作写在一个档案内, -f filename 则可以执行 filename 内的sed 动作;
        -r∶sed 的动作支援的是延伸型正规表示法的语法。(预设是基础正规表示法语法)
        -i∶直接修改读取的档案内容,而不是由萤幕输出。      

常用命令:
        a   ∶新增, a 的后面可以接字串,而这些字串会在新的一行出现(目前的下一行) # sed '1,3a drink tea' ab #第一行到第三行后增加字符串"drink tea"
        c   ∶取代, c 的后面可以接字串,这些字串可以取代 n1,n2 之间的行!代替一行或多行。:# sed '1,2c Hi' ab             #第一行到第二行代替为Hi
        d   ∶删除,因为是删除啊,所以 d 后面通常不接任何咚咚;# sed '1,2d' ab           #删除第一行到第二行
  i   ∶插入, i 的后面可以接字串,而这些字串会在新的一行出现(目前的上一行);# sed -i '$a bye' ab         #在文件ab中最后一行直接输入"bye"
  p  ∶列印,亦即将某个选择的资料印出。通常 p 会与参数 sed -n 一起运作~ # sed -n '2,$p' ab        #显示第二行到最后一行
  s  ∶取代,可以直接进行取代的工作哩!通常这个 s 的动作可以搭配正规表示法!例如 1,20s/old/new/g 就是啦! 替换一行中的某部分:# sed -n '/ruby/p' ab | sed 's/ruby/bird/g'    #替换ruby为bird

----PS:LINUX中使用VIM替换命令 :s/main/main_bak  报错:pattern not found
解决:使用 :%s/main/main_bak
----PPS: 部分字符串替换操作,如把asdf_bbb-1111_asdf_bbb-bbbm1111中的bbb替换成HHH,把1111替换成2222,其他的不动。
即输入:asdf_bbb-1111_asdf_bbb-bbbm1111  输出:asdf_HHH-2222_asdf_bbb-HHHm2222
----命令:sed 's/bbb\(.\)1111/HHH\12222/g'  或者 sed -r 's/bbb(.)1111/HHH\12222/g'
 解释:\(.\)这是个匹配项,即表示bbbxxx1111中间的一个字符(.表示任意一个字符,.*表示匹配0个或多个字符)。,后面用\1表示。【注】sed命令中看不懂的都是正则表达式
附录:正则表达式
特别字符 描述
$ 匹配输入字符串的结尾位置。如果设置了 RegExp 对象的 Multiline 属性,则 $ 也匹配 '\n' 或 '\r'。要匹配 $ 字符本身,请使用 \$。
( ) 标记一个子表达式的开始和结束位置。子表达式可以获取供以后使用。要匹配这些字符,请使用 \( 和 \)。
* 匹配前面的子表达式零次或多次。要匹配 * 字符,请使用 \*。
+ 匹配前面的子表达式一次或多次。要匹配 + 字符,请使用 \+。
. 匹配除换行符 \n之外的任何单字符。要匹配 .,请使用 \。
[ 标记一个中括号表达式的开始。要匹配 [,请使用 \[。
? 匹配前面的子表达式零次或一次,或指明一个非贪婪限定符。要匹配 ? 字符,请使用 \?。
\ 将下一个字符标记为或特殊字符、或原义字符、或向后引用、或八进制转义符。例如, 'n' 匹配字符 'n'。'\n' 匹配换行符。序列 '\\' 匹配 "\",而 '\(' 则匹配 "("。
^ 匹配输入字符串的开始位置,除非在方括号表达式中使用,此时它表示不接受该字符集合。要匹配 ^ 字符本身,请使用 \^。
{ 标记限定符表达式的开始。要匹配 {,请使用 \{。
| 指明两项之间的一个选择。要匹配 |,请使用 \|。
  
  

 
$$tty 命令显示当前的控制台。
#tty
/dev/ttyS000
 
**,cpio工具:一般用法就是:读取一个目录下所有文件的信息及其所有文件的内容(可能是直接read数据到一个buffer中),然后把这些信息写到一个文件中。
 说白了,可能就是一个序列化的工具。然后LK用同样的方法就可以反序列化,恢复原来目录中的内容了
 example:
 打包:
  find testramfs -depth -print | cpio -ov > testramfs.cpio
 解包:
  cpio -ivd < testramfs.cpio
  
  
#diff制作补丁
#-N 参数是当不存在对应文件时当做新文件
diff -ur -x ".svn" linux-sh4-2.6.23.17_stm23_A25C.original/  linux-sh4-2.6.23.17_stm23_A25C  > linux.patch

#Makefile中sinclude是作用?
相当于 -include,兼容性好一些。----为了和其它的make程序进行兼容。也可以使用“sinclude”来代替“-include”(GNU所支持的方式)。

#set -x 命令显示shell脚本执行的过程,即打印出脚本执行的命令及其结果。
set +x 关闭

#test命令和[...]是等价的,而[[]]命令比[]命令用途更加广。可进行调节判断。
 if test "a" = "b"  <===> if [ "a" = "b" ]  ##注意[]符号中需要有空格,即不能使用if ["a"=="b"]。
 Test和[]中可用的比较运算符只有=和!=,两者都是用于字符串比较的,不可用于整数比较,整数比较只能使用-eq,-gt这种形式: if [ a -eq b ]
 
【注意】: shell中 = 作为等于时(不是==!!!),其两边都必须加空格,否则失效等号也是操作符,必须和其他变量,关键字,用空格格开 (等号做赋值号时正好相反,两边不能有空格)
A, 对比[[]]和[]的例子:
 比如可以直接使用if [[ $a != 1 && $a != 2 ]], 如果不适用双括号, 则为if [ $a -ne 1] && [ $a != 2 ]或者if [ $a -ne 1 -a $a != 2 ]。

B, 长知识:符号$后的括号
(1)${a} 变量a的值, 在不引起歧义的情况下可以省略大括号。

(2)$(cmd) 命令替换,和`cmd`效果相同,结果为shell命令cmd的输,过某些Shell版本不支持$()形式的命令替换, 如tcsh。

(3)$((expression)) 和`exprexpression`效果相同, 计算数学表达式exp的数值, 其中exp只要符合C语言的运算规则即可, 甚至三目运算符和逻辑表达式都可以计算。


@@ shell中的单引号和双引号。
单引号:shell中将‘’中的字符当做纯字符,不处理\转意字符。  如:echo 'addfg""\/\/\'  输出:addfg""\/\/\
双引号:shell中处理“”中的字符可以进行\转意,变量替换,算术等。如:x=a echo "x is \"$x\""
     转意字符包括:“ $ \ `,不包括‘
 
@@几个linux下的数据源。
 /dev/null
 /dev/random  /dev/urandom
 
@@type命令用来显示指定命令的类型。一个命令的类型可以是如下几种:
alias 别名
keyword 关键字,Shell保留字
function 函数,Shell函数
builtin 内建命令,Shell内建命令
file 文件,磁盘文件,外部命令
unfound 没有找到
它是Linux系统的一种自省机制,知道了是哪种类型,我们就可以针对性的获取帮助。
例子:
wangjie@drteam:~/misc/test$ type ll
ll is aliased to `ls -l'

#uniq 命令。
uniq -c  显示非重复的字段,并标记重复次数。
uniq -d  显示重复项。

#trap 命令:trap命令用于指定在接收到信号后将要采取的动作。常见的用途是在脚本程序被中断时完成清理工作
trap -l #显示所有信号。
 1) SIGHUP  2) SIGINT  3) SIGQUIT  4) SIGILL  5) SIGTRAP
 6) SIGABRT  7) SIGBUS  8) SIGFPE  9) SIGKILL 10) SIGUSR1
11) SIGSEGV 12) SIGUSR2 13) SIGPIPE 14) SIGALRM 15) SIGTERM
16) SIGSTKFLT 17) SIGCHLD 18) SIGCONT 19) SIGSTOP 20) SIGTSTP
21) SIGTTIN 22) SIGTTOU 23) SIGURG 24) SIGXCPU 25) SIGXFSZ
26) SIGVTALRM 27) SIGPROF 28) SIGWINCH 29) SIGIO 30) SIGPWR
31) SIGSYS 34) SIGRTMIN 35) SIGRTMIN+1 36) SIGRTMIN+2 37) SIGRTMIN+3
38) SIGRTMIN+4 39) SIGRTMIN+5 40) SIGRTMIN+6 41) SIGRTMIN+7 42) SIGRTMIN+8
43) SIGRTMIN+9 44) SIGRTMIN+10 45) SIGRTMIN+11 46) SIGRTMIN+12 47) SIGRTMIN+13
48) SIGRTMIN+14 49) SIGRTMIN+15 50) SIGRTMAX-14 51) SIGRTMAX-13 52) SIGRTMAX-12
53) SIGRTMAX-11 54) SIGRTMAX-10 55) SIGRTMAX-9 56) SIGRTMAX-8 57) SIGRTMAX-7
58) SIGRTMAX-6 59) SIGRTMAX-5 60) SIGRTMAX-4 61) SIGRTMAX-3 62) SIGRTMAX-2
63) SIGRTMAX-1 64) SIGRTMAX 

例子:trap '{ ulimit -c unlimited;killall udhcpc;killall himount; } > /dev/null 2>&1' INT  #收到INT信号时,执行''中间的命令。

@@awk命令: awk '条件类型1{动作1}条件类型2{动作2}' filename
NF : 每一行 ($0) 拥有的字段总数
NR : 目前 awk 所处理的是『第几行』数据
例子: cat /etc/passwd | awk -F ":" '{print $1 " line:" NR}'

0 0
原创粉丝点击