; N21_第二周练习 | Linux运维部落

N21_第二周练习

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

文件管理类命令:cp,mv.rm

复制命令:cp

格式:

       cp [OPTION]… [-T] SOURCE DEST

       cp [OPTION]… SOURCE… DIRECTORY

       cp [OPTION]… -t DIRECTORY SOURCE…

场景:

       cp SRC  DEST

            SRC是文件

              如果目标不存在:新建DEST,并将SRC中内容填充至DEST中;

              如果目标存在:

                    如果DEST是文件:将SRC中的内容覆盖至DEST中;

                        此时建议为cp命令使用-i选项;

                    如果DEST是目录:在DEST下新建与原文件同名的文件,并将SRC中内容填充至新文件中

       cp SRC …..DEST

            SRC…:多个文件

                DEST必须存在,且为目录,其它情形均会报错;

        cp SRC DEST

            SRC是目录:

                此时使用选项:-r

                如果DEST不存在:则创建指定目录,复制SRC目录中所有文件至DEST中;

                如果DEST存在:

                    如果DEST是文件:报错

                    如果DEST是目录:复制SRC目录中文件到DEST

选项:

      -i: 交互的,root用户默认使用cp -i,普通用户没有,复制要注意,如果觉得交互麻烦可以使用\cp

      -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

     -n: 不覆盖已经存在的文件

实例:

   [root@www ~]# cp install.log /opt/
   cp:是否覆盖"/opt/install.log"?
   [root@www ~]# \cp install.log /opt/   直接覆盖了

   [root@www ~]# ll install.log
   -rw-r--r--. 1 root root 12705 3月  10 22:40 install.log
   [root@www ~]# ll /opt/install.log
   -rw-r--r-- 1 root root 12705 7月  12 01:41 /opt/install.log
   [root@www ~]# cp -a install.log /opt/
   cp:是否覆盖"/opt/install.log"? y
   [root@www ~]# ll /opt/install.log
   -rw-r--r--. 1 root root 12705 3月  10 22:40 /opt/install.log

 

  [root@www ~]# cp -s install.log install.logs
   lrwxrwxrwx  1 root root     11 7月  12 01:44 install.logs -> install.log    这种链接只能在同一目录下

mv: 

move:移动文件

格式:

      mv [OPTION]… [-T] SOURCE DEST

      mv [OPTION]… SOURCE… DIRECTORY

      mv [OPTION]… -t DIRECTORY SOURCE…

常用选项:

     -i:   交互,和cp类似

     -f:  强制覆盖

     -b: 覆盖前先行备份

     -u: 源文件比目标文件新时才执行更新

     -t:–target-directory=DIRECTORY move all SOURCE arguments into DIRECTORY,即指定mv的目标目录,该选项适用于移动多个源文件到一个目录的情况,此时目标目录在前,源文件在后。

实例:

[root@www ~]# mv -b install.log /opt/
mv:是否覆盖"/opt/install.log"? y
[root@www ~]# ls /opt/
install.log  install.log~

[root@www ~]# echo 123 > a.txt
[root@www ~]# cat a.txt
123
[root@www ~]# cd test
[root@www test]# touch a.txt    此文件比较新,根据时间戳来对比谁比较新
[root@www test]# cd
[root@www ~]# mv -uv a.txt test/a.txt
[root@www ~]# cat !$
cat test/a.txt

rm

remove:删除命令

格式:

     rm [OPTION]… FILE…

选项:

     -i: 交互式删除

     -f: 强制删除

     -r: 递归删除

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

命令执行状态返回值:

命令执行的结果状态有两种:

            成功

            失败

bash使用特殊变量$?保存最近一条命令的执行状态结果:

            0:成功

            1-255:失败

实例:

[root@www ~]# $?
-bash: 0: command not found
[root@www ~]# echo $?
127
[root@www ~]# echo $?
0

命令行展开:

~: 展开为用户的主目录

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


[root@www ~]# echo ~
/root
[root@www ~]# echo ~yunweil
~yunweil


{}:  可承载一个以逗号分隔的列表,并将其展开为多个路径

            /tmp/{a,b} = /tmp/a, /tmp/b

            /tmp/{tom,jerry}/hi = /tmp/tom/hi, /tmp/jerry/hi

    注意:花括号展开,前缀不能是$,因为${…}在shell中是变量

3、请使用命令行展开功能来完成以下练习:
   (1)、创建/tmp目录下的:a_c, a_d, b_c, b_d
   (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 /tmp/{a,b}_{c,d}
mkdir -pv /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}}

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

文件的元数据信息:

[root@www ~]# stat url.txt
  File: "url.txt"
  Size: 1636          Blocks: 8          IO Block: 4096   普通文件
Device: 803h/2051d    Inode: 65273859    Links: 1
Access: (0644/-rw-r--r--)  Uid: (    0/    root)   Gid: (    0/    root)
Access: 2016-07-12 02:03:05.820622061 +0800
Modify: 2016-07-12 02:01:47.440622125 +0800
Change: 2016-07-12 02:02:26.868622093 +0800

File:文件名

size:文件大小   Blocks:block个数    block大小   文件类型

块大小             Inode号     硬链接数

权限                属主          属组

访问时间

修改时间

改变时间


当然使用stat命令查看

  选项:

      -f:显示了有关文件系统(而非文件)的信息

      -t:显示了完全相同的信息

[root@www ~]# stat -f a.txt
File: "a.txt"
ID: 869a0aa813c1d46d Namelen: 255     Type: ext2/ext3
Block size: 4096       Fundamental block size: 4096
Blocks: Total: 471905300  Free: 459379307  Available: 435406251
Inodes: Total: 119865344  Free: 119773822
[root@www ~]# stat -t a.txt
a.txt 4 8 81a4 0 0 803 94241008 1 0 0 1468260441 1468260439 1468260439 4096

如何修改时间戳?

时间戳:

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

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

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

touch命令:

    touch [OPTION]… FILE…

     -a或–time=atime或–time=access或–time=use  只更改存取时间

     -m或–time=mtime或–time=modify  只更改变动时间

     -t<日期时间>:  使用指定的日期时间,而非现在的时间。

     -c或–no-create:  不建立任何文件

     -r: 把指定文档或目录的日期时间,统统设成和参考文档或目录的日期时间相同。

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

定义命令别名:使用alias命令

    (1) alias

             显示当前shell进程所有可用的命令别名;

    (2) alias NAME='VALUE'

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

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

               仅对当前用户:~/.bashrc

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

               编辑配置给出的新配置不会立即生效;

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

                source /path/to/config_file

                .  /path/to/config_file

   撤消别名:unalias

          unalias [-a] name [name …]

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

引用另一个命令的执行结果

  目前知道如下几种:

      1、通过引用符:"",'',“

      2、通过变量:将命令执行结果定义为变量

      3、通过重定向

      4、通过管道


[root@www ~]# echo "This day is `date +%F`"
This day is 2016-07-12

[root@www ~]# day=`date +%F`
[root@www ~]# echo day is $day
day is 2016-07-12

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

ls /var/l*[[:digit:]]*[[:lower:]]
ls /var/l*[0-9]*[a-z]

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

ls /etc/[[:digit:]]*[^[:digit:]]
ls /etc/[0-9]*[^0-9]

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

ls /etc/[^[:alpha:]][[:alpha:]]*

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

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

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

mkdir /tmp/mytest1
cp -a /etc/p*[^[:digit:]] /tmp/mytest1

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

mkdir /tmp/mytest2
cp -a /etc/*.d /tmp/mytest2

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

cp -a /etc/[lmn]*.conf /tmp/mytest2

原创文章,作者:N21_Lorne,如若转载,请注明出处:/24070

评论列表(1条)

  • 马哥教育
    马哥教育 2016-07-17 21:44

    写的很好,排版还可以在改进一下,加油

联系我们

400-080-6560

在线咨询:点击这里给我发消息

邮件:1660809109@qq.com

工作时间:周一至周五,9:30-18:30,节假日同时也值班

友情链接:万达主管  万达娱乐直属QQ  万达娱乐主管  万达娱乐招商  万达招商QQ  万达直属  万达招商QQ  华宇招商  万达主管QQ  测试