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
|