• Linux 学习笔记


    . 当前目录
    / 根目录
    ~ $HOME目录

    反斜杠 告诉s h e l l该命令尚未结束

    touch:创建新文件

    chmod u+l filename:l权限,给文件filename加锁,别的用户不能访问此文件
    绝对模式:4:读 2:写 1:执行。例如:744 <==> -rwxr--r--
    一次设置该目录下所有文件权限:chmod 744 *; chmod g-w *; chmod a+w *
    使用- R选项连同子目录下的文件一起设置:chmod -R 664 /usr/local/home/dave/*

    目录的读权限位意味着可以列出其中的内容。写权限位意味着可以在该目录中创建文件.执行权限位则意味着搜索和访问该目录

    chown:改变文件属主(同chgrp命令类似)

    系统不允许你在创建一个文本文件时赋予它执行权限,必须在创建后用chmod命令手动加上这一权限(目录允许)
    umask:命令确定了你创建文件的缺省模式,可用umask 022修改缺省模式,用umask查看缺省模式

    符号链接存在两种不同类型的链接,软链接和硬链接,只讨论软链接。软链接实际上就是一个指向文件的指针。
    建立链接命令:ln [-s] source_path target_path

    find:它可以遍历当前目录甚至于整个文件系统来查找某些文件或目录。$ find . -name "*.txt" -print

    echo:回显 echo "test"
    echo "test" > filename 将字符串重定向到文件中
    echo "test2" >> filename 将字符串追加到文件中,不覆盖原有内容

    read:从键盘或文本读入信息,并赋予一个变量。$read name $"test" 将test字符串赋给name变量

    cat:显示文件内容,创建文件,还可以用它来显示控制字符。
    cat -v filename 显示控制字符
    cat file1 file2 ...显示file1 file2...等文件的内容
    cat file1 file2 > file3 将file1、file2合并后重定向到file3文件中
    cat > filename:向filename文件中输入文本,以ctrl-D结束

    管道:可以通过管道把一个命令的输出传递给另一个命令作为输入。
    ls | grep -i test :搜索文件名类似test的文件,并显示出来

    tee:它把输出的一个副本输送到标准输出,另一个副本拷贝到相应的文件中。如果希望在看到输出的同时,也将其存入一个文件,
    那么这个命令再合适不过了。tee [-a] filename. -a:追加到filename文件末尾
    ls -l | tee -a filename : 将ls -l命令的输出追加到filename文件末尾

    grep :对文本文件进行模式查找
    -i:忽略大小写
    -c:只输出匹配行的计数
    -v:显示不包含匹配文本的所有行
    -n:显示匹配的行号、内容
    如果要在当前目录下所有.doc文件中查找字符串"sort" : grep "sort" *.doc
    grep -c "sort" *.doc 返回:4 即,有4行含有"sort"字符串

    如果要抽出记录,使其行首不是48,可以在方括号中使用^记号,表明查询在行首开始。grep '^[^48]' filename
    查找开头是b结尾是f的5个字符的串:grep 'b...f' filename
    结合使用^和$可查询空行。使用- n参数显示实际行数:grep '^$' filename

    awk:格式化报文或从一个大的文本文件中抽取数据包,awk是所有shell过滤工具中最难掌握的
    NF:awk的一个内建变量, 代表每行的字段数量
    NF的几个用法:
    1.排除空行。(因为空行时,NF=0,0为假,不会打印该行)
    awk NF filename
    2.不输出后面两个字段: awk 'NF-=2' filename
    不输出前面两个字段: awk '{for(i=3;i<NF;i++)printf("%s ",$i);print $NF}' filename

    变量赋值:$weekbegin="20110701"
    显示变量:$echo ${weekbegin}或者echo $weekbegin
    清除变量值:$unset weekbegin
    使用set命令显示所有本地定义的shell变量。$set
    并排显示变量:$echo ${变量1}${变量2}
    如果设置了变量值,则使用它,如果未设置,则取新值。 $color="blue"
    $echo "The sky is ${color:-grey} today"
    The sky is blue today

    设置只读变量,设置后就不能更改其值了,否则报错:
    $aa="test" $echo ${aa} $readonly aa $aa="add" (错误信息)=>ksh: aa: is read only
    要查看所有只读变量,使用命令readonly即可。

    传统上,所有环境变量均为大写。环境变量应用于用户进程前,必须用export命令导出。
    使用方法一:VARIABLE-NAME=value;export VARIABLE-NAME 在两个命令之间是一个分号,value不加双引号。也可以这样写:
    VARIABLE-NAME=value
    export VARIABLE-NAME
    使用env命令可以查看所有的环境变量。$env
    使用unset命令清除环境变量:$unset VARIABLE-NAME

    HOME目录,可以简单使用cd命令进入它。$echo $HOME $/db2home/asiainfo $cd $pwd $/db2home/asiainfo

    $ PATH=$HOME/bin:.:/bin:/usr/bin;export PATH
    使用上面的例子首先查找 H O M E / b i n目录,然后是当前工作目录,然后是 / b i n,最后是/ u s r / b i n。

    $# 传递到脚本的参数个数
    $* 以一个单字符串显示所有向脚本传递的参数。与位置变量不同,此选项参数可超过 9个
    $$ 脚本运行的当前进程I D号
    $! 后台运行的最后一个进程的进程I D号
    $@ 与$#相同,但是使用时加引号,并在引号中返回每个参数
    $- 显示s h e l l使用的当前选项,与s e t命令功能相同
    $? 显示最后命令的退出状态。0表示没有错误,其他任何值表明有错误。

    反引号用于设置系统命令的输出到变量。$echo `date` $公元2011年09月22日 星期四 13时57分47秒
    $mydate=`date` $echo $mydate $公元2011年09月22日 星期四 13时57分47秒
    另一个例子中,将反引号嵌在双引号里:$echo "today is `date`" $today is 公元2011年09月22日 星期四 13时57分47秒

    打印当前系统上用户数目:$echo "There are `who | wc -l` users on the system"
    使用命令e x p r时,用*表示乘法会出现错误,在*前加上反斜线才会正确。
    错误:$expr 12*12
    正确:$expr 12*12

    条件测试:17章
    测试数值:[ "number" numeric_operator "number" ]
    numeric_operator可为:
    -eq 数值相等。 equal
    -ne 数值不相等。 not-equal
    -gt 第一个数大于第二个数。 greater-than
    -lt 第一个数小于第二个数。 less-than
    -le 第一个数小于等于第二个数。 less equal
    -ge 第一个数大于等于第二个数。 greater equal
    if [ $? -gt 1 -o `expr length $1` -lt 10 ]
    -a 逻辑与,操作符两边均为真,结果为真,否则为假。
    -o 逻辑或,操作符两边一边为真,结果为真,否则为假。
    ! 逻辑否,条件为假,结果为真。


    awk:最基本功能是在文件或字符串中基于指定规则浏览和抽取信息。
    BEGIN:打印报告头 END:打印报告尾(BEGIN模式和END模式)
    awk 'BEGIN {print "ID filed1 filed2 --------------------------"} {print $1" "$2" "$3} END {print "game over"}' myfile
    ID filed1 filed2
    --------------------------
    11 aa aa'a
    123 slfsf ldffolsd:flsv
    2313 lsjfo llasdolli
    12 bb bb.fglsldi
    13 cc bcd"ef
    41 dd ddbsd
    5 ee eees/fd
    6 ff fffew
    game over

    lappend 命令用来将新元素追加到列表末尾
    %lappend new {3 4} "5" {6} 7
    => 1 2 {3 4} 5 6 7 ;#单个词的元素的双引号和花括号被剥离了

    在使用find命令时,可能希望先匹配所有的文件,再在子目录中查找。
    在下面的例子中,find命令从文件系统的根目录开始,查找一个名为 CON.FILE的文件。
    它将首先匹配所有的文件然后再进入子目录中查找。(-depth -print可省略)
    $ find / -name "CON.FILE" -depth -print
    从当前目录开始查询当前目录及其子目录 $ find . -name "con.file"

    #向文件中写入数据的操作
    #将This is a test file 写入 myfile.txt中
    set filename "/db2home/asiainfo/prov_stat/report/myfile.txt"
    set fd [open $filename w]
    puts $fd "This is a test file"

    #########################
    sed用法:
    sed -n '2p' myfile:显示文件myfile中第二行内容,-n选项,显示打印定位行。
    sed -n '1,3p' myfile:打印1~3行
    sed -n '/ff/'p myfile: 匹配单词ff,并打印这一行
    sed -n '4,/ff/'p myfile:行号和模式共同查询
    sed -n '/$/'p myfile: 匹配元字符$前,先用/转义
    sed -n '1,$p' myfile: 显示整个文件内容。$:最后一行。从第一行到最后一行。
    sed '1,17d' 删除第1到17行


    1.创建sed脚本文件:$pg append.sed
    #!/bin/sed -f
    /company/ a #:可以用行号代替模式/company/ 如:4 a
    The test text!
    2.添加执行权限:$chmod u+x append.sed
    3.运行sed文件:$append.sed myfile
    解释:在myfile文件中找到模式company的行,并在此行后面追加(a)一行The test text!
    但是myfile文件中内容不变,因为sed脚本并不操作此文件,而是操作它的一个副本,如果想得到运行结果,运行时重定向到另一个文件中

    另:bbbb所在行行前插入文本
    #!/bin/sed -f
    /bbbb/ i
    This line is added!

    替换一行:将aaaa所在行替换成abcdef
    #!/bin/sed -f
    /aaaa/ c
    abcdef

    替换文本:(不是替换一行,只有匹配上的文本才替换)
    sed 's/bb/BBBB/' myfile
    结果:bbbb=>BBBBbb
    sed 's/bb/BBBB/g' myfile
    bbbb=>BBBBBBBB

    sed '2d' myfile:删除第二行数据。d:删除。也是操作副本,不是实际源文件。

    从shell向sed传值:
    要从命令行中向sed传值,值得注意的是用双引号,否则功能不执行。
    $NAME='It is a go situation'
    $REPLACE='GO'
    $echo $NAME | sed "s/go/$REPLACE/g"
    输出:It is a GO situation

    从sed输出中设置shell变量:
    从sed输出中设置shell变量是一个简单的替换过程。运用上面的例子,创建shell变量NEW-NAME,保存上述sed例子的输出结果。
    $NAME='It is a go situation'
    $REPLACE='GO'
    $NEW_NAME=`echo $NAME | sed "/s/go/$REPLACE/g"`
    $echo $NEW_NAME
    输出:It is a GO situation

    sort < bb > aa.out ###:将bb文件中的每行,按照字母顺序排序,然后将结果输出到aa.out文件中(bb作为输入文件,aa.out作为输出文件)
    $ mail louise < contents.txt ###:在发送邮件时,可以用重定向的方法发送一个文件中的内容。在下面的例子中,用户
    louise将收到一个邮件,其中含有文件contents.txt中的内容:

    例如由 /usr/share/doc 要到 /usr/share/man 底下
    时,可以写成: 『cd ../man』这就是相对路径的写法啦!相对路径意挃『相对亍目前工作目弽
    癿路径!』


    mkdir -p /test1/test2/test3
    -p:直接将所需目录test3及上层目录递归建立起来.

    强制删除目录机器子目录: rm -r test1 (/test1/test2/test3 全部删除)

    ls -d:仅列出目录本身,不列出目录内的文件
    -R:连同子目录内容一起列出来
    aa bb.sh* dw_week.del fzdbb/ myfile sqlnet.log test.sh* test.tcl tmp.sql xinhua/
    ./fzdbb:
    dw_user_townchange_dm.tcl stat_841_unit_indexes_new.tcl test_quxian.tcl tmp.sql
    stat_841_cnty_indexes_new.tcl test.tcl testfinal.tcl ww/

    ./fzdbb/ww:

    ./xinhua:
    dw_newbusi_xinhua_day.tcl dw_newbusi_xinhua_month.tcl dw_newbusi_xinhua_week.tcl test.tcl
    -t:以时间排序 (如:ls -lt: 以长格式显示,并且按时间排序,最近时间的文件排在最前面)

    cp -i:若目标文件(destination)已经存在时,在覆盖时会先询问动作的进行(常用)
    -p:连同档案的属性一起复制过去,而非使用默认属性(备份常用)
    -r:递归持续复制,用于目录的复制行为;(常用) 如:ls -r ./test ./test1 (就算test1目录事先不存在也没有问题)


    内容查询,有比较多的指令可以用,cat/more/less/tail/tac等等
    cat: 由第一行开始显示
    tac: 从最后一行开始显示(可以看成tac是cat的倒着写)
    nl: 顺便输出行号
    more: 一页一页的显示
    space:向下翻一页
    enter:向下翻一行
    /字符串:向下搜寻这个串
    :f 显示文件名以及目前显示行数
    q 立刻离开more
    b 往回翻页
    less: 与more类似,但是less能向前翻页
    space:向下翻一页
    [pagedown]:向下翻动一页
    [pageup] :向上翻动一页;
    /串:向下搜寻串
    ?串:向上搜寻串
    n:重复前一个搜寻(与/或?有关)
    N:反向重复前一个搜寻(与/或?有关)
    q:离开
    head: 显示前几行
    tail: 显示最后几行
    -b:显示行号
    -n:显示行号(空白行也会有行号,与-b不同)
    -v:列出一些看不出来的特殊字符


    which: 某个指令放在哪个目录下.如:which ls 结果:usr/bin/ls
    type: 某个指令的详细信息(目录/哪个命令的别名alias) 如:type ll ==>ll is an alias for ls -l


    cut使用方法:
    [root@www ~]# echo $PATH
    /bin:/usr/bin:/sbin:/usr/sbin:/usr/local/bin:/usr/X11R6/bin:/usr/games:
    [root@www ~]# echo $PATH | cut -d ':' -f 5
    以:作为分隔符,因此会出现 /usr/local/bin
    -d ':' 以:作为分隔符
    -f 5 显示第五个分隔符之前的字符


    tee命令:同时将数据流分送到档案去不屏幕 (screen);而输出刡屏幕的,其实就是 stdout,可以让下个指令继续处理
    /db2home/asiainfo/wangbin/test PROJSer $ps | tee ./ps.txt | head -1
    将ps命令的结果保存到当前目录的ps.txt文件中,并将结果的第一行显示在标准输出(屏幕)中.
    -a 以追加方式将结果保存到文件中


    $touch a b c 同时建立a、b、c三个空文件
    $rm a b c 同时删除a、b、c三个空文件
    $mkdir a b c 同时建立三个文件夹
    $rmdir a b c 同时删除三个文件夹
    $ls [xyz]* 查找以xyz中任何一个字母开头的文件 (包括名字中含有xyz的子目录中的所有文件名称)
    $ls [!xyz]* 查找不是以字母xyz开头的文件 (包括名字中含有xyz的子目录中的所有文件名称)
    $ls *[xyz]* 查找文件名中含有xyz任何一个字母的文件 (包括名字中含有xyz的子目录中的所有文件名称)


    ip地址(注意ip地址的格式必须是:xxx.xxx.xxx.xxx ,xxx的值必须是0-255的一个值,而且第一个 xxx至少是 1 ,最后一个 xxx至少是1。
    验证IP地址的正则表达式:
    '/^(([1-9]|([1-9]d)|(1dd)|(2([0-4]d|5[0-5]))).)(([1-9]|([1-9]d)|(1dd)|(2([0-4]d|5[0-5]))).){2}([1-9]|([1-9]d)|(1dd)|(2([0-4]d|5[0-5])))$/'


    完整的awk打印报告头/报告尾的用法:(注:不要忘记END中的print,文档中没有print,出错了)
    awk 'BEGIN {print "1 2 3 4 5 ----------"} {print $1" "$2" "$3" "$4" "$5} END {print "end-of-report"}' data.f

    这个 nohup 可以讥你在脱机戒注销系统
    后,还能够讥工作继续迚行
    nohup ./sleep500.sh


    !!...!!之间的部分是在 sqlplus的环境下运行的,exit退出sqlplus,进入shell环境
    然后将查询到连接池中的结果重定向到a.txt文件中

    #!/usr/bin/ksh
    rm -f /db2home/asiainfo/wangbin/test/a.txt >/dev/null 2>&1
    sqlplus sdbass/sdyd_ora16@sdbass <<!! >/db2home/asiainfo/wangbin/test/a.txt
    select a.export_id
    from crmdata_export a;
    exit;
    !!


    #==== 在23:00 2009-03-17 执行程序/bin/sync
    [root@www ~]# at 23:00 2009-03-17
    at> /bin/sync

    #==== 5分钟后执行/bin/sync
    [root@www ~]# at now + 5 minutes
    at> /bin/sync

    xargs的应用:
    如:grep -i "####"|awk '{print $2}'
    结果: aa
    bb
    cc
    dd
    grep -i "####"|awk '{print $2}'|xargs
    结果: aa bb cc dd

    grep -E应用:
    grep -i abc *tcl 从后缀为tcl的文件中搜索abc字段
    而,ls | grep -E "aa|bb|cc|dd" 从ls的结果中,搜索含有aa或bb或cc或dd的行,是一种“或”的应用。

    关于查看目录或者文件是否存在:
    ###目录是否存在 -d 参数,存在返回1
    if [ -d /db2home/asiainfo/wangbin/test ]
    then
    echo 存在test目录
    else echo 不存在test目录
    fi
    ###文件是否存在 -e 参数
    if [ -e /db2home/asiainfo/wangbin/a.tcl ]
    then
    echo 存在文件
    else echo 不存在文件
    fi

    if [... -a ...] -a:and


    --shell中case 用法
    [/opt/dsadm/center/sh dw6 ]cat auto_city1.sh
    #!/usr/bin/ksh
    #auto_city.sh
    #程序说明,参数是文件名,返回city_id的值(1-17,18是不分地市的文件)

    file_name=$1
    file_city=$1
    case $file_city in
    01) echo 10;;
    02) echo 1;;
    03) echo 2;;
    04) echo 3;;
    05) echo 4;;
    06) echo 5;;
    07) echo 6;;
    08) echo 7;;
    09) echo 8;;
    10) echo 9;;
    11) echo 11;;
    12) echo 12;;
    13) echo 13;;
    14) echo 14;;
    15) echo 15;;
    16) echo 16;;
    17) echo 17;;
    *) echo 18;;
    esac


    --运算符两边要有空格
    /db2home/asiainfo PROJSer $echo $a$b$c
    123
    /db2home/asiainfo PROJSer $count=`expr $a + $b + $c`
    /db2home/asiainfo PROJSer $echo $count
    6
    /db2home/asiainfo PROJSer $count=`expr $a+$b+$c`
    /db2home/asiainfo PROJSer $echo $count
    1+2+3

    --AIX设置BEIST时区
    判断AIX是否使用了夏时制: $echo $TZ 用这个命令看时区,如果时区以DT结尾就使用了夏时制,如: CST6CDT
    设置时区,在目录etc的 /etc/environment 文件下:
    /etc dw1 $grep -i beist environment
    TZ=BEIST-8
    --北京时间:东八区
    TZ='BEIST-8'

    -- 昨天
    TZ='BEIST+16'
    举例:
    /db2home/asiainfo PROJSer $date
    公元2012年02月23日 星期四 17时57分40秒
    /db2home/asiainfo PROJSer $export TZ=BEIST+16
    /db2home/asiainfo PROJSer $date
    公元2012年02月22日 星期三 17时57分45秒

    #### 明天
    export TZ=BEIST-32
    举例:
    /db2home/asiainfo PROJSer $export TZ=BEIST-32
    /db2home/asiainfo PROJSer $date
    公元2012年02月24日 星期五 18时02分30秒


    有一些特殊的初始化文件用于执行一些shell配置命令,以点号(.)开始,称为点文件。要显示他们,用 ls -a

    cp/mv 命令,用参数 -i 能避免当文件存在时覆盖文件


    使用屏蔽一个特殊字符的含义,下列字符可以认为是特殊字符:
    $ . ' " * [ ] ^ | ( ) + ?
    如:将.转义,.
    上述模式不认为反斜杠后面的字符是特殊字符,而是一个普通字符,即句点.
    如果要在正则表达式中匹配以 *.pas 结尾的所有文件,可做如下操作: /*/.pas

    cp -r dir1 dir2 --将dir1目录下的所有文件复制到dir2中。 -r参数,递归复制
    cp -i file1 dir1 --将文件复制到dir1时,如果dir1中有这个文件,则询问

    mv -f file1 dir1 --将文件强制移动到目录中,不管目录中有没有同名文件。 -f:强制。force
    mv -i file1 dir1 --有相同文件时询问。(同cp)


    ============================================= 2014/5/6 11:43:18 南昌银行学习记录 ===========================================
    --1.
    db2inst1@/home/db2inst1/wb>cat > b.sh #建立文件,使用cat复制终端的输入
    who|wc -l #程序内容
    ^D #ctrl+d 表示 end-of-file
    db2inst1@/home/db2inst1/wb>chmod +x b.sh #让文件拥有执行权限
    db2inst1@/home/db2inst1/wb>b.sh #执行测试
    4 #测试结果

    说明: who,告诉你现在系统有哪些用户登录

    --2.
    #!/usr/bin/ksh # #!指定使用哪个unix内核shell

    --3.两个命令之间可以用分号分隔
    db2inst1@/home/db2inst1>cd zl;ls -l

    ===========================================
    1.查看linux内存: vmstat
    2.用nohup & 执行脚本后,提示nohup成功后,还需要按终端上键盘任意键退回到shell输入命令窗口,然后通过在shell中输入exit来退出终端
    而我是每次在nohup执行成功后直接点关 闭程序按钮关闭终端.。所以这时候会断掉该命令所对应的session,导致nohup对应的进程被通知需要一起shutdown。

    nohup命令可以用来执行其他命令,并且忽略SIGHUP信号(run a command immune to hangups, with output to a non-tty。Run COMMAND, ignoring hangup signals.)
    当一个虚拟终端的网络连接断开时,操作系统向正在运行的程序发送SIGHUP信号(HUP = HangUP、挂断),默认情况下这个信号将使程序退出。

    3.linux下
    3.1 tar基本用法:
    tar -cf all.tar *.jpg -- 将所有jpg文件打成一个名为all.tar的包; -c,产生新包; -f,指定包名
    tar -rf all.tar a.jpg -- 将a.jpg文件增加到all.tar包中。 -r,增加文件。
    tar -uf all.tar logo.jpg -- 1.tar包中的logo.jpg文件。 -u,更新文件
    tar -tf all.tar -- 列出包中所有文件. -t,列出文件
    tar -xf all.tar -- 解出all.tar包中所有文件. -x,解出 (解包 *.tar )

    3.2 tar调用gzip (-z,调用gzip)
    tar -czf all.tar.gz *.jpg -- 将所有jpg文件打成一个名为all.tar的包,并将其用gzip压缩,生成一个gzip压缩过的包all.tar.gz
    tar -xzf all.tar.gz -- 将上面的压缩包all.tar.gz解开 (解压压缩包 *.tar.gz )

    注: AIX下没安装gzip,所以z参数不可用

  • 相关阅读:
    浅谈SharePoint 2013 站点模板开发 转载自http://www.cnblogs.com/jianyus/p/3511550.html
    SharePoint 入门书籍推荐 转载来源http://www.cnblogs.com/jianyus/p/3513238.html
    php简易计算器
    php的常量
    php数据类型的转换
    php的date()函数
    php流程控制语句
    php的运算符
    php简介
    手机页面操作栏的创建及WebFont的使用
  • 原文地址:https://www.cnblogs.com/ilvutm/p/7214338.html
Copyright © 2020-2023  润新知