zoukankan      html  css  js  c++  java
  • Linux 常用命令解析和Bash Shell使用示例脚本演示

    

    摘要

    Linux命令是基于文本格式输入输出的一种程序,依照Unix哲学中强调的程序功能简单,输入宽松,输出严谨,各种程序组合能够具有更强大的功能,而具有这样的灵活性的主要原因是Linux规定程序的输入输出必须坚持文件流格式。即文本格式,而这就是Linux系统的核心之中的一个。

    对于Bash,即Shell的一种。为如今主流Linux发行版本号默认的命令行解释器,是一种功能强大的工具。能够实现对Linux支持的程序命令的组合。从而实现强大功能。类似于Window系统的bat文件,Bash具有更为强大的功能,通过Bash能够实现自己主动化的程序设计,功能运行甚至系统启动,而这些都要归功于Unix的设计理念。

    本篇博文是基于笔者的经验之谈,仅供学习參考之用,存在疏漏还请留言指正,不胜感激~


    ----------------------------------- Linux命令具体解释-----------------------------------


    文件夹相关命令

    显示当前文件夹下的文件详情 ls仅显示文件名称。ll‘ls -alF’命令的别称,通过 alias| grep’ll’命令能够查看:

    king@king-desktop:~/test$ ls
    t1  test1
    king@king-desktop:~/test$ ll
    total 12
    drwxr-xr-x  3 king king 4096 2014-08-23 18:26 ./
    drwxr-xr-x 39 king king 4096 2014-08-23 18:26 ../
    -rw-r--r--  1 king king    0 2014-08-23 18:26 t1
    drwxr-xr-x  2 king king 4096 2014-08-23 18:26 test1/
    king@king-desktop:~/test$ alias | grep  'll'
    alias ll='ls -alF'

    另外,假设想通过经典的树形文件夹显示。可使用额外的tree命令(非内部命令),详细操作例如以下, -L 2指的是以当前文件夹为根文件夹,显示文件夹结构到第二层:

    king@king-desktop:~$ tree
    The program 'tree' is currently not installed.  You can install it by typing:
    sudo apt-get install tree
    king@king-desktop:~$ sudo apt-get install
    
    king@king-desktop:~/test$ tree -L 2
    .
    |-- t1
    `-- test1
        `-- t2
    1 directory, 2 files

    创建删除文件夹操作。使用mkdirrmdir两个命令。对于删除,假设文件夹非空,可使用rm –rf DirName来实现:


    king@king-desktop:~/test$ ls
    t1  test1
    king@king-desktop:~/test$ mkdir test2
    king@king-desktop:~/test$ rmdir test1
    rmdir: failed to remove `test1': Directory not empty
    king@king-desktop:~/test$ rm -rf test1
    king@king-desktop:~/test$ ls
    t1  test2
    king@king-desktop:~/test$ rmdir test2/
    king@king-desktop:~/test$ ls
    t1

    tar命令使用

    经常使用于打包,压缩和解压,使用和參数相关,当中 c指的是打包,x是提取,z指的是gzip压缩。j指的是bzip压缩。v显示解压过程。C是指定文件夹。这里指要解压到的文件夹。将文件夹test1打包,注意后接的參数顺序,显示打包的名字,后才是文件夹名

    king@king-desktop:~/test$ tar -cvf test.tar test1/
    test1/
    test1/t2
    king@king-desktop:~/test$ ls
    t1  test1  test.tar
    
    将打包的文件提取到指定文件夹下。-C实现
    king@king-desktop:~/test$ tar -xvf test.tar -C ./test1/
    test1/
    test1/t2
    king@king-desktop:~/test$ ls ./test1/
    t2  test1
    
    gzip压缩与解压
    king@king-desktop:~/test$ tar -czvf test.tar.gz test1/
    king@king-desktop:~/test$ tar -xzvf test.tar.gz
    
    bzip2压缩与解压
    king@king-desktop:~/test$ tar -cjvf test.tar.bz test1/
    tar -xjvf test.tar.bz test1/


    文件相关


    显示文件内容

    包含 cat,more,less,head,tail,nl等内部命令可实现,但稍微不同

    cat  将文件串联输出到stdout,一般输出在终端。经常使用參数包含–n,功能和nl类似即同一时候输出行号。

    more       可用于浏览超过一页或者超过终端显示长度的文件内容,通过空格键进行翻页,Enter键可行阅览,Q键退出,文本显示在终端

    less     可用于浏览超过一页或者超过终端显示长度的文件内容。通过空格键进行翻页,Enter键可行阅览。上下箭头可前进或者后退,Q键退出。文本显示在独立开启的模式下

    head        后接參数–n 10。当然10能够更改,指的是显示文本的前10

    tail            后接參数 -n 10,同上,指的是显示文本的后10

    nl              类似于 cat -n

    king@king-desktop:~/test$ cat t1
    hello
    world
    !!!
    
    END
    gujinjin
    king@king-desktop:~/test$ head -n 1 t1
    hello
    king@king-desktop:~/test$ tail -n 2 t1
    END
    gujinjin
    king@king-desktop:~/test$ nl t1
         1	hello
         2	world
         3	!!!
           
         4	END
         5	gujinjin
    king@king-desktop:~/test$ cat -n t1
         1	hello
         2	world
         3	!!!
         4	
         5	END
         6	gujinjin
    king@king-desktop:~/test$ more t1
    hello
    world
    !!!
    
    END
    gujinjin

    文本流处理与使用

    文本流模式是Linux的核心思想之中的一个。因而命令能够组合形成更强大的功能。处理文本的命令非常多。这里笔者主要介绍此时此刻想到的,不足还请见谅!

    这里要提一下 awk命令,即文本处理器,比較强大和奇妙,由贝尔实验室的AWK三位搞出来的,入门还是相当easy的,这里有一个陈皓老师的文章。公布于酷壳网(CoolShell.cn)。网址例如以下。感兴趣的能够看下:

    http://coolshell.cn/articles/9070.html

    特殊符号介绍
    “|” 管道符,连接一个程序的输出和还有一个程序的输入通路
    “>”“>>” 重定向,输出到指定文件。差别是前者输出并涵盖文件原有内容,后者输出加入到文件尾部
    
    grep		(global search regular expression(RE) and print out the line), 參数 –o 指的是仅输出匹配对象,不输出完整行
    演示样例: 输出IP地址
    king@king-desktop:~/test$ ifconfig | grep -o '[0-9]{1,3}.[0-9]{1,3}.[0-9]{1,3}.[0-9]{1,3}'
    192.168.229.200
    192.168.229.255
    255.255.255.0
    127.0.0.1
    255.0.0.0
    
    cut  顾名思义,即将输入文本进行移除处理并输出
    演示样例,将IP地址分段,将上述输出存入 ip.log文件
    參数解释: -s 不输出不包括指定分隔符的行。 -d 指定分隔符, -f 输出指定的段,可多个,如 –f1,3 表示输出1,3 段
    king@king-desktop:~/test$ cat ip.log | cut -s -d. -f1
    192
    192
    255
    127
    255
    
    sort 即排序,这里经常使用两个參数,即 –n 基于数值大小排序,一般升序; -r 反向,即reverse
    加n和不加还是有点差别的,这里为了展示这个差别,对ip.log进行略微改动,注意差别,事实上即当做数值处理和字符串处理的差别:
    king@king-desktop:~/test$ cat ip.log | cut -s -d. -f1 | sort
    127
    192
    192
    20
    255
    255
    king@king-desktop:~/test$ cat ip.log | cut -s -d. -f1 | sort -n
    20
    127
    192
    192
    255
    255
    king@king-desktop:~/test$ cat ip.log | cut -s -d. -f1 | sort -nr
    255
    255
    192
    192
    127
    20
    
    uniq  唯一,这里经常使用一个參数 –c, 用于计数,这里指上下行同样的
    king@king-desktop:~/test$ cat ip.log | cut -s -d. -f1 | sort | uniq -c
          1 127
          2 192
          1 20
          2 255
    
    awk  使用初探。 -F 后接分隔符, $1代表第一个分段。详细使用方法參见上述说明的连接。
    king@king-desktop:~/test$ awk  -F. '$1>127 && $1<255 {print $0}' ip.log 
    192.168.229.200
    192.168.229.255


    文本处理演示样例

    统计历史命令使用次数最多的前10

    king@king-desktop:~/test$ history | awk '{print $2}' | sort | uniq -c | sort -nr | head -n 10
        255 ls
        168 clear
         79 cd
         64 history
         60 sh
         48 sudo
         46 cat
         22 vim
         20 clea
         19 tree

    哈哈哈,发现了啥,clea竟然有20次。可见clear命令常常打错啊~



    权限相关

    权限管理体系在Linux中非常完好,这也是Linux非常少受到黑客攻击的原因之中的一个。一般经常使用的三个命令,即改边文件权限的 chmod, chown, chgrp

    chmod 变更文件权限,一般分为可读。可写,可运行3种,即 r - 4, w - 2,x - 1, - - 0,同一时候结合文件全部者 u – User, g – Group, o – Other, a – All 用户群使用, 下述三个命令等效
    king@king-desktop:~/test/test1$ chmod ugo=rwx t2
    king@king-desktop:~/test/test1$ chmod a=rwx t2
    king@king-desktop:~/test/test1$ chmod 777 t2
    king@king-desktop:~/test/test1$ ll t2 
    -rwxrwxrwx 1 king king 10240 2014-08-23 19:27 t2*
    
    chown 变更文件全部者,也能够改变用户组
    king@king-desktop:~/test/test1$ sudo chown root t2
    king@king-desktop:~/test/test1$ ll t2 
    -rwxrwxrwx 1 root king 10240 2014-08-23 19:27 t2*
    
    king@king-desktop:~/test/test1$ sudo chown root:root t2
    king@king-desktop:~/test/test1$ ll t2 
    -rwxrwxrwx 1 root root 10240 2014-08-23 19:27 t2*
    
    chgrp 改变文件所在的用户组
    king@king-desktop:~/test/test1$ sudo chgrp root t2
    king@king-desktop:~/test/test1$ ll t2 
    -rwxrwxrwx 1 king root 10240 2014-08-23 19:27 t2*

    网络相关

    ifconfig  查看网络配置信息
    
    netstat  提供TCP连接,TCP、UDP监听,进程内存管理,路由表信息等,同一时候也能够查看端口信息。

    经常使用參数 –r 输出路由表信息, -i 网络接口 interface信息,-a 显示全部socket king@king-desktop:~/test/test1$ netstat -a | grep tcp | head -n 1 tcp 0 0 *:ssh *:* LISTEN lsof list open files,列出当前系统打开文件工具,一般在root权限下使用。如查看 80端口的相关进程信息: root@king-desktop:~# lsof -i:80 COMMAND PID USER FD TYPE DEVICE SIZE/OFF NODE NAME apache2 987 root 3u IPv4 4423 0t0 TCP *:www (LISTEN) apache2 3899 www-data 3u IPv4 4423 0t0 TCP *:www (LISTEN) apache2 3900 www-data 3u IPv4 4423 0t0 TCP *:www (LISTEN) apache2 3901 www-data 3u IPv4 4423 0t0 TCP *:www (LISTEN) apache2 3902 www-data 3u IPv4 4423 0t0 TCP *:www (LISTEN) apache2 3903 www-data 3u IPv4 4423 0t0 TCP *:www (LISTEN) nc NetCat,网络工具,功能强大。可用于端口监測 參数说明: -4 仅IPv4。 -6 仅IPv6。 -v 输出运行过程。 -w 同意延迟时间(s) 。 -z 仅扫描监听守护进程不发送消息。 -u UDP协议默觉得TCP king@king-desktop:~$ nc -v -w 2 -z 192.168.229.200 76-80 nc: connect to 192.168.229.200 port 76 (tcp) failed: Connection refused nc: connect to 192.168.229.200 port 77 (tcp) failed: Connection refused nc: connect to 192.168.229.200 port 78 (tcp) failed: Connection refused nc: connect to 192.168.229.200 port 79 (tcp) failed: Connection refused Connection to 192.168.229.200 80 port [tcp/www] succeeded!


    ------------------------ Bash Shell详细实现演示样例------------------------

    这里列举几个经常使用的小样例。算是对Shell语法的基本回想吧


    对指定时间内某作者改动文件指定字符串的查看

    #!/bin/bash
    res=`ls -l | awk '$3=="king" && $6=="2014-08-23" && $7<"22:10" && NR!=1 {print $8}'`
    #echo $res
    for var in $res;do
            r=`cat ./$var | grep -n -w 'test' >> mod.log`
            #echo $var
            if [ $? -ne 0 ];then
                    echo "Execute CMD error!!!"
                    exit 1
            fi
    done
    exit 0
    
    
    king@king-desktop:~/Shell$ sudo sh p1.sh 
    king@king-desktop:~/Shell$ cat mod.log 
    1:this is a test this is a test
    6:this is a test this is a test

    对启动某个进程后台执行,然后完毕操作后关闭进程

    #!/bin/bash
    
    DIR=/home/king/CPPFile/Socket
    echo $DIR
    
    if [ -e $DIR/server ];then
            $DIR/server & > info.log 2>&1
            if [ $? -ne 0 ];then
                    echo "Execute Wrong!"
                    exit 1
            fi
            sleep 2
            pid=$!
            echo $pid
            kill -9 $pid
            if [ $?

    -ne 0 ];then echo "fail to kill pid" exit 2 fi fi exit 0 king@king-desktop:~/CPPFile/Socket$ sudo sh test.sh /home/king/CPPFile/Socket 16028


    版权声明:本文博主原创文章。博客,未经同意不得转载。

  • 相关阅读:
    VM VirtualBox安装Centos6.5
    桥接
    程序员工作心法
    策略模式-鸭子怎么飞-实例
    策略模式-用什么方式去上班呢 实例
    观察者模式-订报纸,语音呼叫系统实例
    门面(Facade)模式--医院,保安系统实例
    Promise实例的resolve方法
    Promise实例的any方法
    Promise实例的race方法
  • 原文地址:https://www.cnblogs.com/yxwkf/p/4843930.html
Copyright © 2011-2022 走看看