网络N23期第二周:linux上的目录与文件管理命令,bash的工作特性等

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

1.1 mkdir  创建目录

使用方法:mkdir [OPTION]… DIRECTORY…

常用选项:

-p:按需创建父目录

-m:创建目录权限

-v:输出详细创建目录过程

实例: 创建/tmp/test2/test3目录,定义权限为rwxrw-rw-,并详细显示创建目录过程。

 ~]# mkdir -pv -m 766 /tmp/test2/test3

mkdir: created directory `/tmp/test2'

mkdir: created directory `/tmp/test2/test3'

~]# ls -ld /tmp/test2/test3

drwxrw-rw- 2 root root 4096 Oct  7 08:42 /tmp/test2/test3

1.2 rmdir命令

rmdir是常用的命令,该命令的功能是删除空目录,一个目录被删除之前必须是空的。(注意,rm – r dir命令可代替rmdir,但是有很大危险性。)删除某目录时也必须具有对父目录的写权限。

1.命令格式:

rmdir [选项]… 目录…

2.命令功能:

该命令从一个目录中删除一个或多个子目录项,删除某目录时也必须具有对父目录的写权限。

3.命令参数:

– p 递归删除目录,当子目录删除后其父目录为空时,也一同被删除。如果整个路径被删除或者由于某种原因保留部分路径,则系统在标准输出上显示相应的信息。

-v, –verbose显示指令执行过程

实例:

[root@nfs_server ~]# rmdir -pv /tmp/test2/test3

rmdir: removing directory, `/tmp/test2/test3'

rmdir: removing directory, `/tmp/test2'

rmdir: removing directory, `/tmp'

rmdir: failed to remove directory `/tmp': Directory not empty    因为/tmp 不为空目录,所以不能删除。

1.3 cp 复制命令:

1.3.1 cp [Option] …[-T] SRC(源) DEST(目的)

(如果目标不存在,则新建DEST, 并将SRC中的内容填充至DEST中。

如果目标存在:如果DEST是文件,将SRC内容覆盖至DEST中。此时建议为cp命令使用-i选项。

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

实例:~]# cp /etc/fstab  /tmp/fstab.txt  (fstab.txt 为文件)

~]# cp /etc/fstab   /tmp/test  (/tmp/test 为目录)

~]# ls /tmp/test/

 fstab 

1.3.2 cp [Option] … SRC(原文件)…(可多个文件) DIRECTORY(新目录)(表示复制到哪个目录中)如src 为多个文件,Directory必须存在,且为目录,其它情形均为错。

cp SRC DEST src是目录:

此时使用选项: -r (recursive 递归)

如果DEST目标不存在则创建指定目录,复制源SRC目录中所有目录至目标中

如果目标存在:

如果目标是文件,则报错

如果dest是目录,则复制到此目录中

常用选项:

-i: 交互式

-r: 递归复制目录及其内部所有内容

-a: 归档, 相当于 -dR –preserv=all (即保留源文件或目录的属性,包括所有者、所属组、权限与时间)

-d: –no-dereference –preserv=links (如果原文件是链接,则保留原链接格式)

–preserv=[Attr_list](保留属性)

mode:权限

ownership:属主属组

timestamp:时间戳

links: 链接

xattr:特殊属性

context: 上下文

all:所有

-p =–preserve=mode, ownership, timestamp

-v 显示详细信息

-t 复制时可把目标放在前面

-f –force 强制复制 (危险)

实例:

~]# cp -Pv /tmp/{lines.sh,fstab.txt}  /tmp/test/  

`/tmp/lines.sh' -> `/tmp/test/lines.sh'

`/tmp/fstab.txt' -> `/tmp/test/fstab.txt'

~]# ll /tmp/test/

total 8

-rw-r–r– 1 root root 805 Oct  7 16:08 fstab.txt

-rwxr-xr-x 1 root root 197 Oct  7 16:08 lines.sh

1.4  mv 命令(move缩写) 用来移动文件或者将文件改名

1.命令格式:

mv [选项] 源文件或目录 目标文件或目录

2.命令功能:

mv命令中第二个参数类型的不同(是目标文件还是目标目录),mv命令将文件重命名或将其移至一个新的目录中。当第二个参数类型是文件时,mv命令完成文件重命名,此时,源文件只能有一个(也可以是源目录名),它将所给的源文件或目录重命名为给定的目标文件名。当第二个参数是已存在的目录名称时,源文件或目录参数可以有多个,mv命令将各参数指定的源文件均移至目标目录中。在跨文件系统移动文件时,mv先拷贝,再将原有文件删除,而链至该文件的链接也将丢失。

3.命令参数:

-b :若需覆盖文件,则覆盖前先行备份。

-f :force 强制的意思,如果目标文件已经存在,不会询问而直接覆盖;

-i :若目标文件 (destination) 已经存在时,就会询问是否覆盖!

-u :若目标文件已经存在,且 source 比较新,才会更新(update)

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

4.命令实例:

实例一:文件改名

命令:

mv test.log test1.txt

实例二: 移动文件

]# mv ./{test1.txt,yum.log} ./test  

]# ls ./test/

test1.txt  yum.log

1.5 rm 命令: remove

删除一个目录中的一个或多个文件或目录,它也可以将某个目录及其下的所有文件及子目录均删除。对于链接文件,只是删除了链接,原有文件均保持不变。rm是一个危险的命令,使用的时候要特别当心,尤其对于新手,否则整个系统就会毁在这个命令(比如在/(根目录)下执行rm * -rf)

1.命令格式:

rm [选项] 文件…

2.命令功能:

删除一个目录中的一个或多个文件或目录,如果没有使用- r选项,则rm不会删除目录。如果使用 rm 来删除文件,通常仍可以将该文件恢复原状。

3.命令参数:

-f, –force    忽略不存在的文件,从不给出提示。

-i, –interactive 进行交互式删除

-r, -R, –recursive   指示rm将参数中列出的全部目录和子目录均递归地删除。

-v, –verbose    详细显示进行的步骤

–help     显示此帮助信息并退出

–version  输出版本信息并退出

4.命令实例:

一: 删除文件,系统会询问是否删除

~]# rm test1.txt   

rm:是否删除普通空文件 "test1.txt"?

说明:

输入rm test1.txt  命令后,系统会询问是否删除,输入y后就会删除文件,不想删除则数据n。

二:强行删除file,系统不再提示。

命令:

]# rm -f test1.txt

三: 删除文件时进行交互式询问

命令:

~]# rm -i {test1.log,test.log}

rm:是否删除普通空文件 "test1.log"?y

rm:是否删除普通空文件 "test.log"?y

四:将 test子目录及子目录中所有档案删除

命令:

~]# rm -r ./test

rm:是否进入目录"./test"? y

rm:是否删除普通空文件 "./test/test1.txt"?y

rm:是否删除普通空文件 "./test/yum.log"?y

rm:是否删除目录 "./test"?y

五: 自定义回车站功能:

命令:

~]# alias rm='myrm'

 ~]# cd /tmp/

tmp]# myrm(){ D=/tmp/$( date +%Y%m%d%H%M%S); mkdir -p $D; mv "$@" $D && echo "moved to $D ok"; }

tmp]# touch 1.log 2.log 3.log

 tmp]# ls

1.log  2.log  3.log  

 tmp]# rm [123].log

moved to /tmp/20161007180817 ok

tmp]# ll /tmp/20161007180817/

总用量 0

-rw-r–r–. 1 root root 0 10月  7 18:07 1.log

-rw-r–r–. 1 root root 0 10月  7 18:07 2.log

-rw-r–r–. 1 root root 0 10月  7 18:07 3.log

[root@localhost tmp]# ll

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

bash 的基础特性: 命令的执行状态结果:

bash 通过状态返回值来输出此结果:

成功 : 0

失败: 1 – 255

命令执行完成功之后,其状态返回值保存于bash 的特殊变量$?中;

]# echo $?

引用命令的执行结果:

$(COMMAND)或 $`COMMAND`

例如 : 创建以时间的目录

]# date +%H-%M-%S

17-46-47

]# mkdir $(date +%H-%M-%S)

17-47-51

bash 的基于特性: 引用

强引号: ‘ ’单引号

弱引用: “ ” 双引号

命令引用: · · 反引号,建议用$() , 替代;

bash基础特性: 快捷键

Ctrl + a : 跳转到命名行首部。

Ctrl + e : 跳转到命名行首尾;

Ctrl + u: 删除行首至光标所在处之间的所有字符;

Ctrl + k: 删除光标所在处至行尾的所有字符;

Ctrl + l : 相当于clear 清除键。

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

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

]# mkdir {a,b}_{c,d}

]# ls

 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 -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}

mkdir: 已创建目录 "/tmp/mylinux"

mkdir: 已创建目录 "/tmp/mylinux/bin"

mkdir: 已创建目录 "/tmp/mylinux/boot"

mkdir: 已创建目录 "/tmp/mylinux/boot/grub"

mkdir: 已创建目录 "/tmp/mylinux/dev"

mkdir: 已创建目录 "/tmp/mylinux/etc"

mkdir: 已创建目录 "/tmp/mylinux/etc/rc.d"

mkdir: 已创建目录 "/tmp/mylinux/etc/rc.d/init.d"

mkdir: 已创建目录 "/tmp/mylinux/etc/sysconfig"

mkdir: 已创建目录 "/tmp/mylinux/etc/sysconfig/network-scripts"

mkdir: 已创建目录 "/tmp/mylinux/lib"

mkdir: 已创建目录 "/tmp/mylinux/lib/modules"

mkdir: 已创建目录 "/tmp/mylinux/lib64"

mkdir: 已创建目录 "/tmp/mylinux/proc"

mkdir: 已创建目录 "/tmp/mylinux/sbin"

mkdir: 已创建目录 "/tmp/mylinux/sys"

mkdir: 已创建目录 "/tmp/mylinux/tmp"

mkdir: 已创建目录 "/tmp/mylinux/usr"

mkdir: 已创建目录 "/tmp/mylinux/usr/local"

mkdir: 已创建目录 "/tmp/mylinux/usr/bin"

mkdir: 已创建目录 "/tmp/mylinux/usr/bin/sbin"

mkdir: 已创建目录 "/tmp/mylinux/var"

mkdir: 已创建目录 "/tmp/mylinux/var/lock"

mkdir: 已创建目录 "/tmp/mylinux/log"

mkdir: 已创建目录 "/tmp/mylinux/log/run"

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

元数据包含文件的权限,大小,拥有者,组以及修改时间等信息,可用ls -l命令查看。用touch命令修改时间戳信息。如:touch -t [YYYYMMDDhhmm] FILE

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

使用alias定义个别名,alias aliasname = Command + option

使用管道引用另一个命令执行结果, 如 ps -ef |grep httpd

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

命令:

]# ls /var/l*[[:digit:]]*[[:lower:]]

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

命令:

]# ls /etc/[[:digit:]]*[^[:digit:]]

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

命令:

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

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

]# touch tfile$(date +%Y-%m-%d-%H-%M-%S)

]# ls

  tfile2016-10-07-20-46-51

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

mkdir -p /tmp/mytest1

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

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

]# mkdir -p /tmp/mytest2

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

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

mkdir -p /tmp/mytest3

cp /etc/[lmn]*.conf  /tmp/mytest3/

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