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

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

cp命令

cp命令用来将一个或多个源文件或者目录复制到指定的目的文件或目录。它可以将单个源文件复制成一个指定文件名的具体文件或一个已经存在的目录下。cp命令还支持同时复制多个文件,当一次复制多个文件时,目标文件参数必须是一个已经存在的目录,否则将出现错误。 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是目录:

语法

cp (选项) (参数)

选项

    -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

参数

  • SRC 源文件

  • DEST 目标文件

实例

/etc/fstab复制到/root/Desktop,且目标文件已存在
[root@hadoop Desktop]# cp  /etc/fstab ./
cp: overwrite `./fstab'?
/root/Desktop/repo目录下的所有文件复制到/root/Desktop/test目录下,且目标文件目录不存在
[root@hadoop Desktop]# ls
fstab  passwd  repo  scripts
[root@hadoop Desktop]# cp -r ./repo/ ./test/
[root@hadoop Desktop]# ls
fstab  passwd  repo  scripts  test
/root/Desktop下的文件fstabpasswd复制到/root/Desktop/test
[root@hadoop Desktop]# cp passwd fstab ./test
/root/Desktop/fstab复制为cptest
[root@hadoop Desktop]# cp fstab cptest
/root/Desktop/test下的所有文件复制到/root/Desktop/test2
[root@hadoop Desktop]# ll ./test/
total 24
-rw-r--r--. 1 root root 1926 Jul 11 19:32 CentOS-Base.repo
-rw-r--r--. 1 root root  638 Jul 11 19:32 CentOS-Debuginfo.repo
-rw-r--r--. 1 root root  653 Jul 11 19:32 CentOS-Media.repo
-rw-r--r--. 1 root root 3664 Jul 11 19:32 CentOS-Vault.repo
-rw-r--r--. 1 root root  779 Jul 11 19:37 fstab
-rw-r--r--. 1 root root 1660 Jul 11 19:37 passwd
[root@hadoop Desktop]# cp -r -a ./test/ ./test1/
[root@hadoop Desktop]# ll ./test1/
total 24
-rw-r--r--. 1 root root 1926 Jul 11 19:32 CentOS-Base.repo
-rw-r--r--. 1 root root  638 Jul 11 19:32 CentOS-Debuginfo.repo
-rw-r--r--. 1 root root  653 Jul 11 19:32 CentOS-Media.repo
-rw-r--r--. 1 root root 3664 Jul 11 19:32 CentOS-Vault.repo
-rw-r--r--. 1 root root  779 Jul 11 19:37 fstab
-rw-r--r--. 1 root root 1660 Jul 11 19:37 passwd

mv命令

mv命令用来对文件或目录重新命名,或者将文件从一个目录移到另一个目录。

语法

mv (选项) (参数)

选项

        -i: 交互式
        -f: 强制

参数

  • SRC 源文件

  • DEST 目标文件

实例

/root/Desktop/fstab改名为mvtest
[root@hadoop Desktop]# mv -i fstab mvtest
/root/Desktop/test1移到./test2
[root@hadoop Desktop]# mv ./test1/ ./test2/

rm命令

rm命令可以删除一个目录中的一个或多个文件或目录,也可以将某个目录及其下属的所有文件及其子目录均删除掉。

语法

rm (选项)(参数)

选项

        -i: 交互式
        -f: 强制删除
        -r: 递归

实例

删除/root/Desktop/目录下的fstab和'passwd'
[root@hadoop Desktop]# rm -i ./fstab passwd
rm: remove regular file `./fstab'? y
rm: remove regular file `passwd'? y
删除/root/Desktop/test2下的所有文件
[root@hadoop Desktop]# rm -rf ./test2

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

命令的执行结果状态

    成功
    失败

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

        0:成功
        1-255:失败

实例

[root@hadoop Desktop]# ls
cptest  repo  scripts  test
[root@hadoop Desktop]# echo $?
0
[root@hadoop Desktop]# ls ./aaa
ls: cannot access ./aaa: No such file or directory
[root@hadoop Desktop]# echo $?
2

命令行展开

    ~: 展开为用户的主目录
    ~USERNAME:展开为指定用户的主目录
    {}:可承载一个以逗号分隔的列表,并将其展开为多个路径
        /tmp/{a,b} = /tmp/a, /tmp/b
        /tmp/{tom,jerry}/hi = /tmp/tom/hi, /tmp/jerry/hi

实例

~展开:
[root@hadoop Desktop]# pwd
/root/Desktop
[root@hadoop Desktop]# cd ~
[root@hadoop ~]# pwd
/root
{}展开:
[root@hadoop ~]# mkdir -pv /tmp/{a,b}
mkdir: created directory `/tmp/a'
mkdir: created directory `/tmp/b'

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

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

[root@hadoop ~]# mkdir -pv /tmp/{a,b}_{c,d}
mkdir: created directory `/tmp/a_c'
mkdir: created directory `/tmp/a_d'
mkdir: created directory `/tmp/b_c'
mkdir: created directory `/tmp/b_d'

(2).创建/tmp/mylinux目录下的一系列目录

[root@hadoop tmp]# mkdir -pv /tmp/mylinux/{bin,boot/grub,dev,etc/{rc.d/init.d,sysconfig/network-scripts},lib/modules,lib64,proc/sbin,sys,tmp,usr/{bin,sbin},var/{lock,log,run}}

[root@hadoop tmp]# tree /tmp/mylinux
/tmp/mylinux
├── bin
├── boot
│   └── grub
├── dev
├── etc
│   ├── rc.d
│   │   └── init.d
│   └── sysconfig
│       └── network-scripts
├── lib
│   └── modules
├── lib64
├── proc
│   └── sbin
├── sys
├── tmp
├── usr
│   ├── bin
│   └── sbin
└── var
    ├── lock
    ├── log
    └── run

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

元数据信息

[root@hadoop Desktop]# ls -l /etc/fstab
-rw-r--r--. 1 root root 779 Feb  1 15:55 /etc/fstab

-rw-r--r--共有10个小段
第一小段代表的文件类型:
    -(f):普通文件
    d:目录文件
    b:块设备文件
    c:字符设备
    l:符号连接
    p:管道文件
    s:套接字文件

rw-表示用户的权限,r--表示所属组的权限,r--表示其他用户的权限。
    r:只读权限
    w:可写权限
    x:执行权限
之后是文件的属主、属组、文件大小以及最后的访问时间。

时间戳

查看时间戳:stat命令
[root@hadoop Desktop]# stat  /etc/fstab
  File: `/etc/fstab'
  Size: 779         Blocks: 8          IO Block: 4096   regular file
Device: fd00h/64768d    Inode: 390920      Links: 1
Access: (0644/-rw-r--r--)  Uid: (    0/    root)   Gid: (    0/    root)
Access: 2016-07-12 20:04:45.884000013 +0800
Modify: 2016-02-01 15:55:40.477000176 +0800
Change: 2016-02-01 16:08:05.655000177 +0800


三个时间戳:
access time:访问时间,简写为atime,读取文件内容
modify time: 修改时间, mtime,改变文件内容(数据)
change time: 改变时间, ctime,元数据发生改变

修改时间戳:touch命令
touch (选项) (参数)
选项:
-a: only atime
-m: only mtime
-t STAMP

[root@hadoop Desktop]# touch -t 1607112004.45 /etc/fstab
[root@hadoop Desktop]# stat  /etc/fstab
  File: `/etc/fstab'
  Size: 779         Blocks: 8          IO Block: 4096   regular file
Device: fd00h/64768d    Inode: 390920      Links: 1
Access: (0644/-rw-r--r--)  Uid: (    0/    root)   Gid: (    0/    root)
Access: 2016-07-12 20:59:12.348000443 +0800
Modify: 2016-07-11 20:04:45.000000000 +0800
Change: 2016-07-12 20:59:10.128998636 +0800

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

命令别名(alias)

    通过alias命令实现:
        (1) alias
            显示当前shell进程所有可用的命令别名;
        (2) alias NAME='VALUE'
            定义别名NAME,其相当于执行命令VALUE;

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

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

            bash进程重新读取配置文件:
                source /path/to/config_file
                .  /path/to/config_file

    撤消别名:unalias
        unalias [-a] name [name ...]

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

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

[root@hadoop var]# ls l*[0-9]*[a-z] 
l22e  la2e  lcd234r

l23ass:

lov234e:
[root@hadoop var]# ls l*[[:digit:]]*[[:lower:]]
l22e  la2e  lcd234r

l23ass:

lov234e:

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

[root@hadoop etc]# ls [[:digit:]]*[^[:digit:]]
1abD:

2abD:

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

[root@hadoop etc]# ls [^[:alpha:]][[:alpha:]]*
1abD:

2abD:

9.在/tmp目录下创建以tfile开头,后面当前日期和时间的文件

[root@hadoop tmp]# mkdir tfile-$(date +%F)

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

[root@hadoop tmp]# cp /etc/p*[^0-9]/ /tmp/mytest2/
[root@hadoop tmp]# cp /etc/p*[^0-9] /tmp/mytest2/

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

[root@hadoop tmp]# cp /etc/*.d /tmp/mytest2

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

[root@hadoop tmp]# cp /etc/[lmn]*\.conf /tmp/mytest3

原创文章,作者:Jeason,如若转载,请注明出处:http://www.178linux.com/24088

(0)
上一篇 2016-07-16 22:23
下一篇 2016-07-16 22:23

相关推荐

  • Bash的基础特性(二)

    Bash的基础特性(二) glob文件通配符 (* ; ? ; [ ] ; [^ ] ) 星号* 匹配任意所有字符的 [root@lyp ~]# ls h* hello.sh hello.shbak ?匹配单个字符 ls ???? 查看四个字符命名的文件 [0-9]匹配数字 [a-z] 字母 字母的顺序安装 a A b B c C… z Z 匹配的a-z […

    Linux干货 2017-04-01
  • DNS and BIND 配置指南

    前言     说来接触Linux也有一年了,BIND是我曾经学习RH系Linux接触的第一个服务,对我有着莫大的意义,当初差点因为这个服务难以配置而放弃Linux,今天学完马哥的bind相关系列视频之后,写一篇DNS and BIND的基础到进阶。 一、DNS的基础知识 DNS是什么? DNS(Domain Name …

    Linux干货 2016-03-21
  • 学习宣言

    不积跬步无以至千里,不积小流无以成江海。 在Linux的世界,我还只是一个顽童,我会通过我的努力证明,我可以攀登峻峰,笑看风云!

    Linux干货 2016-12-28
  • 8月8日作业

    4、如何设置tab缩进为4个字符?    编辑用户工作目录下.vimrc文件,使vim基础设置对个人用户生效,或者编辑/etc/vimrc文件,使配置对系统全部    用户生效。    set tabstop=4 5、复制/etc/rc.d/init.d/functions文件至/tmp目录;替换/…

    Linux干货 2016-08-12
  • ping命令的部分用法

    Linux系统的ping命令是常用的网络命令,它通常用来测试与目标主机的连通性,我们经常会说“ping一下某机器,看是不是开着”不能打开网页时会说“你先ping网关地址192.168.1.1试试”。它通过发送ICMP ECHO_REQUEST数据包到网络主机(send ICMP ECHO_REQUEST to&nbsp…

    Linux干货 2017-07-30
  • 马哥教育网络班20期+第三周博客作业

    1、列出当前系统上所有已经登录的用户的用户名,注意:同一用户登录多次,则只显示一次即可。 [root@llww3317 ~]# who    #显示当前用户登录信息 root     tty1    &nbsp…

    Linux干货 2016-06-26

评论列表(1条)

  • 马哥教育
    马哥教育 2016-07-17 20:42

    写的很好,排版也很漂亮,加油。给你提一个问题,如果文件已经存在 ,如何不显示警告信息,可以直接覆盖?