马哥教育网络班21期-第2周课程练习

2周课程练习

1、Linux上的文件管理类命令都有哪些,其常用的使用方法及其相关示例演示。

1.1、ls

ls: list列出目录内容显示指定路径下的文件列表;

格式

   ls [OPTION]… [DIR]…

常用选项:

-a, –all: 显示所有文件,包括隐藏文件;

blob.png

-l: 长格式

 blob.png

-rw-r–r– 1 root root 44800 Aug 14 14:32 install.log

-rw-r–r–

最左侧的第一位:文件类型

-, d, l, b, c, p, s

后面的9位:访问权限,perm

文件被硬链接的次数 文件的owner 文件的group 文件的size 文件的最近一次被修改的时间 文件名 

-h, –human-readable:单位换算

 blob.png

-d: 显示目录自身的相关属性;通常要与-l一起使用;

 blob.png

-r, –reverse: 逆序显示

 blob.png

-R, –recursive: 递归

 blob.png

1.2、cd

cd: 改变shell的工作目录,内部命令

      cd 或 cd ~: 回当前用户的主目录

     blob.png

      cd ~USERNAME: 切换至指定用户的主目录

     blob.png

      cd -: 在上一个目录和当前目录之间来回切换

    blob.png

1.3、文件内容类型查看命令file

file:用于查看普通文件和系统文件的类型

blob.png

格式:

file /PATH/TO/SOMEWHERE

blob.png

  常用选项:

    -b:列出文件辨识结果时,不显示文件名称

    blob.png

     -i:输出mime类型的字符串

    blob.png

1.4、文件查看命令cat、tac、more、less、head、tail

cat:连接并显示文件的信息,是全部显示文件内的信息

cat [OPTION]… [FILE]…

-E: 显示行结束符$

-n: 对显示出的每一行进行编号

 blob.png

  tac:反向输出文件内容

 blob.png

   more:more的作用同cat是相同的,只不过这时我们可以通过手动来翻屏,更加方便. 只支持向后翻,翻到最后就直接退出

 more [OPTIONS…] FILE…

 -d: 显示翻页及退出提示

   less: 显示文件信息,默认不退出显示,q即可退出

      less [OPTIONS…] FILE…

         空格:向后翻一屏

         b:向前翻一屏 

         ENTER:向后翻一行 

         k:向前翻一行 

       关键字查找: /KEYWORD:查找关键字

    head:显示文件的前几行,默认是10行

      head [OPTION]… [FILE]…

         -c #: 指定获取前#字节

         -n #: 指定获取前#行

       blob.png

    tail:显示文件的后几行,默认是10行

tail [OPTION]… [FILE]…

blob.png

         -c #: 指定获取后#字节

         -n #: 指定获取后#行

         -f: 跟踪显示文件新追加的内容;

1.5、tree:以目录树的形式显示目录

  blob.png

     -d: 只显示目录

     -L level:指定显示的层级数目

-P pattern: 只显示由指定pattern匹配到的路径;

1.6、目录创建删除mkdir、rmdir

    mkdir:创建目录

     mkdir [options] /path/to/somewhere

       -p: 递归,存在也不报错,且可自动创建所需的各目录;

       -v: 显示详细信息

       -m MODE: 创建目录时直接指定权限;

   rmdir:删除空目录

     rmdir [OPTION]… DIRECTORY…

       -v: 显示过程;

       -r:递归删除

       -f:强行删除

1.7、文件的时间戳管理工具touch

    文件:是由metadata和data组成

    查看文件状态:stat

    blob.png

   三个时间戳:

      access time:访问时间,简写为atime,读取文件内容

      modify time: 修改时间, mtime,改变文件内容(数据)

      change time: 改变时间, ctime,元数据发生改变

    touch命令:创建文件 

      touch [OPTION]… FILE…

          -a: only atime只改变文件的访问时间

          -m: only mtime只改变文件的修改时间

          -t STAMP: 只改变文件的修改时间

              [[CC]YY]MMDDhhmm[.ss]

          -c: 如果文件不存,则不予创建

1.8、文件管理类命令cp、mv、rm

复制命令:cp文件复制

    cp [OPTION]… [-T] SOURCE DEST

     cp [OPTION]… SOURCE… DIRECTORY

     cp [OPTION]… -t DIRECTORY SOURCE…

    法则:

     1、cp SRC DEST

        SRC是文件:如果目标不存在:新建DEST,并将SRC中内容填充至DEST中;如果目录存在:如果DEST是文件:将SRC中的内容覆盖至DEST中;此时建议为cp命令使用-i选项;如果DEST是目录:在DEST下新建与原文件同名的文件,并将SRC中内容填充至新文件中;

     2、cp SRC… DEST

        SRC…:多个文件:DEST必须存在,且为目录,其它情形均会出错;

     3、cp SRC DEST

        SRC是目录:此时一定要使用选项:-r。如果DEST不存在:则创建指定目录,复制SRC目录中所有文件至DEST中;如果DEST存在:如果DEST是文件:报错;如果DEST是目录:复制SRC目录中所有目录至DEST目录下。

     常用选项:

        -i:交互式

        -r, -R: 递归复制目录及内部的所有内容;

        -a: 归档,相当于-dR –preserv=all

        -d:–no-dereference –preserv=links 复制时保留原来的样子(不追踪符号链接)

        –preserv[=ATTR_LIST]:mode: 权限;ownership: 属主属组;timestamp: 时间戳;links链接属性;xattr:扩展属性;context:安全上下文all:所有

        -p: –preserv=mode,ownership,timestamp

        -v: –verbose,显示过程

        -f: –force:强制复制,覆盖

mv: move,移动文件或重命名文件 

       mv [OPTION]… [-T] SOURCE DEST

       mv [OPTION]… SOURCE… DIRECTORY

       mv [OPTION]… -t DIRECTORY SOURCE…

     常用选项:

         -i: 交互式

         -f: 强制

     法则:

         1、source是个文件:如果dest存在且是个文件,将source的内容填充至存在的文件中,且删除source的文件(覆盖);dest是个目录,则在目标目录下创建一个于源文件同名的文件。如果dest不存在,则以指定的名字命名,将source的内容填充,然后删除源文件

         2、source是多个文件:则目标必须存在,且是一个目录

         3、source是个目录:不加以区分目录和文件(同一个目录下操作相当于重命名)

   rm: remove,删除

       rm [OPTION]… FILE…

      常用选项:

          -i: 交互式

          -f: 强制删除

          -r: 递归

       rm -rf:强制删除指定目录及目录下所有文件

          –preserve-root:默认不允许删除根

 

2、bash的工作特性之命令执行状态返回值和命令行展开所涉及的内容及其示例演示。

2.1、命令执行状态返回值

    程序执行有两类结果:

     程序的返回值;

     程序的执行状态结果;

在 Linux 下,不管你是启动一个桌面程序也好,还是在控制台下运行命令,所有的程序在结束时,都会返回一个数字值,这个值叫做返回值,或者称为错误号 ( Error Number )。

blob.png

只要返回值是 0,就代表程序执行成功

blob.png

如果 $? 变量的值不是 0 的话,就表示上一个命令在执行的过程中出错了。1-255都表示失败。

2.2、命令行展开

2.2.1、花括号展开

在非引号内的内容,如果用花括号包括,而且里面用逗号分隔(至少包含一个逗号,可以是空内容),这样花括号里的内容会被展开成用空格分开的一个列表,花括号前后可以紧随前缀和后缀(前后缀都是可选的)。

blob.png

2.2.2、波浪号展开

  从波浪号~到第一个未被引号包含的斜杠/(如果没有斜杠,则全部算上),作为波浪号前缀。在波浪号后面的字符串作为一个可能的登录名:如果为空,被展开成该用户的HOME变量,如果HOME变量未设置,则用用户执行shell的主目录替换。如果不为空,则按照该登录名的主目录替换

     ~: 展开为用户的主目录

     ~USERNAME:展开为指定用户的主目录

     blob.png

2.2.3、Shell参数和变量展开

用$符号开始,后面接着变量名或者花括号括起来的变量名,如果是花括号内以叹号开头,那么就是变量名本身。

echo $PWD     # 显示PWD对应的值

echo ${PWD}    # 显示PWD对应的值

echo ${!PWD}   # 显示“PWD”这个变量名,而不是它的值

echo ${!P*}    # 显示所有以P开头的环境变量名

如果一个变量名不存在,就创建它。

echo ${HELLO:=hello}  # 如果HELLO不存在,就用hello给它赋值,否则直接输出$HELLO的值

blob.png

3、请使用命令行展开功能来完成以下练习:

   (1)、创建/tmp目录下的:a_c, a_d, b_c, b_d

     touch /tmp/{a,b}_{c,d}

      blob.png

   (2)、创建/tmp/mylinux目录下的:

mylinux/

    ├── bin

    ├── boot

    │   └── grub

    ├── dev

    ├── etc

    │   ├── rc.d

    │   │   └── init.d

    │   └── sysconfig

    │       └── network-scripts

    ├── lib

    │   └── modules

    ├── lib64

    ├── proc

    ├── sbin

    ├── sys

    ├── tmp

    ├── usr

    │   └── local

    │       ├── bin

    │       └── sbin

    └── var

        ├── lock

        ├── log

        └── run

   mkdir -p /tmp/mylinux/{bin,boot/grub,dev,etc/{rc.d/init.d,sysconfig/network-scripts},lib/modules,lib64,proc,sbin,sys,tmp,usr/local/{bin,sbin},var/{lock,log,run}}

      blob.png

4、文件的元数据信息有哪些,分别表示什么含义,如何查看?如何修改文件的时间戳信息。

任何文件系统中的数据分为数据和元数据。数据是指普通文件中的实际数据,而元数据指用来描述一个文件的特征的系统数据,诸如访问权限、文件拥有者以及文件数据块的分布信息(inode…)等等。

元数据用于记录文件的许多信息,比如文件大小,拥有人,所属的组,修改日期等等。元数据并不包含在文件的数据中,而是由操作系统维护的。事实上,这个所谓的元数据就包含在inode中。我们可以用$ls -l来查看这些元数据。正如我们上面看到的,inode所占据的区域与数据块的区域不同。每个inode有一个唯一的整数编号(inode number)表示。

在保存元数据,inode是“文件”从抽象到具体的关键。inode储存有一些指针,这些指针指向存储设备中的一些数据块,文件的内容就储存在这些数据块中。当Linux想要打开一个文件时,只需要找到文件对应的inode,然后沿着指针,将所有的数据块收集起来,就可以在内存中组成一个文件的数据了。

blob.png

inode并不是组织文件的唯一方式。最简单的组织文件的方法,是把文件依次顺序的放入存储设备,DVD就采取了类似的方式。但如果有删除操作,删除造成的空余空间夹杂在正常文件之间,很难利用和管理。

复杂的方式可以使用链表,每个数据块都有一个指针,指向属于同一文件的下一个数据块。这样的好处是可以利用零散的空余空间,坏处是对文件的操作必须按照线性方式进行。如果想随机存取,那么必须遍历链表,直到目标位置。由于这一遍历不是在内存进行,所以速度很慢。

FAT系统是将上面链表的指针取出,放入到内存的一个数组中。这样,FAT可以根据内存的索引,迅速的找到一个文件。这样做的主要问题是,索引数组的大小与数据块的总数相同。因此,存储设备很大的话,这个索引数组会比较大。

inode既可以充分利用空间,在内存占据空间不与存储设备相关,解决了上面的问题。但inode也有自己的问题。每个inode能够存储的数据块指针总数是固定的。如果一个文件需要的数据块超过这一总数,inode需要额外的空间来存储多出来的指针。

例如:在Linux中,我们通过解析路径,根据沿途的目录文件来找到某个文件。目录中的条目除了所包含的文件名,还有对应的inode编号。当我们输入$cat /var/test.txt时,Linux将在根目录文件中找到var这个目录文件的inode编号,然后根据inode合成var的数据。随后,根据var中的记录,找到text.txt的inode编号,沿着inode中的指针,收集数据块,合成text.txt的数据。整个过程中,我们参考了三个inode:根目录文件,var目录文件,text.txt文件的inodes。

在Linux下,可以使用$stat filename,来查询某个文件对应的inode编号。

 blob.png

在存储设备中实际上存储为:

blob.png

当我们读取一个文件时,实际上是在目录中找到了这个文件的inode编号,然后根据inode的指针,把数据块组合起来,放入内存供进一步的处理。当我们写入一个文件时,是分配一个空白inode给该文件,将其inode编号记入该文件所属的目录,然后选取空白的数据块,让inode的指针指像这些数据块,并放入内存中的数据。

使用stat /PATH/TO/SOMEFILE来获取指定文件的元数据

blob.png

Access:最后访问时间

Modify:最后修改时间

Change:状态更改时间(由系统维护,无法随意修改)

touch -a :仅更新Access time(同时更新Change为current time)

blob.png

touch -m:仅更新Modify time(同时更新Change为current time)

blob.png

touch -c:不创建新文件

touch -t:使用指定的时间更新时间戳(仅更改Access time与Modify time,Change time更新为current time)

5、如何定义一个命令的别名,如何在命令中引用另一个命令的执行结果?

5.1定义别名

命令别名,通过alias命令实现:

  (1)alias:显示当前shell进程所有可用的命令别名;

  blob.png    

  (2)alias NAME='VALUE'

 定义别名NAME,其相当于执行命令VALUE;

 blob.png

 blob.png 

注意:

   在命令行中定义的别名,仅对当前shell进程有效;如果想永久有效,要定义在配置文件中;

            仅对当前用户:~/.bashrc

            对所有用户有效:/etc/bashrc

   bash进程重新读取配置文件:

             source /path/to/config_file

             ./path/to/config_file

  撤消别名:unalias

     unalias [-a] name [name …]

    如果别名同原命令的名称,则如果要执行原命令,可使用"\COMMAND";

5.2、命令引用

5.2.1、命令引用和替换(通过变量的方式)

引用:就是指将字符串用引用符号括起来,以防止特殊字符被shell脚本解释为其他意义。引用时屏蔽特殊字符的特殊意义,而将其解释为字面意义。

blob.png

blob.png

替换:将命令的标准输出作为值赋给某个变量,bash Shell定义了两种形式进行命令的替换,两种形式的语法格式如下:

  方式一: `COMMAND`

  方式二: $(COMMAND)

  blob.png

5.2.2、管道和重定向

重定向:通常在Shell命令中最常见到三种输入输出类型,标准输入(stdin),标准输出(stdout)以及标准错误输出(stderr),感觉跟C/C++里边文件划分类似。 stdin一般指command接受的输入流,stdout指command正常输出情况,默认输出显示到终端,stderr则是command的错误输出,默认也是输出显示到终端。 而文件描述符则是与一个打开的文件或数据流相对应的一个整数,系统将0,1,2分别与标准输入,标准输出以及标准错误输出相对应。

1)输出重定向:

重定向符号>以及>>意为输出重定向,包括标准输出以及标准错误输出,也是一般命令中比较常见的情况,与stdout及stderr两两组合就是四种情况

1>表示标准输出重定向,覆盖

  blob.png

  1>>表示标准输出重定向,追加

  blob.png

2>表示标准错误输出重定向,覆盖

  blob.png

  2>> 表示标准错误输出重定向,追加

  blob.png

标准输出和错误输出各自定向至不同位置:

COMMAND > /path/to/file.out 2> /path/to/error.out

 blob.png

 blob.png

合并标准输出和错误输出为同一个数据流进行重定向:

   &>:覆盖重定向

   &>>:追加重定向

2)输入重定向:

和输出重定向一样,Unix 命令也可以从文件获取输入,语法为:

   command < file

这样,本来需要从键盘获取输入的命令会转移到文件读取内容。

   Here Document

      Here Document 目前没有统一的翻译,这里暂译为”嵌入文档“。Here Document 是 Shell 中的一种特殊的重定向方式

      # cat << EOF

      # cat > /path/to/somefile << EOF

   它的作用是将两个EOF 之间的内容(document) 作为输入传递给 command。

   blob.png

注意:

结尾的EOF 一定要顶格写,前面不能有任何字符,后面也不能有任何字符,包括空格和 tab 缩进。

tr命令:转换或删除字符 

格式:tr [OPTION]… SET1 [SET2]

 blob.png

-d:可以实现删除出现在字符集中的所有字符

3)管道:

COMMAND1 | COMMAND2 | COMMAND3 |…

最后一个命令会在当前shell进程的子shell进程中执行;

blob.png

6、显示/var目录下所有以l开头,以一个小写字母结尾,且中间至少出现一位数字(可以有其它字符)的文件或目录。

# ls -d /var/l*[0-9]*[a-z]

blob.png

7、显示/etc目录下,以任意一个数字开头,且以非数字结尾的文件或目录。

# ls -d /etc/[0-9]*[^0-9]

blob.png

8、显示/etc目录下,以非字母开头,后面跟了一个字母以及其它任意长度任意字符的文件或目录。

# ls -d /etc/[^[:alpha:]][[:alpha:]]*

blob.png

9、在/tmp目录下创建以tfile开头,后跟当前日期和时间的文件,文件名形如:tfile-2016-05-27-09-32-22。

mkdir /tmp/tfile-`date +%Y-%m-%d-%H-%M-%S`

  blob.png

10、复制/etc目录下所有以p开头,以非数字结尾的文件或目录到/tmp/mytest1目录中。

# mkdir /tmp/mytest1

# cp -r /etc/p*[^[:digit:]] /tmp/mytest1

blob.png

11、复制/etc目录下所有以.d结尾的文件或目录至/tmp/mytest2目录中。

# mkdir /tmp/mytest2

# cp -r /etc/*.d /tmp/mytest2

blob.png

12、复制/etc/目录下所有以l或m或n开头,以.conf结尾的文件至/tmp/mytest3目录中。

# mkdir /tmp/mytest3

# cp -r /etc/[lmn]*.conf /tmp/mytest3

blob.png

原创文章,作者:N21_我爱罗,如若转载,请注明出处:http://www.178linux.com/22254

(0)
N21_我爱罗N21_我爱罗
上一篇 2016-07-07
下一篇 2016-07-07

相关推荐

  • 编译安装dropbear

    ssh协议的另一个实现:dropbear 编译安装dropbear [root@centos6 ~]# tar xf dropbear-2013.58.tar.bz2  [root@centos6 ~]# cd dropbear-2013.58 [root@centos6&nbs…

    Linux干货 2016-09-28
  • 磁盘存储和文件系统

    磁盘存储和文件系统: 磁盘设备的文件命名:/dev/dev_file虚拟磁盘:/dev/vd磁盘标识: /dev/sda,/dev/sdb……磁盘分区:/dev/sda1,/dev/sdb2…… chs 磁盘sector 扇区 512bytestrack 磁道head 磁头cylinder柱面 使用磁盘: 分区创建文件系统:格式化挂载:分配目录名 hexdu…

    Linux笔记 2018-05-20
  • 文本处理工具

    cat:查看文本文件  tac:竖行相反  rav:行内相反 -n:显示时加行号(空行也加行号) -b:            (空行不加) more:分页查看文件 -d:显示翻页及退出提示 less:一页一页查看文件或STDIN输出 head:前 -n#:前#行内容 tail:…

    Linux干货 2016-08-08
  • 第一次测试

    1.第一层  video  视频 2.第二层  audio  音频 3.第三层  字幕 查看视频详细信息 ffmpeg -i 视频文件 转码修改视频格式 ffmpeg -i 输入文件   输出文件格式 视频文件中提取音频和视频 提取视频中的音频 ffmpeg -i CP0454900262.ts -…

    Linux干货 2017-02-06
  • ansible的使用

    运维自动化发展历程及技术应用 IAAS基础设置即服务,提供硬件服务 PAAS平台即服务,提供操作系统服务 SAAS软件即服务,提供整套服务   ansible的安装 yum -y install ansible ansible –version 查看版本信息   /etc/ansible/ansible.cfg  配置文件 /…

    2018-06-04

评论列表(1条)

  • 马哥教育
    马哥教育 2016-07-07 11:22

    写的很好,排版还可以在漂亮一点,就不要贴黑屏的截图了,加油