1、Linux上的文件管理类命令都有哪些,其常用的使用方法及其相关示例演示。
1.1 cp命令:copy
- 源文件;目标文件
- 单源复制:cp [OPTION]... [-T] SOURCE DEST
- 多源复制:cp [OPTION]... SOURCE... DIRECTORY
- cp [OPTION]... -t DIRECTORY SOURCE...
- 单源复制:cp [OPTION]... [-T] SOURCE DEST
- 如果DEST不存在:则事先创建此文件,并复制源文件的数据流至DEST中
- 如果DEST存在:
- 如果DEST是非目录文件,则覆盖目标文件
- 如果DEST是目录文件,则先在DEST目录下创建与源文件同名的文件,并复制其数据流至目标文件
- 如果source是目录,则不会执行命令操作,需要加后续参数
- 多源复制:cp [OPTION]... SOURCE... DIRECTORY (DEST必须是目录)
- 如果DEST不存在:错误
- 如果DEST存在:
- 如果DEST是非目录文件:依然是错误
- 如果DEST是目录文件:分别复制每个文件至目标目录中,并保持原名
[root@cherry ~]# cp /etc/fstab /tmp/hi.txt (因为hi.txt是已经存在的文件,所以会有覆盖的提示)
cp: overwrite ‘/tmp/hi.txt’? y
[root@cherry ~]# cp /etc/issue /tmp/test (因为DEST为目录,并非文件,所以会在目录下创建同名文件并复制)
[root@cherry ~]# ls /tmp/test/
issue
[root@cherry ~]# cat /tmp/test/issue
\S
Kernel \r on an \m
[root@cherry ~]# cp /var/log /tmp/ (源数据log为目录而并非文件,故复制到DEST并不执行操作)
cp: omitting directory ‘/var/log’
- 常用选项:
- -i:交互式复制,即覆盖之前会提醒用户确认
- -f:强制覆盖目标文件
- -r:递归复制目录(复制目录及目录中的内容至目标位置)
- -d:复制符号链接文件本身,而非指向的源文件
- -a:-dR --preserve=all,archive,用于实现归档做备份
- --preserve=
- mode:权限
- owenship:属主和属组
- timetamps:时间戳
- contest:安全标签
- xattr:扩展属性
- links:符号链接
- all:上述所有属性
1.2 mv命令:move
- mv [OPTION]... [-T] SOURCE DEST
- mv [OPTION]... SOURCE... DIRECTORY
- mv [OPTION]... -t DIRECTORY SOURCE...
- 常用选项:
- -i:交互式
- -f:force
- 常用选项:
1.3 rm命令:remove移除,删除文件,非常危险!
- rm [OPTION]... FILE...
- 常用选项:
- -i:interactive
- -f:force
- -r:recursive
- 删除目录:rm -rf /PATH/TO/DIR
rm -rf /* 非常非常非常危险!
- 注意: 所有不用的文件建议不要直接删除,而是移动到某个专用目录:(模拟回收站)
- 常用选项:
2、bash的工作特性之命令执行状态返回值和命令行展开所涉及的内容及其示例演示。
2.1 命令的执行状态结果返回值
- 命令执行的状态结果:
- bash通过状态返回值来输出此结果:
- 成功:0
- 失败:1--255
- 命令执行完成之后,其状态返回值保存于bash的特殊变量 $ ?中(最近一条命令的状态结果)
- bash通过状态返回值来输出此结果:
- 命令正常执行时,有的还会有命令返回值
- 根据命令及其功能不同,结果各不相同
2.2 命令行展开
- ~:自动展开为用户的家目录,或指定的用户的家目录
- { }:可承载一个以,逗号分割的路径列表,并能够将其展开为多个路径
- 例如:/tmp/{a,b} 相当于 /tmp/a /tmp/b
[root@cherry ~]# ls /tmp
ks-script-i2RpM1
[root@cherry ~]# echo $?
0
[root@cherry ~]# ls /tmpppppp
ls: cannot access /tmuuuu: No such file or directory
[root@cherry ~]# echo $?
2
[root@cherry ~]# luuus /tmp
-bash: lsuuus: command not found
[root@cherry ~]# echo $?
127
3、请使用命令行展开功能来完成以下练习:
- (1)、创建/tmp目录下的:a_c, a_d, b_c, b_d
[root@cherryyao ~]# mkdir -p /tmp/{a,b}_{c,d}
[root@cherryyao ~]# ll /tmp/
total 100
drwxr-xr-x. 2 root root 4096 Aug 22 03:02 a_c
drwxr-xr-x. 2 root root 4096 Aug 22 03:02 a_d
drwxr-xr-x. 2 root root 4096 Aug 22 03:02 b_c
drwxr-xr-x. 2 root root 4096 Aug 22 03:02 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@cherryyao ~]# 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@cherryyao ~]# 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
│ └── local
│ ├── bin
│ └── sbin
└── var
├── lock
├── log
└── run
4、文件的元数据信息有哪些,分别表示什么含义,如何查看?如何修改文件的时间戳信息。
4.1 文件元数据
[root@cherryyao ~]# stat /tmp/fstab
File: ‘/tmp/fstab’
Size: 501 Blocks: 8 IO Block: 4096 regular file
Device: 802h/2050d Inode: 3278555 Links: 1
Access: (0644/-rw-r--r--) Uid: ( 0/ root) Gid: ( 0/ root)
Context: unconfined_u:object_r:user_tmp_t:s0
Access: 2018-08-22 01:13:14.855864616 +0800
Modify: 1985-07-17 12:30:45.000000000 +0800
Change: 2018-08-22 01:43:26.644852003 +0800
元数据信息 | 解释说明 |
---|---|
File | 文件名 |
size | 文件的大小 |
blocks | 占用block的数量 |
io block | block总大小为4096 |
regular file | 定义文件类型-常规文件 |
Device | 设备编号的十六进制和十进制 |
Inode | 文件的Inode值 |
Links | 文件的硬链接数 |
第一个Access | 文件的权限 |
Context | 注释信息 |
Access | 访问时间 |
Modify | 修改时间 |
Change | 改动时间 |
4.2 修改时间戳使用touch命令
- touch [OPTION]... FILE...
- -c:指定的文件路径不存在时不予创建
- -a:仅修改access time
- -m:仅修改modify time
- 注意:change time是无法指定修改的
- -t STAMP
- [[CC]YY]MMDDhhmm[.ss]
[root@cherryyao ~]# stat /tmp/fstab
File: ‘/tmp/fstab’
Size: 501 Blocks: 8 IO Block: 4096 regular file
Device: 802h/2050d Inode: 3278555 Links: 1
Access: (0644/-rw-r--r--) Uid: ( 0/ root) Gid: ( 0/ root)
Context: unconfined_u:object_r:user_tmp_t:s0
Access: 2018-08-22 01:13:14.855864616 +0800
Modify: 1985-07-17 12:30:45.000000000 +0800
Change: 2018-08-22 01:43:26.644852003 +0800
Birth: -
[root@cherryyao ~]# touch -a -m -t 198507172145.36 /tmp/fstab
[root@cherryyao ~]# stat /tmp/fstab
File: ‘/tmp/fstab’
Size: 501 Blocks: 8 IO Block: 4096 regular file
Device: 802h/2050d Inode: 3278555 Links: 1
Access: (0644/-rw-r--r--) Uid: ( 0/ root) Gid: ( 0/ root)
Context: unconfined_u:object_r:user_tmp_t:s0
Access: 1985-07-17 21:45:36.000000000 +0800
Modify: 1985-07-17 21:45:36.000000000 +0800
Change: 2018-08-22 03:26:37.542783459 +0800
Birth: -
5、如何定义一个命令的别名,如何在命令中引用另一个命令的执行结果?
5.1 命令别名
- 命令别名:
- 获取所有可用别名的定义
- ~]# alias
- 定义别名:
- ~]# alias NAME='COMMAND'
注意:仅对当前shell进程有效
- 撤销别名:
- ~]# unalias NAME
- 获取所有可用别名的定义
[root@cherryyao ~]# alias cls=clear
[root@cherryyao ~]# alias
alias cls='clear'
alias cp='cp -i'
alias egrep='egrep --color=auto'
alias fgrep='fgrep --color=auto'
alias grep='grep --color=auto'
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'
5.2 命令引用
- 强引用: ’ ‘
- 其内部的任何字串都全部直接显示,不做任何的替换
- 弱引用:“ ”
- 双引号中的变量引用,会做变量的替换,也就是说把双引号中间的变量替换成原本变量中就储存的值来显示输出
- 命令引用: $()
- 直接输出命令的执行结果
[root@cherryyao ~]# mktemp /tmp/$(date +%F-%T).XXXXXXXX
/tmp/2018-08-22-03:35:02.zpagRvZN
[root@cherryyao ~]#
[root@cherryyao ~]# mktemp /tmp/$(date +%F-%T).XXXXXXXX
/tmp/2018-08-22-03:35:07.0SLP3mn1
6、显示/var目录下所有以l开头,以一个小写字母结尾,且中间至少出现一位数字(可以有其它字符)的文件或目录。
[root@cherryyao ~]# ls -ld /var/l*[0-9]*[a-z]
-rw-r--r--. 1 root root 0 Aug 22 03:45 /var/llll45452g.txt
drwxr-xr-x. 2 root root 4096 Aug 22 03:46 /var/lsdg99o
7、显示/etc目录下,以任意一个数字开头,且以非数字结尾的文件或目录。
[root@cherryyao ~]# ls -ld /etc/[0-9]*[^0-9]
-rw-r--r--. 1 root root 0 Aug 19 22:57 /etc/3abc23y
8、显示/etc目录下,以非字母开头,后面跟了一个字母以及其它任意长度任意字符的文件或目录。
[root@cherryyao ~]# ls -ld /etc/[^[:alpha:]][a-zA-Z]*
-rw-r--r--. 1 root root 0 Aug 19 22:57 /etc/3abc23y
9、在/tmp目录下创建以tfile开头,后跟当前日期和时间的文件,文件名形如:tfile-2016-05-27-09-32-22。
[root@cherryyao ~]# touch /tmp/tfile-$(date +%Y-%m-%d-%H-%M-%S)
10、复制/etc目录下所有以p开头,以非数字结尾的文件或目录到/tmp/mytest1目录中。
[root@cherryyao ~]# mkdir /tmp/mytest1
[root@cherryyao ~]# cp -r /etc/p*[^0-9] /tmp/mytest1
[root@cherryyao ~]# ls /tmp/mytest1
pam.d pki popt.d prelink.conf.d profile.d
passwd plymouth postfix printcap protocols
passwd- pm ppp profile python
11、复制/etc目录下所有以.d结尾的文件或目录至/tmp/mytest2目录中。
[root@cherryyao ~]# mkdir /tmp/mytest2
[root@cherryyao ~]# cp -r /etc/*.d /tmp/mytest2
[root@cherryyao ~]# ls /tmp/mytest2
bash_completion.d init.d pam.d rc3.d statetab.d
binfmt.d krb5.conf.d popt.d rc4.d sudoers.d
chkconfig.d ld.so.conf.d prelink.conf.d rc5.d sysctl.d
cron.d logrotate.d profile.d rc6.d tmpfiles.d
depmod.d modprobe.d rc0.d rc.d xinetd.d
dracut.conf.d modules-load.d rc1.d rsyslog.d yum.repos.d
grub.d my.cnf.d rc2.d rwtab.d
12、复制/etc/目录下所有以l或m或n开头,以.conf结尾的文件至/tmp/mytest3目录中。
[root@cherryyao ~]# mkdir /tmp/mytest3
[root@cherryyao ~]# cp -r /etc/[lmn]*.conf /tmp/mytest3
[root@cherryyao ~]# ls /tmp/mytest3
ld.so.conf libuser.conf logrotate.conf mke2fs.conf
libaudit.conf locale.conf man_db.conf nsswitch.conf
网友评论