当前位置:  建站>运营/SEO
本页文章导读:
    ▪IBM的LPI复习资料之LPI101-Topic103 :GNU和Unix命令(3)文件和目录管理      引言:你可能已经听说过在Linux中一切皆是文件,所以一定要打好基础,把文件和目录的管理如查找、列出、移动、复制、打包等学扎实。本文针对LPI 101考试,当然读者也可以为了兴趣来学习.........
    ▪tsung       yum install erlang 做HTTP测试: tsung rocorder tsung stop_recorder gedit ~/.tsung/tsung.xml 对配置稍作调整 ......
    ▪把当前目录下指定后缀名修改为其他后缀名      #!/bin/bash #把指定目录下的所有指定后缀名的文件替换为指定后缀名的文件 SELF=$0 DIR=$1 SRCSUFFIX=$2 DESTSUFFIX=$3 if [ $# -ne 3 ]; then echo "$SELF path,srcSuffix, destSuffix" exit 0 fi if [ -d $DIR ]; then .........

[1]IBM的LPI复习资料之LPI101-Topic103 :GNU和Unix命令(3)文件和目录管理
    来源: 互联网  发布时间: 2013-10-27

引言:你可能已经听说过在Linux中一切皆是文件,所以一定要打好基础,把文件和目录的管理如查找、列出、移动、复制、打包等学扎实。本文针对LPI 101考试,当然读者也可以为了兴趣来学习。

摘要:本文介绍几本的文件和目录管理命令,具体有

  • 列举目录中文件
  • 复制、移动或者删除文件和目录
  • 迭代操作多个文件和目录
  • 使用通配符
  • 使用find命令,根据文件类型、大小或者时间来查找定位文件
  • 使用gzip和bizp2来压缩和解压文件
  • 使用tar,cpio,dd来打包文件
本文帮助你为LPI-1的103.2复习,本部分权重是4。

列举目录中的文件
所有Linux和Unix中的文件都是从一个单根树状文件系统中获得,这个文件系统的为一个的根就是/。可以使用mount挂载更多的文件到这个树上,也可以使用unmount卸载树上的已有文件。

列举目录包含的项
本文中,我们将使用前一篇文章中创建的文件来做实验。

文件和目录的路径可以是绝对路径(以/开头),也可以是相对路径(相对于当前工作目录)。绝对路径以/开头,后面是目录的名称,目录之间使用/分隔。

给定一个文件或目录的相对路径,则当前工作目录的绝对路径/相对路径 就是文件或目录的绝对路径了。例如当前工作目录的绝对路径是 /home/ian,已知目录的相对路径是lpi103-2,则其绝对路径就是 /home/ian/lpi103-2。

使用pwd命令可以打印出当前的工作目录。有时候环境变量PWD也代表当前工作目录。下图展示了使用pwd命令,以及三种不同的方式来使用ls来列举目录中的文件。

[root@localhost lpi103-2]# pwd
/root/lpi103-2
[root@localhost lpi103-2]# ls
msg  sedtab  text1  text2  text3  text5  text6  xaa  xab  yaa  yab
[root@localhost lpi103-2]# ls $PWD
msg  sedtab  text1  text2  text3  text5  text6  xaa  xab  yaa  yab
[root@localhost lpi103-2]# ls /root/lpi103-2/
msg  sedtab  text1  text2  text3  text5  text6  xaa  xab  yaa  yab

可以看出,ls的参数可以是绝对路径,也可以是相对路径。

列举详细信息
在一个存储设备中,一个文件或者目录是被存放到被称为block的多个存储单元中的。一个文件的元信息则存放到inode中,它记录了文件的属主、修改时间、大小、是否是目录、读写权限等。inode号也被叫做文件序列号,在一个特定的文件系统中它是唯一的。我们可以使用-l选项(或者--format=long)来显示这些元信息。

默认情况下,ls不会显示以文件名.开头的文件。除了根目录,其他每个目录中至少有两个这样的文件:一个是目录本身(.),另一个是父目录(..)。根目录没有父目录。

下图展示了使用-l 和 -a选项来显示元信息以及以.开头的特殊文件。

[root@localhost lpi103-2]# ls -al
total 92
drwxr-xr-x   2 root root  4096 May  7 17:29 .
dr-xr-x---. 10 root root  4096 May  7 15:47 ..
-rw-r--r--   1 root root 43851 May  7 15:38 msg
-rw-r--r--   1 root root     8 May  7 17:14 sedtab
-rw-r--r--   1 root root    24 May  7 14:29 text1
-rw-r--r--   1 root root    25 May  7 14:48 text2
-rw-r--r--   1 root root    63 May  7 16:07 text3
-rw-r--r--   1 root root    24 May  7 16:41 text5
-rw-r--r--   1 root root    98 May  7 17:29 text6
-rw-r--r--   1 root root    15 May  7 15:15 xaa
-rw-r--r--   1 root root     9 May  7 15:15 xab
-rw-r--r--   1 root root    17 May  7 15:16 yaa
-rw-r--r--   1 root root     8 May  7 15:16 yab

上图第一行显示了列出的所有文件所占用的block数量。接下来的行报告了每个文件的情况。
  • 第一列报告了文件的类型以及权限。第一个字符表示文件的类型,其中d表示目录,-表示一般文件,-l表示符号链接,还有很多其他特殊的文件类型。接下来的9个字符被分成三组,每组三个字符。三个分组分别表示文件属主、同组用户、其他用户对文件的读、写、执行权限。
  • 第二列表示文件的硬链接数。我们说过,inode包含了文件的元信息。目录中的每一个项都包含了一个指向inode的指针,所以每一个文件至少有一个硬链接。对于目录来说,其自身又包含了表示自己的.,再加上父目录中对它的硬链接,所以至少有2个硬链接,又因为每个子目录中还有一个..来链接父目录,所以每增加一个子目录,父目录的硬链接数也就加1。如上图中/root共有10个硬链接。
  • 第三列第四列分别表示文件属主和属主的主分组,在一些如RedHat的系统中,每个用户默认有一个独立的分组,但是其他系统中可能不是这样。
  • 第五列是文件的长度,以字节为单位。
  • 倒数第二列,表示文件最后修改时间。
  • 最后一列是文件名。
ls -i 会显示文件的inode号。

[root@localhost lpi103-2]# ls -i
1839215 msg     1839209 text1  1839189 text3  1839219 text6  1839212 xab  1839214 yab
1839218 sedtab  1839210 text2  1839216 text5  1839211 xaa    1839213 yaa

(译者注:硬链接就是目录中存放的inode号,一个inode号在多少个目录中出现,就是有多少个硬链接。没有被硬链接了的inode,也就无法访问了,对应的文件也就相当于被删除了,上一个不严格的图帮助理解一下)

同时列举多个目录或文件

ls 可以同时接受多个文件或目录作为参数。对于目录名,ls默认会读取目录的内容然后列出每个项的元信息,而不是列出目录本身的元信息。可以使用-d选项来改变这种默认方式。如下:

[root@localhost lpi103-2]# ls -ld ../lpi103-2 sedtab xaa
drwxr-xr-x 2 root root 4096 May  7 17:29 ../lpi103-2
-rw-r--r-- 1 root root    8 May  7 17:14 sedtab
-rw-r--r-- 1 root root   15 May  7 15:15 xaa

排序输出结果

默认情况下,ls按照文件名排序输出。ls提供了很多选项来控制输出的排序,例如-t 是按照修改时间(最新修改在前)排序,-lS 则按照大小排序, -r则倒转排序先后。例如 -lrt会按照修改时间排序,并且最新修改的在最后输出。更多地选项参考man手册页。


复制、移动、删除文件

我们已经学会了一些创建文件的方法,那么如何复制、重命名、移动、或者删除文件呢?这要用到三个很短的命令:

  • cp 用于复制一个或多个文件或者目录。必须提供源和目的参数,源或目的参数可以包含路径。如果目标是一个存在的目录,那么所有的源都将复制到这个目录下。如果目标是一个不存在的目录, 那么源也必须是目录,然后一个源目录的拷贝就会产生,名称为目标名称。(译者注:在CentOS6中实验,结果不是这样)如果目标是文件,那么源也必须是文件,然后源文件的一份拷贝就会产生,并且以目标名为新名称,如果目标文件存在,则覆盖之。与DOS和Windows不同,这里的目标参数必须提供,不存在默认的目标参数。
  • mv 用于重命名或者移动一个或多个文件及目录。其规则与cp类似。因为文件名字只是其所在目录的一个项的属性,所以改名并不会影响inode编号。但是跨文件系统移动时,inode将会改变,因为这要靠复制然后删除原来的文件来实现。
  • rm 用于删除一个或者多个文件。后面我们会讨论删除目录的问题。

下面的实验使用了cp和mv来备份我们的文件,也使用了ls -i来显示文件的节点信息。

[root@localhost lpi103-2]# cp text1 text1.bkp
[root@localhost lpi103-2]# mkdir backup
[root@localhost lpi103-2]# cp text1 backup/text1.bkp.2
[root@localhost lpi103-2]# ls -i text1 text1.bkp backup/
1839209 text1  1839220 text1.bkp

backup/:
1839222 text1.bkp.2
[root@localhost lpi103-2]# mv text1.bkp backup
[root@localhost lpi103-2]# mv backup/text1.bkp backup/text1.bkp.1
[root@localhost lpi103-2]# ls -i text1 text1.bkp backup
ls: cannot access text1.bkp: No such file or directory
1839209 text1

backup:
1839220 text1.bkp.1  1839222 text1.bkp.2

  • 复制text1,得到副本text1.bkp
  • 使用mkdir创建了一个用于备份的子目录
  • 复制了text1的另外一个副本到backup目录中,然后显示了这三份同样的文件其对应的inode编号各不相同
  • 然后移动text1.bkp到了backup目录中,并且重新命名为text1.bkp.1
  • 然后核实了inode编号为1839220的text1.bkp文件已经不再存在lpi103-2中,inode编号不变,名称改变了的text1.bkp.1存到了backup目录中。
  • 正常情况下,如果目标文件存在,那么cp将会覆盖之。而mv却不会。 可以通过选项来控制cp 和 mv的覆盖行为。

    • -f 或者 --force 导致cp会尝试覆盖掉目标文件,即使目标文件不可写。
    • -i 或者
          
    [2]tsung
        来源: 互联网  发布时间: 2013-10-27
    Source Code: http://tsung.erlang-projects.org/
    Install:
    yum install erlang
    ./configure
    make
    sudo make install
    安装完成之后的 tsung 运行脚本在 /usr/bin/tsung ,在系统 path 之中,可以直接运行。
    Config:
    做HTTP测试:
    cp /usr/local/share/doc/tsung/examples/http_simple.xml ~/.tsung/tsung.xml

    tsung 采用了巧妙的 proxy 方式来“录制”测试脚本。具体来说,就是建立一个本机的 http proxy 默认使用 8090 端口,在配好 firefox 使用 localhost 8090 作为代理之后(推荐 foxyproxy 插件),所有“流经”这个 proxy 的 http 动作都会被记录下来,测试时可以“回放”这些步骤来产生请求。

    tsung rocorder
    tsung stop_recorder

    “录制”完了,会得到一个 ~/.tsung/tsung_recorderXXXXXXXXXX.xml 文件,这就是测试时回回放的脚本。

    将这个脚本加到 tsung.xml 之中

    gedit ~/.tsung/tsung.xml

    就像这样

    <!DOCTYPEtsungSYSTEM"/usr/share/tsung/tsung-1.0.dtd" [
     <!ENTITYmysession1SYSTEM"/home/yourname/.tsung/tsung_recorderXXXXXXXXXX.xml">
    ]>
    ...
    <sessions>
      &mysession1;
    </sessions>

    对配置稍作调整

    <monitoring>
        <monitorhost="localhost"type="erlang"></monitor>
      </monitoring>
      <!-- 需要配置到 localhost 无须密码的 ssh 登录(ssh via rsa_key),开启了这个配置可以,获得目标机器的 cpu 和 ram 消耗情况 -->
      <load>
       <arrivalphasephase="1"duration="1"unit
        
    [3]把当前目录下指定后缀名修改为其他后缀名
        来源: 互联网  发布时间: 2013-10-27

    #!/bin/bash
    #把指定目录下的所有指定后缀名的文件替换为指定后缀名的文件
    
    SELF=$0
    DIR=$1
    SRCSUFFIX=$2
    DESTSUFFIX=$3
    
    if [ $# -ne 3 ]; then
    	echo "$SELF path,srcSuffix, destSuffix"
    	exit 0
    fi
    
    
    
    if [ -d $DIR ]; then
       echo "$DIR is validate directory."
    else
    	echo "$DIR is invalidate directory."
    	exit 0
    fi
    
    find $DIR -name *.$SRCSUFFIX |  while read i
    do
      SRCNAME=$i
      echo "srcName is $SRCNAME";
      DESTNAME=${SRCNAME%.*}.$DESTSUFFIX
      echo "destName is $DESTNAME";
      mv $SRCNAME  $DESTNAME
    done

    工作中经常要把当前目录下指定后缀名(如×。cc)修改为指定后缀名(×。cpp)。写了一个脚本来做这个事情,在linux下测试通过。


    作者:jetlan 发表于2013-5-10 10:35:03 原文链接
    阅读:66 评论:0 查看评论

        
    最新技术文章:
     




    特别声明:169IT网站部分信息来自互联网,如果侵犯您的权利,请及时告知,本站将立即删除!

    ©2012-2021,,E-mail:www_#163.com(请将#改为@)

    浙ICP备11055608号-3