本周作业内容:

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

    复制:cp

        cp [option] SRC... DEST

        SRC是单个文件:

            如果DEST不存在,则新建DEST,并将SRC中的内容填充到DEST中

            如果DEST存在:

                如果DEST是文件,则将SRC中的内容覆盖到DEST中

                如果DEST是目录,将SRC复制到DEST中,并保持原名

        SRC是多个文件:

            DEST必须是目录并且存在,其它情形均会出错

        SRC是目录:

            使用-r选项,递归复制

            如果DEST不存在,则新建DEST目录,并将SRC中的内容复制到DEST中

            如果DEST存在:

                如果DEST是文件,会报错

                如果DEST是目录,将SRC目录复制到DEST目录下

        常用选项:

            -p:相当于--preserve=mode,ownership,timestamps,保留权限、属主、时间等

            -d : 相当于--no-dereference --perserv-links复制符号链接文件本身,而非其指向的目标文件

            -a:相当于-dR --preserve=all ,归档,保留所有的原属性

            -i:交互式选项,执行危险操作会询问用户

            -f:--force,强制执行

            -r -R: 递归复制

            -v:显示详细信息

     示例:

[root@www tmp]# cp /tmp/passwd /tmp/test
[root@www tmp]# cp -a /tmp/dir1 /tmp/dir2

   

     移动:mv

        mv [option] SRC... DEST

        SRC是单个文件:

            如果DEST不存在,则移动SRC并重命名为DEST

            如果DEST存在:

                如果DEST是文件,将SRC中的内容覆盖到DEST中,并删除SRC

                如果DEST是目录,将SRC移动到DEST中,并保持原名

        SRC是目录:

            DEST必须是目录

            如果DEST不存在,则移动SRC并重命名为DEST

            如果DEST存在,将SRC目录移动到DEST目录下

        常用选项:

            -i:交互式选项

            -f:--force,强制执行

    示例:

[root@www tmp]# mv test ./dir1
[root@www tmp]# mv /tmp/dir1/test /tmp/test2


    删除:rm

        rm [option]... FILE...

            -r 递归,删除目录

            -f 强制执行

            -i:交互式选项

            --no-preserve-root 强制删除/

    示例:

[root@www tmp]# rm -f test2 
[root@www tmp]# rm -rf dir1


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

    bash的工作特性之一:命令执行状态返回值

        每个命令执行结束后,会有一个“执行状态返回值”,有效值0-255

        0:成功

        1-255:执行失败

        使用特殊变量$?可以获取最近一条命令的状态返回值

            echo $?

    示例:

[root@www ~]# echo test
test
[root@www ~]# echo $?
0 
[root@www tmp]# echoo test
-bash: echoo: command not found
[root@www tmp]# echo $?
127
[root@www tmp]# cd /tmp/dir1
-bash: cd: /tmp/dir1: No such file or directory
[root@www tmp]# echo $?
1

    bash的工作特性之一:命令行展开

        ~:用户家目录

        ~USERNAME:指定用户的家目录

        {}:花括号展开,用花括号包括,里面用逗号分隔,这样花括号里的内容会被展开成用空格分开的一个列表,花括号前后可以紧随前缀和后缀。

            /tmp/{x,y}

                /tmp/x,/tmp/y

            /tmp/{x,y}/z

                /tmp/x/z,/tmp/y/z

        示例:

[root@www tmp]# mkdir /tmp/{x,y}
[root@www tmp]# ls
dir2  hsperfdata_root  orbit-root  passwd  x  y
[root@www tmp]# mkdir /tmp/{x,y}/z
[root@www tmp]# tree 
.
├── dir2
│   └── dir1
├── hsperfdata_root
│   └── 2418
├── orbit-root
├── passwd
├── x
│   └── z
└── y
     └── z


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

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

[root@www tmp]# touch /tmp/{a,b}_{c,d}
[root@www tmp]# ls
a_c  a_d  b_c  b_d  dir2  hsperfdata_root  orbit-root  passwd  x  y


(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

[root@www tmp]# 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}
[root@www tmp]# tree /tmp/mylinux/
/tmp/mylinux/
├── bin
├── boot
│   └── grub
├── dev
├── etc
│   ├── rc.d
│   │   └── init.d
│   └── sysconfig
│       └── network-scripts
├── lib
│   └── modules
├── lib64
├── lock
├── log
├── proc
├── run
├── sbin
├── sys
├── tmp
├── usr
│   └── local
│       ├── bin
│       └── sbin
└── var


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

    查看元数据属性:stat

        stat /path/file

            file:文件名

            size:文件大小

            Links:链接数

            Access:文件的权限

            Uid:属主

            Gid:属组

            时间戳:

                atime:访问时间

                mtime:修改时间

                ctime:改变时间

[root@www tmp]# stat passwd 
  File: `passwd'
  Size: 196       Blocks: 8          IO Block: 4096   regular file
Device: 802h/2050dInode: 298144      Links: 1
Access: (0644/-rw-r--r--)  Uid: (    0/    root)   Gid: (    0/    root)
Access: 2016-05-25 23:52:28.899711275 +0800
Modify: 2016-05-25 23:52:18.223711084 +0800
Change: 2016-05-25 23:52:18.223711084 +0800


    时间戳管理:touch

        touch [option] ..file

            如果file不存在,默认会创建一个空文件

                touch -a :仅改变atime

                touch -m :仅改变mtime

                touch -c :不创建空文件

                touch -t [[CC]YYMMDDhhmm[.ss]]:修改时间


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

    bash特性之命令别名:

        alias

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

        alias ALIAS=COMMAND

            定义别名

    别名与命令同名时要使用原来的命令:

        \COMMAND

    注意:命令行定义的别名,只在当前会话生效,如果想永久生效,要定义配置文件

        如果对当前用户永久生效,修改~/.bashrc

        如果对所有用户永久生效,修改/etc/bashrc

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

        source /path/to/config_file

        . /path/to/config_file

    unalias ALIAS:取消别名

        -a :撤销所有别名

    引用另一个命令的结果:

        ``

        $()

        示例:

[root@www tmp]# ls -l `which --skip-alias ls`
-rwxr-xr-x. 1 root root 117024 Nov 22  2013 /bin/ls
[root@www tmp]# ls -l $(which --skip-alias ls)
-rwxr-xr-x. 1 root root 117024 Nov 22  2013 /bin/ls


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

ls -d /var/l*[0-9]*[[:lower:]]


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

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


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

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


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

touch /tmp/tfile-$(date +%Y-%m-%d-%H-%M-%S)
# ls /tmp/tfile-*
/tmp/tfile-2016-08-12-14-03-02


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

mkdir /tmp/mytest1
cp -a /etc/p*[^0-9] /tmp/mytest1


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

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


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

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