zoukankan      html  css  js  c++  java
  • Linux 笔记

    删除

    x 小写的x表示向后删除一个字符,也就是删除光标所在字符

    nx n表示数字,表示向后删除每个字符,例如:10x表示删除包括光标在内的后面10个字符

    X 大写的X表示删除光标前的一个字符,不包括光标所在字符

    nX n表示数字,表示向前删除每个字符,例如:10X表示删除光标前的10个字符,不包括光标所在字符

    dd 删除光标所在的行,其实也是剪切

    ndd n表示数字,删除光标所在的向下n行

    d1G 删除光标所在行到第一行数据

    dG 删除光标所在行到最后一行数据

    d0 删除光标所在到该行第一个字符

    d$ 删除光标所在到该行最后一个字符

    yy 复制光标所在的行

    nyy n表示数字,复制光标所在的向下n行

    y1G 复制光标所在行到第一行数据

    yG 复制光标所在行到最后一行数据

    y0 复制光标所在到该行第一个字符

    y$ 复制光标所在到该行最后一个字符

    p 小p表示将已复制的数据粘贴在光标的下一行

    P 大P表示将已复制的数据粘贴在光标的上一行

    J 将光标所在的行与下一行的数据合并为一行

    u 小u表示撤销上一步操作(特别重要,类似于windows里面的word里面的crtl+y)

    ctrl+r 与u相反,表示重做前一步操作(特别重要,类似于windows里面的word里面的crtl+y)

    . 点,表示重复前一个操作,例:想多次复制,一直按这个就行了

    注:以上删除、复制和粘贴均是在非编辑模式下的操作

    语法规则:命令 -选项 参数(命令操作的目录){之间要有空格}

    2个特殊的目录:.和..分别代表当前目录和当前目录的父目录

    alt+F#从字符界面到其他    ctrl+Alt+F#从图形界面到其他

    shutdown -h now(立即关闭)

    shutdown -h +5(5分钟后关闭)        系统会播报

    shutdown -P +5(5分钟后关闭)       P是大写 。小写无效

    shutdown -r +5"the system will be power off in 5minutes" (5分钟后关闭,并推送信息到每个用户)

                                                                                          ↑所有组

       -普通的二进制文件                                            ↑所有者    ↑          ↑ 4096个文件

    d    rwx             rwx                 rwx          4       root        root     4096

    ↑     --              --                   --             ↑4个硬链接文件

    ↑     ↑               ↑                     ↑rwx统称其他o

    ↑     ↑               ↑rwx统称所有组g

    ↑     ↑ 

    ↑     ↑  r:读操作,w 写操作,x执行操作 .  rwx 统称为所有者u

    ↑ d代表目录   f二进制文件

    以上都可以通过shutdown -c取消

    pwd 查看当前工作目录

     命令ls    命令所在路径/bin/ls

    ls 选项[-ald][文件或目录]

    -a显示所有文件,包括隐藏文件

    -l详细信息显示

    -d查看目录属性

    语法规则:cd [目录]

    cd .. 返回上级   

    cd /返回根目录  

    cd /etc 到etc 目录下

    cd 若不指定则切换到$HOME下

    touch[文件名]   创建文件    

    touch a                               -->删除的话直接用 rm a    ,然后y既可

    touch -a -t 201610210941 myfile 修改文件的存取时间

    touch -m -t 201610210941 myfile 修改文件的修改时间

    mkdir [目录名]  创建一个目录。

    mkdir dir1                          -->删除的话直接用 rm -r dir1    ,然后y既可,若用上面的会无法删除,且xx是一个目录

    rm  -r[文件或目录]       rm即remove

    rm a 然后输入y既可删除当前的a文件-->用ls 查看既可发现

    rm -r a 也可以      -r是删除目录

    rm -rf etc既可强制删除

    cp -R[源文件或目录][目的目录]  复制目录  

    cp file1 file2 dir1    -->将file1 file2复制到dir1目录中

    cp /etc/services ./services 复制到当前目录

    cp services ser 可以边复制边改名

    cp -R /etc ./所有的文件复制到当前目录

    mv[源文件或目录][目的目录]  移动

    mv ./etc/inittab ./ 把当前目录下的Inittab移动到当前目录下

    mv file1 file2     将当前文件名字改为file2  

    mv file1 newdir    将当前file1移动newdir目录中

    touch a    mkdir newdir     mv ./a ./newdir    ls      cd ..    rm -r newdir

    cat[文件名]    显示文件信息

    如 cat /etc/issue   显示版本信息

    cat -n 按行号显示信息

    move[文件名] 分页显示文件内容

    tail -num[文件名]  查看文件的后几行

    tail -10 /etc/services 

    tail -f /etc/services   动态变化

    head -num[文件名]  查看文件的前几行

    head -20 /etc/services              

    如在根目录下:  mkdir newdir     cd newdir      touch a     vi a    "sdgjhajkltelkwajtkl这里是文本信息"   保存退出

    head  -1 /newdir/a      -->sdgjhajkltelkwajtkl这里是文本信息

    ln -s[源文件][目标文件]     产生连接文件  ln  link 的缩写

    ln -s /etc/issue    软连接文件-->指向源文件    源文件删除的话,软文件也会没有

    ln /etc/issue    硬链接文件       为防止源文件被删除,  一般需要被封硬链接文件

    (1)chmod[{ugo}{+-=}{rwx}][文件或目录]   改变文件或目录权限  (2){mode=421}[文件或目录]

    +是增加权限   -删除权限  =直接赋予权限    

    如:chmod  ugo+rwx file1 赋予文件file1 所有人所属组其他人 读写执行能力

     通过ls -l 查看   当前目录里文件的权限

    chmod 777 file1  设定file1为所有用户具有全部权限   7 既4+2+1  4是读   2是写 1 是执行

    chown [用户][文件或目录]  改变文件或目录的所有者

    chown nobody file1     ls -l      chown root file1   ls -l

    chgrp [用户][文件或目录] 改变文件或目录的所有组

    chgrp nobody file1      ls -l  

    whoami   显示当前的登入用户 

     umask [选项] [掩码]  

    umask [-S]        s要大写,显示设置文件的缺省权限    权限掩码 022   

    umask 022  

    umask 027 //更加安全

    022表示默认创建文件权限为755,也就是rwx r-x r-x 。 

    027表示默认创建文件权限为750,也就是rwx r-x --- 。   

    ls -ld newdir  看目录的权限

    which[命令名称]  文件搜素命令

    which ls                 ls  --color 有颜色区分

    which rm               rm -i询问   

    find[搜索路径][搜素关键字] 查找文件或目录

    find /etc -name init 在目录/etc中查找init文件

    find /etc -name init*在目录/etc中查找所有带有init的文件

    find /etc -name init???在目录/etc中查找所有带有init的7位文件

       通配符  *:0个或多个字符   ?:代表单个字符

    find /etc -size +204800  在etc目录下查找大于100m的文件

    find /etc -size +163840 -a size -204800  在etc目录下查找大于80m小于100m的文件       

    -a 是逻辑与 相当于and  -o 是逻辑或,相当于或

    find /etc -type f  在etc目录下查找二进制类型的文件

    find /etc size +163840 -a -type f 在etc 目录下查找大于80m并且是二进制类型的文件

    mkdir newdir   chown xxx newdir   ls -l     find  / -user xxx     在根目录下查找所有者为xxx的文件

    find  /etc  -ctime -1 在根目录下查找24小时内被修改过的文件

    c是change改变文件的属性 如:所有者,所有组,权限。。。

    m是modify改变的是文件的内容

    a是access访问

    以天为单位 ctime,atime,mtime 

    以分钟为单位 cmin, amin,mmin

    find /bin -type f -exec ls -l {} ;

    在bin目录下查找二进制文件并显示其内容, 最后是有分号的。

    locate [搜素关键字]搜素与关键字相关的所有文件

    locate file 列出所有跟file有关的文件  ,若是a ,就列出所有带有a的文件

    updatedb更新数据库,与上面是配对的。  

    grep[指定字串][源文件] 在文件中搜素字串匹配的行并输出

    grep ftp /etc/services 列出目录下所有ftp的行

    man[命令或配置文件] 获得帮助信息

    man ls 查看ls命令的帮助信息

    man cd 不能查看,它是内置信息  只能 help cd

     date                 #以默认方式显示当前日期和时间

    date -u     #传统unix风格选项

    通过IO重定向生成文件myf:

    ls -l /usr > myf     ;  ls >> myf

    分屏显示文件内容(more/less)

    more myf   或  ls -l /myf | less    

    >或>>输出重定向

    <或<输入重定向

    > 是定向输出到文件,如果文件不存在,就创建文件;如果文件存在,就将其清空

     >>是将输出内容追加到目标文件中。如果文件不存在,就创建文件;如果文件存在,则将新的内容追加到那个文件的末尾,该文件中的原有内容不受影响。

    输入输出重定向可以参考: http://www.cnblogs.com/chengmo/archive/2010/10/20/1855805.html

    管道:

    将一个命令的输出传送给另外一个命令,作为另外一个命令的输入;

    例如:ls -l /etc | more 

    命令连接符

    ;间隔的命令按顺序依次执行

    &&前后命令存在逻辑与关系,只有前面的关系被执行了,后面的关系才能被执行

    ||前后命令存在逻辑或关系,只有前面的关系执行失败了,后面的关系才能被执行

    命令替换符

    将以个命令的输出作为另外一个命令的参数

    命令1 `命令2`  此处为反引号

    ls -l `which touch`

      

    gzip选项[文件]   压缩文件  gzip a 

    gunzip [文件] 解压文件   gunzip a.gz

    tar 选项[cvf][目录]   -c产生.tar打包文件 -v显示详细信息  -f指定压缩后的文件名 -z打包同事压缩

    mkdir a

    打包同时压缩tar -zcvf b.tar.gz a 

    解包同时解压tar -zxvf b.tar.gz    2者原文件都还在

    打包tar -cvf b.tar a 

    解包tar -xvf b.tar

    zip选项[-r][压缩后文件名称][文件或目录]

    -r压缩目录

    zip services.zip /etc/services 压缩文件

    zip -r test.zip/test压缩目录

    unzip解压缩

     write 

    write <用户名>

    向另外一个用户发送信息  ,ctrl+d作为结束

    $write feng 

    wall

    wall [message] [文件名]

    向所有用户广播信息

    $wall happy new year

    ping

    ping 选项IP地址

    ping 211.67.116.9

    Shell变量

    变量:是shell传递数据的一种方法,用来代表每个取值的符号名。 

    Shell有两类变量:临时变量和永久变量。 

    临时变量是shell程序内部定义的,其使用范围仅限于定义它的程序,对其它程序不可见。包括:用户自定义变量、位置变量。

    永久变量是环境变量,其值不随shell脚本的执行结束而消失。

    1、用户自定义变量

    用户定义的变量由字母或下划线开头,由字母、数字或下划线序列组成,区分大小写。变量名长度没有限制。在使用变量值时,要在变量名前加上前缀“$”。 

    2、设置和使用变量

    设置变量:习惯上用大写字母来命名变量。变量名只能以字母表中的字符开头,不能用数字。 

    变量赋值:“=”两边没有空格。 

    定义时赋值,如NUM=1 

    将一个命令的执行结果赋给变量,如:TIME=`date`;TIME=$(date +%F)   //注意date 后面有一个空格

    将一个变量的值赋给另一个变量,如:B=120 ; A =$B 

    使用echo命令查看变量值。例如:echo $A 

     

    单引号会原封不动的把变量输出。双引号则输出内容。 

    删除变量:unset [变量名]

    unset time 

    7. 特殊变量

    $@  相当于数组

    $* 这个程序的所有参数

    $# 这个程序的参数个数

    $$ 这个程序的PID

    $! 执行上一个后台命令的PID

    $? 执行上一个命令的返回值

    #!/bin/sh
    if [ $# -le 0 ]
    then
     echo "not enough "
    exit 0
    fi
    while [ $# -gt 0 ]
    do
     echo "$@"
    echo "$*"
    echo "$#"
    echo "$$"
    echo "$!"
    echo "$?"
    break
    done
    

    sh b.sh 1 2 3 4 5

    输出结果为:1 2 3 4 5

    1 2 3 4 5

    5

    3295

    0

    9. read 命令

    read 的例子:

    #! /bin/sh

    read first second third

    echo "the first parameter is $first"

    echo "the second parameter is $second”

    echo "the third parameter is $third"

     expr命令:对整数型变量进行算术运算

    语法: expr  表达式    #注意 运算符之间要有空格

    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    [root@hpc test]# expr 3 + 5
    8
    [root@hpc test]# var1=8
    [root@hpc test]# var2=2
    [root@hpc test]# exp
    expand       exportfs     expresskeys  
    export       expr         
    [root@hpc test]# expr $var1 - 5  //expr 后面要有空格 操作符之间也要有空格
    3
    [root@hpc test]# expr $var1 / $var2
    4
    [root@hpc test]# expr $var1 * $var2
    expr: syntax error
    [root@hpc test]# expr $var1 * $var2   //2 个数相乘,需要要转译符*
    16

    2 expr 程序的例子

    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    [root@hpc test]# cat expr.sh  
    #! /bin/sh  
     a=10
     b=20
     c=30
     value1=`expr $a + $b + $c`
     echo "The value of value1 is $value1"
     value2=`expr $c / $b`
     echo "The value of value2 is $value2"
     value3=`expr $c * $b`    #整除
     echo "The value of value3 is $value3"
     value4=`expr $a + $c / $b`
     echo "The value of value4 is $value4"

    测试:

    1
    2
    3
    4
    5
    [root@hpc test]# ./expr.sh 
    The value of value1 is 60
    The value of value2 is 1
    The value of value3 is 600
    The value of value4 is 11

    3 复杂的运算

    1
    2
    3
    [root@hpc test]# var4=8
    [root@hpc test]# expr `expr 5 + 11` / $var4
    2

    【例】

    1
    2
    3
    4
    5
    [root@hpc test]# var1=8
    [root@hpc test]# var2=2
    [root@hpc test]# var4=`expr $var1 / $var2`
    [root@hpc test]# echo $var4
    4

    //注意反引号

    ......................................................

    #!/bin/sh
    if [ $a1 -eq $a2 ]; then   //要有空格   [ $a1 -eq $a2 ]折是test $a1 -eq $a2的简化
    echo "$a1 equals $a2"
    elif [ $a1 -lt $a2 ]; then
    echo "$a1 littler than $a2"
    elif [ $a1 -gt $2 ]; then
    echo "$a1 greater than $a2"
    fi

     

         

    #!/bin/sh
    echo "what day is it taday"
    read day
    case $day in
    "monday") echo "monday";;   //可以用|
    "tuesday") echo "tuesday";;
    "wednesday") echo "wednesday";;
    *) echo "other day";;
    esac

    //上面的while后面少条件的,有错误

    格式一

    while 条件;

    do

        语句

    done

    格式二 死循环

    while true

    do

        语句

    done

    格式三 死循环

    while :

    do

        语句

    done

    格式四 死循环

    while [ 1 ]

    do

        语句

    done

    格式五 死循环

    while [ 0 ]

    do

        语句

    done

    #!/bin/sh
    for day in monday tuesday wednesday thursday friday saturday sunday
    do
    echo "what day is it taday"
    read day
    case $day in
    "monday"|"tuesday"|"wednesday"|"thursday"|"friday"|"saturday"|"sunday") echo "$day";;
    *) echo "error  day"
    break;;
    esac
    done

    shift 指令

    #!/bin/sh
    if [ $# -le 0 ]
    then
     echo "not enough "
    exit 0
    fi
    sun=0
    while [ $# -gt 0 ]
    do
    echo "$@"
     shift
    done

    参数左移,每执行一次,参数序列顺

    次左移一个位置,$#的值减1,

    用于分别处理每个参数,移出去的参数不再可用

    until   命令

    #!/bin/bash
    a=0
    until [ ! $a -lt 10 ] //不小于10的时候跳出循环
    do
       echo $a
       a=`expr $a + 1`
    done

    结果:0 1 2 3 4 5 6 7 8 9

    16. Shell 脚本调试

    sh -x script

    这将执行该脚本并显示所有变量的值。

    sh -n script

    不执行脚本只是检查语法的模式,将返回

    所有语法错误。

    select变量

    select 变量in 关键字

    do

    n command 1

    ü... ...

    n command n

    done

    #!/bin/sh
    echo "a is 5,b is 3.Please select your method"
    a=5
    b=3
    
    select var in "a+b" "a-b" "a*b" "a/b"
    do
            break
    done
    
    case $var in
            "a+b") echo 'a+b='`expr $a + $b`;;
            "a-b") echo 'a-b='`expr $a "-" $b`;;
            "a*b") echo 'a*b='`expr $a "*" $b`;;
            "a/b") echo 'a/b='`expr $a "/" $b`;;
            *) echo "input error..."
    esac

    显示的的a+b是select上的。

  • 相关阅读:
    【ZJOI2007】棋盘制作 BZOJ1057
    【ZJOI2008】 树的统计 count
    【JSOI2007】麻将 bzoj 1028
    【省选】省选黄色预警
    【ZJOI2013】k大数查询 BZOJ 3110
    【HNOI2008】Cards BZOJ 1004
    【JSOI2010】Group 部落划分 BZOJ 1821
    NOIp2014 解题报告
    CH Round #56
    CH Round #55
  • 原文地址:https://www.cnblogs.com/yi-mi-yangguang/p/5895010.html
Copyright © 2011-2022 走看看