zoukankan      html  css  js  c++  java
  • linux学习笔记

    一、基本概念

    1、linux下的文件或目录权限是由9个权限来控制的,每三位为一组,即文件属主(owner=主人=用户)的r、w、x;用户组(group=同组的=家人)的r、w、x;其他的人(other=外人=不在同一组)的r、w、x。 r=read=4=cat;   w=write=2=echo;   x=exexute=1;   '-'=没有权限;  特殊权限:t 、T、s、S、x、X、+等;

    2、赋予操作权限chmod、更改文件用户权限chown

    二、常见基础知识

    1.创建一个目录/data。

    解答:  mkdir  /data

    2.在/data下面建立一个文件oldboy.txt。

    解答:  touch /data/oldboy.txt

    或者:   cd /data   ; touch oldboy.txt

     

    3.为oldboy.txt增加内容为“I am studying linux.”。

    解答:cd /data    ;  echo "I am studying linux">>oldboy.txt

    或者: vi/vim --a/i--" I am studying linux "--esc--:qw

    或者:cat >>oldboy.txt   ;  I am studying linux    ;ctrl+c

     

    4.把oldboy.txt文件拷贝到/tmp下。

    解答: cd /data   ; cp oldboy.txt /tmp/

     

    5.把/data目录移动到/root下。

    解答:mv /data /root/

     

    6.进入/root目录下的data目录,删除oldboy.txt文件。

    解答:cd  /root/data   ;  rm -f oldboy.txt

     

    7.接第6题,退出到上一级目录,删除data目录。

    解答:cd ..  ;  rm -fr data

     

    8.已知文件test.txt内容为:

    test

    liyao

    oldboy

    请给出输出test.txt文件内容时,不包含oldboy字符串的命令。

    解答:

    模拟环境

    cd /data

    touch test.txt

    cat >>/test.txt<<EOF(echo或者vi/vim)

    test

    liyao

    转自:http://www.cnblogs.com/dakaige517/p/6785517.html

    oldboy

    EOF

    ctrl+c

    法一:

    head -n 2 /data/test.txt

    法二:

    tail -n 3 test.txt|head -n 2或者head -n 2 test.txt|tail -2

    法三:

    sed -n "1,2p" test.txt

    法四:

    grep -v oldboy test.txt或者grep test liyao test.txt

    法五:

    awk 'NR<3&&NR>0' test.txt或者awk '{if(NR<3&&NR>0) print $0" "}' test.txt

    法六:

    grep 2 -A 1 test.txt

    grep 1 -B 1 test.txt

     

     

    9.请用一条命令完成创建目录/oldboy/test,即创建/oldboy目录及/oldboy/test目录

    解答: cd ~   ;   mkdir -p /oldboy/test

     

    10.已知/tmp下已经存在test.txt文件,如何执行命令才能把/mnt/test.txt拷贝到/tmp下覆盖掉/tmp/test.txt,而让系统不提示是否覆盖(root权限下)。

    解答:

    法一:

    /bin/cp /mnt/test.txt /tmp/

    法二:

    cp /mnt/test.txt /tmp/

    法三:

    alias cp

    unalias cp

    cp /mnt/test.txt /tmp/

     

    11.只查看ett.txt文件(共100行)内第20到第30行的内容       (:q!强制退出(不保存) :wq(保存并推出)  :q(未执行变更,阅读权限退出)) 

    解答:   head -30 ett.txt|tail -11或者tail -81 ett.txt|head -11

    或者:   sed -n '20,30p' ett.txt  (推荐)

    或者:grep 30 -A 10 ett.txt  ;grep 20 -B 10 ett.txt  ; grep 25 -C 5 ett.txt

    或者: awk 'NR>19&&NR<31' ett.txt   ;  awk '{if(NR>19&&NR<31) print$0" "}' ett.txt

     

    12.分析图片服务日志,把日志(每个图片访问次数*图片大小的总和)排行,取top10,也就是计算每个url的总访问大小

    【附加题:工作场景高难度加分题,不会的同学可以放弃不答】。

    说明:本题生产环境应用:这个功能可以用于IDC网站流量带宽很高,然后通过分析服务器日志哪些元素占用流量过大,进而进行优化或裁剪该图片,压缩js等措施。

    本题需要输出三个指标: 【访问次数】    【访问次数*单个文件大小】  【文件名(可以带URL)】

    测试数据

    59.33.26.105 - - [08/Dec/2010:15:43:56 +0800] "GET /static/images/photos/2.jpg HTTP/1.1" 200 11299 "http://oldboy.blog.51cto.com/static/web/column/17/index.shtml?courseId=43" "Mozilla/4.0 (compatible;MSIE 6.0; Windows NT 5.1; SV1; .NET CLR 2.0.50727; .NET CLR 3.0.4506.2152; .NET CLR 3.5.30729)"
    59.33.26.105 - - [08/Dec/2010:15:43:56 +0800] "GET /static/images/photos/2.jpg HTTP/1.1" 200 11299 "http://oldboy.blog.51cto.com/static/web/column/17/index.shtml?courseId=43" "Mozilla/4.0 (compatible;MSIE 6.0; Windows NT 5.1; SV1; .NET CLR 2.0.50727; .NET CLR 3.0.4506.2152; .NET CLR 3.5.30729)"
    59.33.26.105 - - [08/Dec/2010:15:44:02 +0800] "GET /static/flex/vedioLoading.swf HTTP/1.1" 200 3583 "http://oldboy.blog.51cto.com/static/flex/AdobeVideoPlayer.swf?width=590&height=328&url=/[[DYNAMIC]]/2" "Mozilla/4.0 (compatible; MSIE 6.0; Windows NT 5.1; SV1; .NET CLR 2.0.50727; .NET CLR 3.0.4506.2152; .NET CLR 3.5.30729)"
    124.115.4.18 - - [08/Dec/2010:15:44:15 +0800] "GET /?= HTTP/1.1" 200 46232 "-" "-"
    124.115.4.18 - - [08/Dec/2010:15:44:25 +0800] "GET /static/js/web_js.js HTTP/1.1" 200 4460 "-" "-"
    124.115.4.18 - - [08/Dec/2010:15:44:25 +0800] "GET /static/js/jquery.lazyload.js HTTP/1.1" 200 1627 "-" "-"

    解答:模拟环境

    cd /var/log

    touch access.log 1.log 2.log

    vim access.log(添加内容,生成日志)

     

    法一:通过两个数组来计算(用到数组累加和去重)

    因为我们要的最终结果是某个文件的访问次数和消耗的流量,所以考虑建立以文件名为索引的两个数组,一个存储访问次数,一个保存消耗的流量,这样当使用awk按行遍历文件时,对次数数组+1,同时对流量数组进行文件大小的累加,等文件扫描完成,再遍历输出两个数组既可以得到该文件的反问次数和总的流量消耗。

     

    awk '{array_num[$7]++;array_size[$7]+=$10}END{for(x in array_num){print array_size[x],array_num[x],x}}' access.log|sort -rn -k1|head -10 >1.log

    cat 1.log

     46232 1 /?=

    22598 2 /static/images/photos/2.jpg
    4460 1 /static/js/web_js.js
    3583 1 /static/flex/vedioLoading.swf
    1627 1 /static/js/jquery.lazyload.js

     

    法二:

    awk '{print $7" " $10}' access.log|awk '{S[$1]+=$2;S1[$1]+=1}END{for(i in S) print S[i],S1[i],i}'|sort -rn|head -10 >2.log

    cat 2.log

     46232 1 /?=

    22598 2 /static/images/photos/2.jpg
    4460 1 /static/js/web_js.js
    3583 1 /static/flex/vedioLoading.swf
    1627 1 /static/js/jquery.lazyload.js

    13、把/oldboy目录及其子目录下所有以扩展名.sh结尾的文件中包含oldboy的字符串全部替换为oldgirl【附加题:加分题,不会的同学可以放弃不答】。

    解答:

    模拟环境:

    mkdir -p /oldboy/test

    touch a.txt /oldboy

    touch b.txt /oldboy/test

    echo "oldboy" >a.sh

    echo "oldgirl" >b.sh

    法一:sed

    sed -i "s#oldboy#oldgirl#g" /oldboy/*.txt

    sed -i "s#oldboy#oldgirl#g" `find/oldboy/ -type f -name "*.sh"`

    sed -i "s#oldboy#oldgirl#g" $(fing/oldboy/ -type f -name "*.sh")

    法二:find+|xargs

    find /oldboy/ -type f -name "*.sh" |xargs sed -i "s#oldboy#oldgirl#g"

    find /oldboy/ -type f -name "*.sh" -exec sed -i  "s#oldboy#oldgirl#g {} ;

    法三:for语句

    for i in `ll /oldboy | grep .sh|awk '{print $NF}'`

    do

        sed -i 's#oldboy#oldgirlg'$i

    done

  • 相关阅读:
    NEO从入门到开窗(4)
    NEO从入门到开窗(3)
    NEO从入门到开窗(2)
    NEO从入门到开窗(1)
    重读大型网站技术架构
    c#并行编程
    关于使用CPU缓存的一个小栗子
    Visual Studio中从应用程序中调试SQL脚本
    JavaScript启示录
    LabVIEW工控二进制数据存储
  • 原文地址:https://www.cnblogs.com/george93/p/6804118.html
Copyright © 2011-2022 走看看