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

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

1)cp:复制文件或目录

  用法:cp [OPTION]... [-T] SOURCE DEST

        cp [OPTION]... SOURCE... DIRECTORY

        cp [OPTION]... -t DIRECTORY SOURCE...

  注意事项:

SOURCE是文件:

如果目标文件不存在,新建目标文件,并将源文件中的内容填充到目标文件中

如果目标存在且为文件,将源文件中的内容覆盖至目标文件中

如果目标存在且为目录,在目标目录下建立与原文件同名的文件,并将源文件中内容填充到新的文件中去

SOURCE是多个文件,目标必须存在,且为目录,其它情况均会出错

SOURCE是目录:必须使用-r选项

如果目标目录不存在,则会创建指定目录,赋值源目录中所有文件至目标目录中

如果目标是目录,在源目录中的文件全部分复制到目标目录中

  常用选项:

-a, --archive    等于-dR --preserve=all

-d                等于--no-dereference --preserve=links

-f, --force        如果目标文件无法打开则将其移除并重试(当 -n 选项存在时则不需再选此项)

-i, --interactive        覆盖前询问(使前面的 -n 选项失效)

-L, --dereference   总是跟随符号链接

-n, --no-clobber   不要覆盖已存在的文件(使前面的 -i 选项失效)

-P, --no-dereference   不跟随源文件中的符号链接

-p                等于--preserve=模式,所有权,时间戳

--preserve[=属性列表]   保持指定的属性(默认:模式,所有权,时间戳),如果可能保持附加属性:环境、链接、xattr 等

-R, -r, --recursive  复制目录及目录内的所有项目

实例

1

2

3

4

5

6

7

8

9

10

11

12

13

14

15

16

17

18

19

20

[root@localhost /]# cp etc/fstab /tmp/123//复制文件,123文件不存在测创建文件

[root@localhost /]# cat tmp/123 

[root@localhost /]# cp -a /etc/system-release /tmp/12/

#

# /etc/fstab

# Created by anaconda on Fri Aug 12 06:53:38 2016

#

# Accessible filesystems, by reference, are maintained under '/dev/disk'

# See man pages fstab(5), findfs(8), mount(8) and/or blkid(8) for more info

#

/dev/mapper/centos-root /                       xfs     defaults        0 0

UUID=ab5f2947-2e09-4c7d-9c36-80c29e6391a4 /boot                   xfs     defaults        0 0

/dev/mapper/centos-home /home                   xfs     defaults        0 0

/dev/mapper/centos-swap swap                    swap    defaults        0 0

[root@localhost /]# cp /etc/host.conf /etc/fstab /tmp/mylinux///复制多个文件到mylinux中

[root@localhost /]# cp -a /etc/system-release /tmp/12///复制链接文件  -a选项复制文件的所有属性和链接符号,但是链接地址是相对路径,链接指向会出错

[root@localhost /]# ll /tmp/12/

总用量 0

lrwxrwxrwx. 1 root root 14 8月  13 19:49 123 -> centos-release

lrwxrwxrwx. 1 root root 14 8月  12 06:54 system-release -> centos-release

2)mv:移动文件或目录

用法:mv [选项]... [-T] 源文件 目标文件

   或:mv [选项]... 源文件... 目录

   或:mv [选项]... -t 目录 源文件...

常用选项:

 -f, --force                  覆盖前不询问

 -i, --interactive            覆盖前询问

 -n, --no-clobber             不覆盖已存在文件

实例

1

2

3

4

5

6

7

8

9

10

[root@localhost 12]# ls

123  system-release

[root@localhost 12]# mv 123 ../a_c/ //将123文件复制到a_c目录下

[root@localhost 12]# mv system-release 321//将文件system-release重命名

[root@localhost 12]# ls

321

[root@localhost tmp]# mv 12/ b_c///复制目录

[root@localhost tmp]# cd b_c

[root@localhost b_c]# ls

12


3)rm:删除文件或目录

用法:rm [选项]... 文件...

常用选项:

-f 强制删除

-i 交互式

-r 删除目录

实例

1

2

[root@localhost b_c]# rm -rf 12

//强制删除12目录



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

1.命令历史:history

环境变量:

HISTSIZE:命令历史记录的条数

HISTFILE:~/.bash_history

HISTFILESIZE:命令历史文件记录历史的条数

调用历史命令的方式:

!#:重复执行第#条指令

!!:执行上一条命令

!string 调用最近以string开头的命令

!$:调用上一条命令的最后一个参数

ESC,.:调用上一条命令的最后一个参数

控制命令历史的记录方式:

环境变量:HISTCONTROL

ignoredups:忽略连续且重复的命令,系统默认

ignorespace:忽略所有以空白开头的命令;

ignoreboth:上述两个同时生效

修改环境变量的方式:export 变量名="值"

变量赋值:把赋值符号后面的数据存储与变量名指向内存空间,至对当前shell有限

2.命令补全:TAB键补全命令,

3.路径补全

4.命令展开

~:展开为用户的主目录

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

1

2

3

4

[root@localhost /]# cd ~

[root@localhost ~]

[root@localhost ~]# cd ~jun_shao/

[root@localhost jun_shao]# ~jun_shao/


5.命令的执行结果状态:成功和失败,0表示成功,1-255表示失败

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

获取方式 echo $?

程序执行的有两类结果:程序的返回值和程序的执行状态结果

1

2

3

4

[root@localhost /]# ls

bin  boot  dev  etc  home  lib  lib64  media  mnt  opt  proc  root  run  sbin  srv  sys  tmp  usr  var

[root@localhost /]# echo $?

0

6.bash的快捷操作

ctrl+L:清屏,相当于clear

ctrl+i:跳转值命令首部

ctrl+e:跳转至命令尾部

ctrl+c:取消命令执行

ctrl+U:删除命令首至光标所在处的内容

ctrl+K:删除光标所在处至命令行尾部的所有内容




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

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

1

2

3

4

5

6

7

8

9

10

11

12

13

14

15

[jun_shao@localhost tmp]$ mkdir /tmp/{a,b}_{c,d}

[jun_shao@localhost tmp]$ ls

a_c                  sensitive-info.log

a_d                  ssh-jCe06sIOI6xg

anaconda.log         ssh-UauJ16N50KP7

b_c                  storage.log

b_d                  systemd-private-6d69e0cd5d82468ab85eff756bc26a69-colord.service-cH1SDQ

hogsuspend           systemd-private-6d69e0cd5d82468ab85eff756bc26a69-cups.service-dE9Cpn

hsperfdata_jun_shao  systemd-private-6d69e0cd5d82468ab85eff756bc26a69-rtkit-daemon.service-RjUF2H

hsperfdata_root      systemd-private-6d69e0cd5d82468ab85eff756bc26a69-systemd-hostnamed.service-LisN5B

ifcfg.log            systemd-private-af9b870d5246476e8ba1feb08891b3d0-colord.service-RDVwUr

june                 systemd-private-af9b870d5246476e8ba1feb08891b3d0-cups.service-vUZ9Sj

ks-script-ZiDgee     systemd-private-af9b870d5246476e8ba1feb08891b3d0-rtkit-daemon.service-UT40FH

packaging.log        tracker-extract-files.1000

program.log          yum.log

(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

1

2

3

4

5

6

7

8

9

10

11

12

13

14

15

16

17

18

19

20

21

22

23

24

25

26

27

[root@localhost mylinux]# 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@localhost mylinux]# tree 

.

├── 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、文件的元数据信息有哪些,分别表示什么含义,如何查看?如何修改文件的时间戳信息。

1)文件的元数据信息:

文件的大小

文件的所有者

文件的权限

access time:访问时间,atime

modify time:修改时间,mtime

change time:改变时间,ctime

2)使用stat命令查询文件的元数据信息

1

2

3

4

5

6

7

8

9

10

[root@localhost /]# stat /tmp/mylinux/

  文件:"/tmp/mylinux/"

  大小:4096      块:8          IO 块:4096   目录

设备:fd00h/64768dInode:206503646   硬链接:17

权限:(0755/drwxr-xr-x)  Uid:(    0/    root)   Gid:(    0/    root)

环境:unconfined_u:object_r:user_tmp_t:s0

最近访问:2016-08-13 02:40:09.054684514 +0800

最近更改:2016-08-13 02:40:02.371740577 +0800

最近改动:2016-08-13 02:40:02.371740577 +0800

创建时间:-

3)修改文件的时间戳信息:touch命令

用法:touch [选项]... 文件...

常用选项:

 -a,只更改访问时间

 -c, --no-create 不创建任何文件

 -d, --date=字符串 使用指定字符串表示时间而非当前时间

 -m 只更改修改时间

 -t STAMP,[[cc]YY]MMDDhhmm[.ss]修改时间戳为指定时间

access time:访问时间,atime

modify time:修改时间,mtime

change time:改变时间,ctime

1

2

3

4

5

6

7

8

9

10

11

12

13

14

15

16

17

18

19

20

21

22

23

24

25

26

27

28

29

30

31

32

[root@localhost /]# touch -t 1510101010.10 tmp/mylinux///修改时间戳为指定日期

[root@localhost /]# stat /tmp/mylinux/

  文件:"/tmp/mylinux/"

  大小:4096      块:8          IO 块:4096   目录

设备:fd00h/64768dInode:206503646   硬链接:17

权限:(0755/drwxr-xr-x)  Uid:(    0/    root)   Gid:(    0/    root)

环境:unconfined_u:object_r:user_tmp_t:s0

最近访问:2015-10-10 10:10:10.000000000 +0800

最近更改:2015-10-10 10:10:10.000000000 +0800

最近改动:2016-08-13 15:27:55.012235506 +0800

创建时间:-

[root@localhost /]# touch -a tmp/mylinux/

[root@localhost /]# stat /tmp/mylinux/

  文件:"/tmp/mylinux/"

  大小:4096      块:8          IO 块:4096   目录

设备:fd00h/64768dInode:206503646   硬链接:17

权限:(0755/drwxr-xr-x)  Uid:(    0/    root)   Gid:(    0/    root)

环境:unconfined_u:object_r:user_tmp_t:s0

最近访问:2016-08-13 15:28:31.722939290 +0800

最近更改:2015-10-10 10:10:10.000000000 +0800

最近改动:2016-08-13 15:28:31.722939290 +0800

创建时间:-

[root@localhost /]# stat /tmp/mylinux/

  文件:"/tmp/mylinux/"

  大小:4096      块:8          IO 块:4096   目录

设备:fd00h/64768dInode:206503646   硬链接:17

权限:(0755/drwxr-xr-x)  Uid:(    0/    root)   Gid:(    0/    root)

环境:unconfined_u:object_r:user_tmp_t:s0

最近访问:2016-08-13 15:28:31.722939290 +0800

最近更改:2016-08-13 15:39:49.605469563 +0800

最近改动:2016-08-13 15:39:49.605469563 +0800

创建时间:-


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

命令别名(alias):通过alias命令实现:shell的内嵌命令

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

2)alias NAME='VALUE':定义别名NAME,其相当于执行命令VALUE

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

 仅对当前用户:~/.bashrc

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

 注意:编辑配置给出的新配置不会立即生效

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

3)撤销别名:unalias [-a] name [name...]

注意:如果别名和原命令想同,则执行原命令,如:\COMMAND

实例 

1

2

3

4

5

6

7

8

9

[root@localhost ~]# alias net='cd /etc/sysconfig/network-scripts/'//定义别名,仅对当前shell有效

[root@localhost ~]# net

[root@localhost network-scripts]

[root@localhost ~]# nano .bashrc //编辑配置文件,对当前用户有效

[root@localhost ~]# source .bashrc //重新读取配置文件,是新建的别有有效

[root@localhost ~]# alias cp="cp -r"//定义与系统自带的相同的命令

[root@localhost ~]# cp /etc/sysconfig/ /tmp/b_c/

[root@localhost ~]# \cp /etc/fstab /tmp/b_c///使用\cp执行原来的命令

[root@localhost ~]# unalias -a cp//撤销别名





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

1

2

[jun_shao@localhost ~]$ ls -d /var/l*[0-9]*[[:lower:]]

/var/l121231sdfasd  /var/l2dc

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

1

2

[jun_shao@localhost ~]$ ls -d /tmp/[0-9]*[^0-9]

/tmp/111223@  /tmp/111223b  /tmp/111223c


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

1

[jun_shao@localhost tmp]$ ls /etc/[^[:alpha:]][[:alpha:]]*

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

1

2

3

4

5

6

7

8

9

10

11

12

13

14

15

16

17

18

19

20

21

22

23

24

[root@localhost /]# touch /tmp/`echo tfile-$(date +%Y-%m-%d-%H-%M-%S)`

[root@localhost /]# ls /tmp/

111223@              mytest3

111223b              packaging.log

111223c              program.log

11c                  sensitive-info.log

1c2                  ssh-jCe06sIOI6xg

20160813_141413.txt  ssh-UauJ16N50KP7

a_c                  storage.log

a_d                  systemd-private-6d69e0cd5d82468ab85eff756bc26a69-colord.service-cH1SDQ

anaconda.log         systemd-private-6d69e0cd5d82468ab85eff756bc26a69-cups.service-dE9Cpn

b_c                  systemd-private-6d69e0cd5d82468ab85eff756bc26a69-rtkit-daemon.service-RjUF2H

b_d                  systemd-private-6d69e0cd5d82468ab85eff756bc26a69-systemd-hostnamed.service-LisN5B

hogsuspend           systemd-private-af9b870d5246476e8ba1feb08891b3d0-colord.service-RDVwUr

hsperfdata_jun_shao  systemd-private-af9b870d5246476e8ba1feb08891b3d0-cups.service-vUZ9Sj

hsperfdata_root      systemd-private-af9b870d5246476e8ba1feb08891b3d0-rtkit-daemon.service-UT40FH

ifcfg.log            tfile-2016-08-13-16-47-00

june                 tfile-2016-08-13-16-47-12

ks-script-ZiDgee     tfile-date

l121231sdfasd        tfile-date +%Y-%m-%d-%H-%M-%S

l2dc                 tracker-extract-files.1000

mylinux              +%Y-%m-%d-%H-%M-%S

mytest1              yum.log

mytest2              yum_save_tx.2016-08-13.14-01.B9WFE2.yumtx

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

1

2

3

4

5

[root@localhost /]# cp -an /etc/p[^0-9]* /tmp/mytest1/

[root@localhost /]# ls /tmp/mytest1/

pam.d       passwd-       pkcs11    pm            popt.d   prelink.conf.d  profile.d  purple

pam_pkcs11  pbm2ppa.conf  pki       pnm2ppa.conf  postfix  printcap        protocols  python

passwd      pinforc       plymouth  polkit-1      ppp      profile         pulse


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

1

2

3

4

5

6

7

8

9

10

[root@localhost /]# cp -an /etc/*.d /tmp/mytest2/

[root@localhost /]# ls /tmp/mytest2

auto.master.d      dracut.conf.d  logrotate.d     profile.d  rc.d           sudoers.d

bash_completion.d  exports.d      modprobe.d      rc0.d      reader.conf.d  sysctl.d

binfmt.d           gdbinit.d      modules-load.d  rc1.d      request-key.d  tmpfiles.d

cgconfig.d         grub.d         my.cnf.d        rc2.d      rsyslog.d      usb_modeswitch.d

chkconfig.d        init.d         oddjobd.conf.d  rc3.d      rwtab.d        xinetd.d

cron.d             ipsec.d        pam.d           rc4.d      sane.d         yum.repos.d

depmod.d           ld.so.conf.d   popt.d          rc5.d      setuptool.d

dnsmasq.d          libibverbs.d   prelink.conf.d  rc6.d      statetab.d


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

1

2

3

4

5

6

7

8

9

10

11

12

13

14

15

[root@localhost /]# cp -an /etc/[lmn]*.conf /tmp/mytest3

[root@localhost /]# tree /tmp/mytest3

/tmp/mytest3

├── ld.so.conf

├── libaudit.conf

├── libuser.conf

├── locale.conf

├── logrotate.conf

├── man_db.conf

├── mke2fs.conf

├── mtools.conf

├── nfsmount.conf

├── nsswitch.conf

├── ntp.conf

└── numad.conf