linux 及shell 学习总结

来源:互联网 发布:播放电影卡顿ubuntu 编辑:程序博客网 时间:2024/05/21 09:07
一。查找suid,和guid:
    ls -l |grep '^...s'
    ls -l |grep '^...s..s'

二。umask值中的数字。对于文件来说,这一数字的最大值分别是6,
    系统不允许你在创建一个文本文件时就赋予它执行权限

三。find logs -type f -mtime +5 -exec rm {} \; 特别注意{} \ 间有个空格
    find . -perm 755 //是绝对查找,即只有当文件或目录的权限为755 是才会找到
    find . -perm -755 //相对查找,即只要755中二进制中为1的地方相同即可,755,775,777 的权限都是OK的。
    find . -path "*/.svn" -prune -o -print //忽略.svn目录,注意是放在-prune前面
    在除dir0、dir1及子目录以外的目录下查找txt后缀文件

    find ./ \( -path './dir0*' -o -path './dir1*' \) -a -prune -o -name *.txt -print 注意:\( 和\) 两边都要有空格

   find . -type f                   ////会显示当前路径下的所有文件,而且会带路径名,如:./mydir/filename.xxx

  find . -maxdepth 1 -type f            ///// 只显示当前目录下的正则文件,maxdepth, 还有mindepth 两个合用则功能更强 如 ./file.txt,

  find . \( -name '*.*'  -not -name 'exclude_file.txt' \)    /////////////将当前目录下所有*.*文件或目录找出来,但是除了exclude_file.txt文件

  find . -name 'common_file.txt' |args cat >>common_file_all.txt                    ////将当前目录下所有名为common_file.txt文件的内容合入到common_file_all.txt中

    
四。myPara="testonly" 注意在变量等号的两侧不要有空格。    
        if [ -d $mydir ] 或 if [ ! -d $mydir -o ! -d $ANOTHER ]注意在[]的两侧要有空格。
        取得文件中的内容到变量:cat myfile.txt |read tmpPara    
        取得程序名为 `basename $0`
        
        设置从终端读取时:    
        如:dbaccess $SMPDBNAME -<<EOF >/dev/null 2>&1
            .........
            ......
            EOF
            
        模拟终端输入(特别注意2>&1后面不可以有其它,而且要回车):
        dbaccess $SMPDBNAME -<<EOF >/dev/null 2>&1
        ....other sql statements
        EOF
            
五。循环的处理:
        第一种:

        如:fileall=`ls -l $FILETYPE`
            echo $fileall |while read file
            do
                .....
                .....
            done

        第二种:从文件中读取:
            Addressfile="./myfiles.list"
            do while read a ,b ,c
                .....
                ....
            done <Addressfile   #注意格式,是从文件中读取。

            

      第三种:

      for namedir in $(ls)

      do 

              if [ -d "$namedir" ] ; then

                 echo "this is a dir"

              fi

    done

六。compress -f myzerofile  //compress 命令有时候对压缩后文件变大的文件拒绝压缩,注意加上f后,才可以。

七。输入与输出
        a.out >outfile 2>&1 //表示标准输出定位到outfile,标准错误(2)定位到标准输出(即文件outfile)中
        a.out 2>1&  >outfile;    //表示标准错误定位到标准输出(即显示器中),而标准输出则定位到outfile中。
        
        filter file1 | cat file2 - file3 |lpr
        说明:cat 先读入file2,再读标准输入(此时即filter file2,- 即表示标准输入) ,再读入file3,最后送到lpr打印。
        以上的SHELL写法有缺陷,即- 也可能是命令的选项。
        以下写法功能相同但是更好理解:filter file1 | cat file2 /dev/fd/0 file3 |lpr
        
八。lsof -i:6088  //注,后面的6088是要查询的端口号,//lsof需要安装, rmsock也可,但是需要root权限
        netstat -anp |grep myprogram  //查看程序打开了哪个端口号
        lsof -i |grep myprogram  //也可以查看程序打开了哪个端口号

九。在终端中输入SHELL脚本执行,与在xxx.sh中不一样,需要以";"号分隔,如:
        >while echo "begin do:" ;do cat file1>>file2; cat file2>>file1; done;
         注意以上的各";"在SHELL脚本中是不需要的。但是在终端直接写执行时则需要。
十。SHELL脚本中,$*,$@ 的区别:当加上双引号时,即"$*","$@"(或者在双引号内)$*会将整个的输入参数外面加上双引号,
    而$@则是对每个参数加上双引号,没有其它任何区别。

十一。#sysctl -a |grep port 得到系统分配的端口范围。//即以客户端连接服务器时的端口范围

十二。同时不可以生成临时文件,将配置文件中的内容修改:
    sed -i 's/"sslcon_type"=dw:00000000/"sslcon_type"=dw:00000002/' myconfig.cfg

十三。自动登录等:-n意思是不读取默认.netrc文件中的设定
    #!/bin/bash
    /usr/bin/ftp -n <<EOF
    open 172.16.16.42
    user zhang zhang
    bin
    lcd /opt/
    prompt
    get $1
    close
    by
    EOF
    exit 0

十四。eval的常用用法:
    将文件中的两列设置成变量:
    如文件datafile中有如下两列:
    PC 486
    COMPUTER DELL
    
    用下面的:
    while read NAME TYPE
    do
        eval `echo "$NAME=$TYPE"`

    done < datafile

十五:

   sort $MYFILE_LIST -o $MYFILE_LIST   //// 参数-o 表示直接对本文件排序

  sed -i '/.\/abc.txt/d'  list.txt              //// 参数-i 表示直接对本文件操作, 将文件中含有./abc.txt的行删除

  mkdir tempDir

  tar -xvf myfile.tar.gz -C tempDir                //// -C 参数表示将解压后的文件和目录放到 tempDir中。


十六:

  uniq 将文件中的重复行去掉,

  local FmtDirName=${newFmtName%.tar.gz}           ////作用是将newFmtName变量去掉后缀.tar.gz再赋给局部变量FmtDirName


十七。linux终端下,可以用上下箭头键得到刚才的命令,也可以先输入部分开头后按 pageup/pagedown键得到匹配的历史命令