• linux练习


    本帖最后由 haide1014 于 2014-07-07 17:53 编辑

    1、关于ls命令

    ls命令列出目录下的内容
    [root@ 51itstudy.com ~]# ls
    anaconda-ks.cfg  install.log  test
    加上-s参数列出内容的同时列出该文件或目录的大小
    [root@ 51itstudy.com ~]# ls -s
    8 anaconda-ks.cfg  36 install.log         32 test
    加上-h参数将会显示出文件大小的单位
    [root@ 51itstudy.com ~]# ls -sh
    8.0K anaconda-ks.cfg   36K install.log          32K test
    -l参数显示该目录下的详细信息
    [root@ 51itstudy.com ~]# ls -lh  //该命令可简写为ll -h
    -rw——- 1 root root 1.5K Nov  5 16:28 anaconda-ks.cfg
    -rw-r–r– 1 root root  32K Nov  5 16:27 install.log
    -rw-r–r– 1 root root  32K Nov  6 17:37 test
    注:根据上面的两个命令可以看到,install.log用ls -s查看时大小是36K,而用ll -h查看时大小是32K,这是因为ll -h命令查看的是实际文件所占有的大小,而ls -h查看的是磁盘非配的大小

    2、使用stat 命令列出目录或文件的详细信息
    [root@ 51itstudy.com ~]# stat install.log
      File: `install.log'
      Size: 32062           Blocks: 72         IO Block: 4096   regular file
    Device: fd00h/64768d    Inode: 5898242     Links: 1
    Access: (0644/-rw-r–r–)  Uid: (    0/    root)   Gid: (    0/    root)
    Access: 2013-11-06 17:37:03.000000000 +0800
    Modify: 2013-11-05 16:27:52.000000000 +0800
    Change: 2013-11-05 16:28:19.000000000 +0800

    ls排序的问题
    ls默认状态下是按照文件目录的首字母排序
    -t : 按照文件最后的修改时间排序
    -u : 按照文件的最后访问时间排序
    -c : 按照文件的最后inode改变时间排序
    比如要查看当前目录下最新改变的文件或目录:
    [root@ 51itstudy.com ~]# ls -u | head -1
    Desktop
    列出最近改变时间排序的文件的详细信息
    [root@ 51itstudy.com etc]# ls -l `ls -u | head -1`
    -rw-r–r– 1 root root 889 Dec 12 19:37 group
    列出目录信息:
    [root@ 51itstudy.com /]# ls -ld u01
    drwxr-xr-x 6 oracle oinstall 4096 Dec  4 19:44 u01
    文件类型标识符:
    * 可执行文件
    / 目录文件
    = Socket文件
    @ 符号链接文件
    | 管道文件
    使用-F参数可以列出文件的标识符
    [root@ 51itstudy.com db_1]# ls -F
    assistants/     install.platform  oc4j/        rdbms/
    bin/          inventory/      odbc/        relnotes/
    cdata/        javavm/        olap/        root.sh*
    cfgtoollogs/    jdbc/          OPatch/      root.sh.old*

    3、sort命令
    sort命令可以完成多类别排序
    将当前目录下的文件按照大小排序:
    [root@ 51itstudy.com ~]# du -k *
    8       anaconda-ks.cfg
    4       Desktop
    36      install.log
    8       install.log.syslog
    32      test
    [root@ 51itstudy.com ~]# du -k * | sort -n
    4       Desktop
    8       anaconda-ks.cfg
    8       install.log.syslog
    32      test
    36      install.log

    按照指定的列排序
    查看当前目下下的文件信息并按照第六列的信息以数字排序
    [root@ 51itstudy.com ~]# ll -s | sort -n -k 6
    8 -rw——- 1 root root   1482  Nov  5 16:28 anaconda-ks.cfg
    8 -rw-r–r– 1 root root   3995  Nov  5 16:26 install.log.syslog
    4 drwxr-xr-x 2 root root  4096  Nov  6 00:03 Desktop
    36 -rw-r–r– 1 root root   32062  Nov  5 16:27 install.log
    32 -rw-r–r– 1 root root   32063  Nov  6 17:37 test

    注:RedHat4以后再没有sort +4这样的格式,取而代之的是sort -k 4

    也可加入-r参数来实现逆向排序
    [root@ 51itstudy.com ~]# ll -s | sort -n -k 6 -r
    32  -rw-r–r–  1  root root  32063  Nov   6  17:37  test
    36  -rw-r–r–  1  root root  32062  Nov   5  16:27  install.log
    4  drwxr-xr-x 2  root root  4096   Nov   6  00:03  Desktop
    8  -rw-r–r–  1  root root  3995   Nov   5  16:26  install.log.syslog
    8  -rw——-  1  root root  1482   Nov   5  16:28  anaconda-ks.cfg
    加入tail来选择输出最后的几行
    [root@ 51itstudy.com ~]# ll -s | sort -n -k 6 -r | tail -3
    8 -rw-r–r– 1 root root  3995 Nov  5 16:26 install.log.syslog
    8 -rw——- 1 root root  1482 Nov  5 16:28 anaconda-ks.cfg
    total 88

    5、head和tail命令
    head -n和tail -n分别查看文件的前几行和后几行记录,不加参数默认的是10行
    [root@ 51itstudy.com ~]# cat number 
    1
    2
    3
    4
    5
    [root@ 51itstudy.com ~]# tail -2 number
    4
    5
    [root@ 51itstudy.com ~]# head -2 number 
    1
    2

    -n 参数后面跟 +n(数字) 用来显示第n行前(head)或第n行后(tail)的所有数据结合两者可以实现显示第n-m行的数据
    如显示第2-5行数据的显示
    [root@ 51itstudy.com ~]# head -n +5 number | tail -n +2
    2
    3
    4
    5
    tail -f 动态刷新木文件的后十行数据
    [root@ 51itstudy.com ~]# tail -f number 
    1
    2
    3
    4
    5

    6、Find查找命令

    查找当前目录下名为number的文件
    [root@ 51itstudy.com ~]# find . -name number
    ./number
    查找当前目录下num开头的文件
    [root@ 51itstudy.com ~]# find . -name 'num*'
    ./number
    查找当前目录下test001,test002文件
    [root@ 51itstudy.com ~]# find . -name ’test00[1-2]'
    ./test001
    ./test002
    不区分大小写来查找Test001[1-2]或test00[1-2]'
    [root@ 51itstudy.com ~]# find . -iname ’test00[1-2]'
    ./test001
    ./Test002
    ./Test001
    ./test002
    查找最近连天修改过的文件
    [root@ 51itstudy.com linux]# find . -mtime -2
    .
    ./test001
    ./Test003
    ./Test002
    ./Test001
    ./test003
    ./test002
    查找两天之前修改过的文件
    [root@ 51itstudy.com ~]# find . -mtime +2
    ./.gnome
    ./.gnome/gnome-vfs
    ./.dmrc
    ./.gnome2_private
    ./.Trash
    ./.bashrc
    ./install.log.syslog
    把mtime改成ctime:按照改变时间查找 atime按照访问时间查找
    也可以把mtime,ctime,atime改成mmin,cmin,amin来按照分钟改变查找
    [root@ 51itstudy.com linux]# find . -mmin -10
    .
    ./test001
    ./Test003
    ./Test002
    ./Test001
    -maxdepth定义递归查询的级数
    [root@ 51itstudy.com ~]# find . -maxdepth 1 -iname ’test00[1-2]'
    ./test001
    ./Test002
    ./Test001
    ./test002
    [root@ 51itstudy.com ~]# find . -iname ’test00[1-2]'
    ./linux/test001
    ./linux/Test002
    ./linux/Test001
    ./linux/test002
    ./test001
    ./Test002
    ./Test001
    ./test002
    查找当前目录下大于10k的文件
    [root@ 51itstudy.com ~]# find . -size +10k
    ./.bash_history
    ./test
    ./install.log
    ./.gconfd/saved_state
    ./.gnome2/yelp.d/omfindex.xml
    ./.gnome2/yelp.d/manindex.xml
    ./.gnome2/yelp.d/sk-content-list.last
    ./.gstreamer-0.10/registry.i686.bin
    查找当前目录下oracle用户的文件,递归深度为2
    [root@ 51itstudy.com home]# find . -maxdepth 2 -user oracle
    ./oracle
    ./oracle/.sqlplus_history
    ./oracle/hot_backup.sh
    ./oracle/.gnome2_private
    ./oracle/rman_full_backup.sh.bak
    ./oracle/.bashrc
    ./oracle/log
    显示当前目录下文件所属组是oinstall的文件,深度为二,只显示出前两个文件的详细信息
    [root@ 51itstudy.com home]# ls -l `find . -maxdepth 2 -group oinstall`|head -2
    -rw——- 1 oracle oinstall  8502 Dec  7 14:37 ./oracle/.bash_history
    -rw-r–r– 1 oracle oinstall    33 Nov  6 16:09 ./oracle/.bash_logout
    查找当前目录下的所有目录:
    [root@ 51itstudy.com ~]# find . -maxdepth 1  -type d
    .
    ./linux
    ./.gnome
    ./.gnome2_private
    grep命令用来过滤信息
    测试文件如下:
    [root@ 51itstudy.com ~]# cat number 
    1       number1
    2       number2
    3       number3
    4       number3
    5       number5
    显示number中含有2的行:
    [root@ 51itstudy.com ~]# grep 2 number 
    2       number2
    查看/home/oracle/.bash_profile中的注释信息
    [root@ 51itstudy.com oracle]# grep "#" .bash_profile 
    # .bash_profile
    # Get the aliases and functions
    # User specific environment and startup programs
    查询.bash_profile中含有export或alias的行
    [root@ 51itstudy.com oracle]# grep "export|alias" .bash_profile 
    # Get the aliases and functions
    export ORACLE_BASE=/u01/app/oracle
    export ORACLE_HOME=$ORACLE_BASE/10.2.0/db_1
    export ORACLE_SID=orcl
    export PATH=$PATHORACLE_HOME/bin
    export LD_LIBRARY_PATH=$ORACLE_HOME/lin:/lin:/usr/lib
    alias sqlplus=' rlwrap sqlplus'
    alias rman=' rlwrap rman'
    使用egrep完成上面的题目
    [root@ 51itstudy.com oracle]# egrep  "export|alias" .bash_profile
    # Get the aliases and functions
    export ORACLE_BASE=/u01/app/oracle
    export ORACLE_HOME=$ORACLE_BASE/10.2.0/db_1
    export ORACLE_SID=orcl
    export PATH=$PATHORACLE_HOME/bin
    export LD_LIBRARY_PATH=$ORACLE_HOME/lin:/lin:/usr/lib
    alias sqlplus=' rlwrap sqlplus'
    alias rman=' rlwrap rman'
    -i参数用来忽略大小写
    [root@ 51itstudy.com ~]# grep NUMBER number 
    [root@ 51itstudy.com ~]# grep -i NUMBER number 
    1       number1
    2       number2
    3       number3
    4       number3
    5       number5
    -v 参数查找不包括某个字符的行
    [root@ 51itstudy.com ~]# grep -i NUMBER number | grep -v 5 
    1       number1
    2       number2
    3       number3
    4       number3
    -n 参数用来标记行号
    [root@ 51itstudy.com ~]# grep -i NUMBER number | grep -v 5 -n 
    1:1     number1
    2:2     number2
    3:3     number3
    4:4     number3
    过滤掉空行和过滤行:
    [root@ 51itstudy.com ~]# cat number -n
         1  1       number1
         2  2       number2
         3
         4  3       number3
         5
         6  4       number3
         7  5       number5
         8  # This is a test file
    [root@ 51itstudy.com ~]# grep -n -v '^$' number | grep -v '#' 
    1:1     number1
    2:2     number2
    4:3     number3
    6:4     number3
    7:5     number5

    7、cut命令用来选取指定列
    [root@ 51itstudy.com ~]# cat number 
    1       :number1

    2       :number2

    3       :number3
    4       :number3
    5       :number5
    # This is a test file
    [root@ 51itstudy.com ~]# cat number | grep -v "#" | grep -v "^$" | cut -d ":" -f2
    number1
    number2
    number3
    number3
    number5
    上面的命令等于是在grep的基础上,去除注释和空行,以:为分隔符,显示第二列

    只显示当前目录下文件名和创建时间
    [root@ 51itstudy.com ~]# ll | cut -c 37-
    16:28 anaconda-ks.cfg
    00:03 Desktop
    16:27 install.log
    16:26 install.log.syslog
    10:53 linux
    11:33 number
    17:37 test
    10:49 test001
    10:51 Test001
    10:49 test002
    10:51 Test002
    10:49 test003
    10:51 Test003
    10:49 test004
    -d参数用来删除指定的字符
    [root@ 51itstudy.com ~]# df |grep -v Filesystem | awk '{ print $5 }'
    /
    13%
    0%
    [root@ 51itstudy.com ~]# df |grep -v Filesystem | awk '{ print $5 }'|cut -d '%' -f1
    /
    13
    0

    8、sed流编译器
    打印1-3行
    [root@ 51itstudy.com ~]# sed '1,3p' number 
    1       :number1
    1       :number1
    2       :number2
    2       :number2


    3       :number3
    4       :number3
    5       :number5
    取消打印1-3行
    [root@ 51itstudy.com ~]# sed -n '1,3p' number 
    1       :number1
    2       :number2
    删除第3行记录
    [root@ 51itstudy.com ~]# cat number 
    1       number1
    2       number2

    3       number3
    4       number4
    5       number5
    [root@ 51itstudy.com ~]# sed '3d' number 
    1       number1
    2       number2
    3       number3
    4       number4
    5       number5
    删除最后一行
    [root@ 51itstudy.com ~]# sed '$d' number 
    1       number1
    2       number2

    3       number3
    4       number4
    5       number5
    删除第三行到最后一行
    [root@ 51itstudy.com ~]# sed '3,$d' number 
    1       number1
    2       number2

    删除包含number2的行
    [root@ 51itstudy.com ~]# sed '/number2/d' number 
    1       number1

    3       number3
    4       number4
    5       number5
    Hello

    9、awk生成数据
    [root@ 51itstudy.com ~]# cat number 
    1       number1
    2       number2

    3       number3
    4       number4
    5       number5
    Hello
    查找包含number2的行
    [root@ 51itstudy.com ~]# awk '/number2/' number 
    2       number2
    匹配第二列中数据包含number2的数据
    [root@ 51itstudy.com ~]# awk '$2 ~ /number2/' number 
    2       number2
    $2匹配表示第二列数据,~为匹配符

    打印number中第一列的内容
    [root@ 51itstudy.com ~]# awk '{print $1}' number 
    1
    2

    3
    4
    5
    Hello

    -F参数指定分隔符
    打印passwd中的第一列的最后十名用户名信息
    [root@ 51itstudy.com ~]# awk -F: '{print $1}' /etc/passwd | tail -10
    sabayon
    test2
    ldap
    ais
    test1
    oracle
    admin
    user01
    user02
    xtt
    使用cut也能达到此效果
    [root@ 51itstudy.com ~]# cut -d: -f1 /etc/passwd|tail -10
    sabayon
    test2
    ldap
    ais
    test1
    oracle
    admin
    user01
    user02
    xtt

    简单的邮件:
    [root@ 51itstudy.com ~]# service sendmail status
    sendmail (pid  3845) is running…
    [root@ 51itstudy.com ~]# hostname xue.com
    [root@ 51itstudy.com ~]# hostname
    xue.com
    [root@xue ~]# mail root
    Subject: Hello   
    [root@xue ~]# mail root
    Subject: Hello   
    Hello,Admin   
    Bye
    Cc: 

    10、自动化作业:
    使用corn命令完成自动化作业
    查看服务是否正常启动
    [root@xue ~]# service crond status
    crond (pid  3871) is running…
    使用corntab命令下的三个参数:-l,-e,-r分别为产看,编译和删除自动化任务
    自动化任务的语法很简单:
    * * * * 0 df -h >> /var/log/system.log
    其中:前面的五个列分别表示:分,时,日,月,星期;若为*表示不适用该时间格式进行计划任务,若需要多个时间段,可用,分开
    比如上面的命令表示每周日的时候查看一下系统信息,并追加入system.log
    每周的工作日,每个十五分钟执行一个备份脚本:
    0,15,30,45 * * * 0 /home/backuo/cold_bak.sh 
    执行计划在/var/spool/cron下可以找到
    [root@xue cron]# pwd
    /var/spool/cron
    [root@xue cron]# ls
    root
    [root@xue cron]# cat root 
    0,15,30,45 * * * 0 /home/backup/cold_bak.sh
    或者直接用corntab -l命令查看
    [root@ 51itstudy.com ~]# crontab -l
    0,15,30,45 * * * 0 /home/backup/cold_bak.sh

    11、实验at命令完成自动作业
    [root@xue cron]# at *:15
    syntax error. Last token seen: *
    Garbled time
    [root@xue cron]# at 0:15
    at> find / -name "passwd"
    at> <EOT>
    job 1 at 2013-12-17 00:15
    改命令意思是在次日凌晨15分执行查找passwd文件路径的命令
    at -l查看执行计划
    [root@xue cron]# at -l
    1       2013-12-17 00:15 a root
    atrm 计划编号  删除指定计划
    [root@xue cron]# at -l
    1       2013-12-17 00:15 a root
    [root@xue cron]# atrm 1
    [root@xue cron]# at -l

    磁盘分区:
    [root@redhat6-3 ~]# fdisk /dev/sdb
    Device contains neither a valid DOS partition table, nor Sun, SGI or OSF disklabel
    Building a new DOS disklabel with disk identifier 0xce359e4e.
    Changes will remain in memory only, until you decide to write them.
    After that, of course, the previous content won't be recoverable.

    Warning: invalid flag 0×0000 of partition table 4 will be corrected by w(rite)

    WARNING: DOS-compatible mode is deprecated. It's strongly recommended to
             switch off the mode (command 'c') and change display units to
             sectors (command 'u').

    Command (m for help): n
    Command action
       e   extended
       p   primary partition (1-4)
    p
    Partition number (1-4): 1
    First cylinder (1-261, default 1): (回车,默认将所有空间分配给第一个主分区)
    Using default value 1
    Last cylinder, +cylinders or +size{K,M,G} (1-261, default 261): 
    Using default value 261

    Command (m for help): t(修改磁盘格式为LVM)
    Selected partition 1
    Hex code (type L to list codes): 8e
    Changed system type of partition 1 to 8e (Linux LVM)

    Command (m for help): w
    The partition table has been altered!

    Calling ioctl() to re-read partition table.
    Syncing disks.

    再次查看磁盘情况
    [root@redhat6-3 ~]# fdisk -l

    Disk /dev/sda: 21.5 GB, 21474836480 bytes
    255 heads, 63 sectors/track, 2610 cylinders
    Units = cylinders of 16065 * 512 = 8225280 bytes
    Sector size (logical/physical): 512 bytes / 512 bytes
    I/O size (minimum/optimal): 512 bytes / 512 bytes
    Disk identifier: 0×00085274

       Device Boot      Start         End      Blocks   Id  System
    /dev/sda1   *           1          64      512000   83  Linux
    Partition 1 does not end on cylinder boundary.
    /dev/sda2              64        2611    20458496   8e  Linux LVM

    Disk /dev/sdb: 2147 MB, 2147483648 bytes
    255 heads, 63 sectors/track, 261 cylinders
    Units = cylinders of 16065 * 512 = 8225280 bytes
    Sector size (logical/physical): 512 bytes / 512 bytes
    I/O size (minimum/optimal): 512 bytes / 512 bytes
    Disk identifier: 0xce359e4e

       Device Boot      Start         End      Blocks   Id  System
    /dev/sdb1               1         261     2096451   8e  Linux LVM

    12、tar命令解压压缩:

    tar zcvf 创建压缩文件
    tar [-cxtzjvfpPN] 文件与目录 ….

    参数:

    -c :建立一个压缩文件的参数指令(create 的意思);

    -x :解开一个压缩文件的参数指令

    -t :查看 tarfile 里面的文件

    特别注意,在参数的下达中, c/x/t 仅能存在一个!不可同时存在

    因为不可能同时压缩与解压缩。

    -z :是否同时具有 gzip 的属性?亦即是否需要用 gzip 压缩

    -j :是否同时具有 bzip2 的属性?亦即是否需要用 bzip2 压缩

    -v :压缩的过程中显示文件!这个常用,但不建议用在背景执行过程

    -f :使用档名,请留意,在 f 之后要立即接档名

    -p :使用原文件的原来属性(属性不会依据使用者而变)

    -P :可以使用绝对路径来压缩!

    -N :比后面接的日期(yyyy/mm/dd)还要新的才会被打包进新建的文件中!
    如果加 z 参数,则以 .tar.gz 或 .tgz 来代表 gzip 压缩过的 tar file 

    如果加 j 参数,则以 .tar.bz2 来作为附档名啊

    如把root目录下的内容全部压缩成root.tar.gz
    [root@xue ~]# tar zcvf ./root.tar.gz ./* 
    解压[root@xue ~]# tar zcvf ./root.tar.gz ./* 

    解压root.tar.gz文件
    [root@xue ~]# mkdir root
    [root@xue ~]# tar zxvf root.tar.gz root/
    root@xue ~]# cd /root/
    [root@xue ~]# ls
    anaconda-ks.cfg  install.log         number       test     test002  Test003
    dead.letter      install.log.syslog  root         test001  Test002  test004
    Desktop          linux               root.tar.gz  Test001  test003

    13、I/O重定向:

    输出重定向>(创建)或>>(追加)
    [root@xue ~]# echo "Hello" > Hello
    [root@xue ~]# cat Hello 
    Hello
    [root@xue ~]# echo "Hello" >> Hello
    [root@xue ~]# echo "Hello" >> Hello
    [root@xue ~]# cat Hello 
    Hello
    Hello
    Hello

    使用>&1命令。将stderr和stdout也导入到stdin指定的文件中,及若命令错误,也将重定向到指定文件
    如:将TEST命令的错误信息重定向至Hello
    [root@xue ~]# TEST
    -bash: TEST: command not found
    [root@xue ~]# TEST > Hello 2>&1
    [root@xue ~]# cat Hello 
    -bash: TEST: command not found

    输入重定向:
    输入重定向指的是将输入的内容重后面的文件中获取
    如:
    [root@xue ~]# cat < Hello 
    -bash: TEST: command not found
  • 相关阅读:
    vue换一换功能原型
    一些文章收集
    mint-ui popup自动关闭
    vue 实现二选一列表
    用数组实现矩阵乘法
    表格
    表单
    django项目创建和结构解释
    js操作元素样式
    操作标签属性
  • 原文地址:https://www.cnblogs.com/lengzhijun/p/4939377.html
Copyright © 2020-2023  润新知