马哥教育网络班20期+第2周课程练习

1、Linux上的文件管理类命令都有哪些,其常用的使用方法及其相关示例演示。 
常用文件管理命令有:ls、mkdir、cd、pwd、cp、rm、mv、touch、cat、more、less、head、tail等
 
(1)ls命令:列出目录内容

ls [OPTION]... [FILE]...    
-a:显示全部文件,包括隐藏文件    
-d:仅列出目录本身,不列出目录内的文件数据    
-l:列出文件的属性与权限等数据
[root@testmin ~]# ls -l 
total 36 
-rw-r--r--. 1 root root 3568 Jun 18 22:02 123.txt 
-rw-------. 1 root root 1128 Jun 8 07:59 anaconda-ks.cfg 
-rw-r--r--. 1 root root 9458 Jun 8 07:59 install.log 
-rw-r--r--. 1 root root 3161 Jun 8 07:58 install.log.syslog 
-rw-r--r--. 1 root root 9192 Jun 18 20:09 used to configure the kernel-resident network interfaces

(2)mkdir命令:创建目录

mkdir[OPTION]... DIRECTORY...   
-m:配置文件的权限,直接配置,不需要看默认权限  
-p:直接将所需要的目录(包含上一级目录)递归创建
[root@testmin ~]# mkdir -p /adb/123/456
[root@testmin ~]# tree adb
adb
└── 123
    └── 456

(3)cd命令:变化工作目录

cd[相对路径或绝对路径]
[root@testmin ~]# ls 
adb  anaconda-ks.cfg  install.log  install.log.syslog
[root@testmin ~]# cd adb
[root@testmin adb]# ls
123
[root@testmin adb]# cd
[root@testmin ~]# cd /root/adb
[root@testmin adb]#

(4)pwd:显示当前工作目录

pwd[OPTION]...
 -p:显示区确实的路径,而非使用link路径
[root@testmin ~]# pwd
/root

(5)cp命令:复制文件和目录

cp[OPTION]...SOURCE DEST
-a 尽可能将档案状态权限等资料都照原状予以复制
-r 若 source 中含有目录名则将目录下之档案亦皆依序拷贝至目的地
-f 若目的地已经有相同档名的档案存在则在复制前先予以删除再行复制
-P: 复制符号链接文件本身,而非其指向的目标文件
[root@testmin ~]# ls
adb  anaconda-ks.cfg  install.log  install.log.syslog
[root@testmin ~]# tree adb
adb
└── 123
    └── 456
2 directories, 0 files
[root@testmin ~]# cp -r adb abc
[root@testmin ~]# ls
abc  adb  anaconda-ks.cfg  install.log  install.log.syslog
[root@testmin ~]# tree abc
abc
└── 123
    └── 456
2 directories, 0 files

(6)rm命令:删除文件或目录

rm [OPTION]... FILE...
-f:忽略不存在的文件,不会出现警告信息
-i:互动模式,在删除前会询问使用者是否动作
-r:递归删除,常用在目录的删除(非常危险的选项)
一般常用rm -rf删除全部文件或目录,使用需谨慎
[root@testmin ~]# tree adb
adb
└── 123
    └── 456
2 directories, 0 files
[root@testmin ~]# rm -rf adb
[root@testmin ~]# ls
abc  anaconda-ks.cfg  install.log  install.log.syslog

(7)mv命令:移动文件

mv [OPTION]... SOURCE DEST
-f:如果目标文件已存在,不会询问直接覆盖
-i:若目标文件已存在,就会询问是否覆盖
[root@testmin ~]# mv -i abc /home
mv: overwrite `/home/abc'?

(8)touch命令:改变文件的时间戳

touch [OPTION]... FILE...
如果FILE不存在,默认会创建一个空文件
-a:仅修改access time
-c:仅修改文件的时间,若文件不存在则不创建新文件
-m:仅修改mtime
-t:后面可以接欲修改的时间格式为[[CC]YY]MMDDhhmm[.ss]
modification time (mtime):      
当该文件的“内容数据”变更时,就会升级这个时间!内容数据指的是文件的内容,而不是文件的属性或权限喔
status time (ctime):      
当该文件的“状态 (status)”改变时,就会升级这个时间,举例来说,像是权限与属性被更改了,都会升级这个时间啊。
access time (atime):      
当“该文件的内容被取用”时,就会升级这个读取时间 (access)。举例来说,我们使用cat去读取/etc/rc.local,就会升级该文件的 atime 了
[root@testmin ~]# stat a.txt 
  File: `a.txt'
  Size: 0         	Blocks: 0          IO Block: 4096   regular empty file
Device: fd00h/64768d	Inode: 1442014     Links: 1
Access: (0644/-rw-r--r--)  Uid: (    0/    root)   Gid: (    0/    root)
Access: 2016-06-24 19:57:39.034679240 +0800
Modify: 2016-06-24 19:52:27.490673485 +0800
Change: 2016-06-24 19:57:39.034679240 +0800
[root@testmin ~]# touch -a a.txt
[root@testmin ~]# stat a.txt 
  File: `a.txt'
  Size: 0         	Blocks: 0          IO Block: 4096   regular empty file
Device: fd00h/64768d	Inode: 1442014     Links: 1
Access: (0644/-rw-r--r--)  Uid: (    0/    root)   Gid: (    0/    root)
Access: 2016-06-24 19:59:16.942680244 +0800
Modify: 2016-06-24 19:52:27.490673485 +0800
Change: 2016-06-24 19:59:16.942680244 +0800

(9)cat命令:连接并显示文本文件内容

cat [OPTION]... [FILE]...
-E:将结尾的断行字符$显示出来
-n:显示行号,连同空白行也会有行号
-b:列出行号,仅针对非空白行做行号显示,空白行不标行号
[root@testmin ~]# cat -n install.log
     1	Installing libgcc-4.4.7-4.el6.x86_64
     2	warning: libgcc-4.4.7-4.el6.x86_64: Header V3 RSA/SHA1 Signature, key ID c105b9de: NOKEY
     3	Installing setup-2.8.14-20.el6_4.1.noarch
     4	Installing filesystem-2.4.30-3.el6.x86_64
     5	Installing basesystem-10.0-4.el6.noarch
     6	Installing ncurses-base-5.7-3.20090208.el6.x86_64
     7	Installing tzdata-2013g-1.el6.noarch
     8	Installing glibc-common-2.12-1.132.el6.x86_64
     9	Installing nss-softokn-freebl-3.14.3-9.el6.x86_64
    10	Installing glibc-2.12-1.132.el6.x86_64
    11	Installing ncurses-libs-5.7-3.20090208.el6.x86_64
    12	Installing bash-4.1.2-15.el6_4.x86_64
    13	Installing libattr-2.4.44-7.el6.x86_64
    14	Installing libcap-2.16-5.5.el6.x86_64
    15	Installing zlib-1.2.3-29.el6.x86_64
    16	Installing info-4.13a-8.el6.x86_64
    17	Installing audit-libs-2.2-2.el6.x86_64
    18	Installing popt-1.13-7.el6.x86_64
    19	Installing chkconfig-1.3.49.3-2.el6_4.1.x86_64

(10)more命令:是一个基于vi编辑器的文本过滤器,以全屏的方式按页显示文本的内容,支持vi中的关键字定位操作

more [OPTIONS...] FILE...
-d:显示翻页及退出提示
-c:不进行滚屏操作,每次刷新这个屏幕
-s:将多个空行压缩成一行显示
-u:禁止下划线
+数字:从指定数字的行开始显示
[root@testmin ~]# more install.log
Installing libgcc-4.4.7-4.el6.x86_64
warning: libgcc-4.4.7-4.el6.x86_64: Header V3 RSA/SHA1 Signature, key ID c105b9de: NOKEY
Installing setup-2.8.14-20.el6_4.1.noarch
Installing filesystem-2.4.30-3.el6.x86_64
Installing basesystem-10.0-4.el6.noarch
Installing ncurses-base-5.7-3.20090208.el6.x86_64
Installing tzdata-2013g-1.el6.noarch
Installing glibc-common-2.12-1.132.el6.x86_64
Installing nss-softokn-freebl-3.14.3-9.el6.x86_64
[root@testmin ~]# more  +3 install.log
Installing setup-2.8.14-20.el6_4.1.noarch
Installing filesystem-2.4.30-3.el6.x86_64
Installing basesystem-10.0-4.el6.noarch
Installing ncurses-base-5.7-3.20090208.el6.x86_64

(11)less命令:作用与more十分相似,不同的是less允许用户向前或向后浏览文件,more只能向前浏览

less [OPTIONS...] FILE...
-e:文件内容显示完毕后,自动退出; 
-f:强制显示文件; 
-g:不加亮显示搜索到的所有关键词,仅显示当前显示的关键字,以提高显示速度;
-l:搜索时忽略大小写的差异; 
-N:每一行行首显示行号;
-s:将连续多个空行压缩成一行显示; 
-S:在单行显示较长的内容,而不换行显示;
-x<数字>:将TAB字符显示为指定个数的空格字符
[root@testmin ~]# less -N install.log
      1 Installing libgcc-4.4.7-4.el6.x86_64
      2 warning: libgcc-4.4.7-4.el6.x86_64: Header V3 RSA/SHA1 Signature, key ID c105b9de:       2 NOKEY
      3 Installing setup-2.8.14-20.el6_4.1.noarch
      4 Installing filesystem-2.4.30-3.el6.x86_64
      5 Installing basesystem-10.0-4.el6.noarch
      6 Installing ncurses-base-5.7-3.20090208.el6.x86_64
      7 Installing tzdata-2013g-1.el6.noarch

(12)head命令:用于显示文件的开头的内容,默认显示头10行内容

head [OPTION]... [FILE]...
-n<数字>:指定显示头部内容的行数; 
-c<字符数>:指定显示头部内容的字符数; 
-v:总是显示文件名的头信息;
-q:不显示文件名的头信息。

(13)tail命令:用于输入文件中的尾部内容,默认显示指定文件的末尾10行

tail [OPTION]... [FILE]...
-c #: 指定获取后#字节
-n #: 指定获取后#行
-f: 跟踪显示文件新追加的内容;
[root@testmin ~]# tail -c 10 install.log
CKAGES ***[root@testmin ~]# tail install.log
Installing iwl4965-firmware-228.61.2.24-2.1.el6.noarch
Installing rt61pci-firmware-1.2-7.el6.noarch
Installing iwl3945-firmware-15.32.2.9-4.el6.noarch
Installing ql2200-firmware-2.02.08-3.1.el6.noarch
Installing rt73usb-firmware-1.8-7.el6.noarch
Installing ipw2100-firmware-1.3-11.el6.noarch
Installing ql23xx-firmware-3.03.27-3.1.el6.noarch
Installing ipw2200-firmware-3.1-4.el6.noarch
Installing rootfiles-8.1-6.1.el6.noarch
*** FINISHED INSTALLING PACKAGES ***[root@testmin ~]#

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

(1)命令的执行结果状态
成功
失败
bash使用特殊变量$?保存最近一条命令的执行状态结果:
0:成功
1-255:失败
程序执行有两类结果:
程序的返回值;
程序的执行状态结果;
(2)命令行展开
~:展开为用户的主目录
~USERNAME:展开为指定用户的主目录
{}:可承载一个以逗号分隔的列表,并将其展开为多个路径
/tmp/{a,b}=/tmp/a,/tmp/b
/tmp/{tom,jerry}/hi=/tmp/tom/hi,/tmp/jerry/hi

3、请使用命令行展开功能来完成以下练习: 
(1)、创建/tmp目录下的:a_c, a_d, b_c, b_d 

[root@testmin ~]# touch /tmp/{a,b}_{c,d}
[root@testmin ~]# ls /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
[root@testmin 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@testmin tmp]# tree 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

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

 (1)文件的元素信息有:文件名、文件大小、文件权限、文件属组、属主、access time、modify time、change time等

  (2)stat /PATH/TO/SOMEFILE:获取指定文件的元数据

[root@testmin ~]# stat 123.txt
  File: `123.txt'
  Size: 3568      Blocks: 8          IO Block: 4096   regular file
Device: fd00h/64768dInode: 1572878     Links: 1
Access: (0644/-rw-r--r--)  Uid: (    0/    root)   Gid: (    0/    root)
Access: 2016-06-18 22:02:11.185993594 +0800
Modify: 2016-06-18 22:02:11.185993594 +0800
Change: 2016-06-18 22:02:11.185993594 +0800

 (3)touch命令:改变文件的时间戳

touch [OPTION]... FILE...
-a: only atime
-m: only mtime
-t STAMP:
[[CC]YY]MMDDhhmm[.ss]
-c: 如果文件不存,则不予创建
[root@testmin ~]# stat 123.txt
  File: `123.txt'
  Size: 3568      	Blocks: 8          IO Block: 4096   regular file
Device: fd00h/64768d	Inode: 1572878     Links: 1
Access: (0644/-rw-r--r--)  Uid: (    0/    root)   Gid: (    0/    root)
Access: 2016-06-18 22:02:11.185993594 +0800
Modify: 2016-06-18 22:02:11.185993594 +0800
Change: 2016-06-18 22:02:11.185993594 +0800
[root@testmin ~]# touch 123.txt
[root@testmin ~]# stat 123.txt
  File: `123.txt'
  Size: 3568      	Blocks: 8          IO Block: 4096   regular file
Device: fd00h/64768d	Inode: 1572878     Links: 1
Access: (0644/-rw-r--r--)  Uid: (    0/    root)   Gid: (    0/    root)
Access: 2016-06-26 22:54:19.238004986 +0800
Modify: 2016-06-26 22:54:19.238004986 +0800
Change: 2016-06-26 22:54:19.238004986 +0800

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

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

   alias NAME='VALUE'定义别名NAME,其相当于执行命令VALUE;
   在命令行中定义的别名,仅对当前shell进程有效;如果想永久有效,要定义在配置文件中;
   仅对当前用户:~/.bashrc
   对所有用户有效:/etc/bashrc
[root@testmin ~]# alias NAME='VALUE'
[root@testmin ~]# alias 
alias NAME='VALUE'
alias cp='cp -i'
alias l.='ls -d .* --color=auto'
alias ll='ls -l --color=auto'
alias ls='ls --color=auto'
alias mv='mv -i'
alias rm='rm -i'
alias which='alias | /usr/bin/which --tty-only --read-alias --show-dot --show-tilde'

 (2)引用另一个命令的执行结果可以用管道符号

COMMAND1 | COMMAND2 | COMMAND3 |...

[root@testmin ~]# ls /tmp | tr 'a-z' 'A-Z'
A_C
A_D
B_C
B_D
MYLINUX
WHO.OUT

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

[root@testmin ~]#ls -d /var/l*[0-9]*[[:lower:]]

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

[root@testmin ~]#ls -d /etc/[0-9]*[^0-9]

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

[root@testmin ~]#ls /etc/[^[:alpha:]][[:alpha:]]*

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

[root@testmin ~]# touch /tmp/tfile-"$(date +%F-%H-%M-%S)"
[root@testmin ~]# ls /tmp
a_c  a_d  b_c  b_d  mylinux  tfile-2016-06-27-01-39-43  who.out

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

[root@testmin ~]#cp -a /etc/p*[^0-9] /tmp/mytest1

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

[root@testmin ~]#cp -a /etc/*.d /tmp/mytest2

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

[root@testmin ~]#cp -a /etc/[1mn]*.conf /tmp/mytest3

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

评论列表(1条)

  • 马哥教育
    马哥教育 2016-06-29 14:55

    写的很好,排版也很漂亮,加油