马哥教育网络班21期+第2周课程练习
[TOC]
1. 文件管理类命令介绍
Linux上的文件管理类命令都有哪些,其常用的使用方法及其相关示例演示。
常用的文件管理类命令:cp,mv,rm
a. cp – copy files and directories
NAME cp - copy files and directories SYNOPSIS cp [OPTION]... [-T] SOURCE DEST cp [OPTION]... SOURCE... DIRECTORY cp [OPTION]... -t DIRECTORY SOURCE...
cp [OPTION]... [-T] SOURCE DEST SOURCE是文件: 如果目标不存在: 新建DEST并将SRC中的内容填充至DEST中; 如果目标存在: 如果DEST是文件:将SRC的内容覆盖到DEST中,此时建议为cp命令使用-i选项; 如果DEST是目录:在DEST下新建与源文件同名的文件,并将SRC的内容填充至新文件中; SOURCE是目录: 此时使用选项:-r 递归复制 如果DEST不存在: 则创建指定目录,并复制SRC中的所有文件至DEST 如果DEST存在: 如果DEST是文件:报错 如果DEST是目录:将SRC复制到DEST
常用选项: -i: --interactive 覆盖文件之前先询问用户 -r,-R:递归复制目录及内部所有内容; -a: 归档,相当于-dR --preser=all -d:--no-dereference --preserv=links --preserv[=ATTR_LIST] : mode:权限 ownership: 属主属组 timestamp: 时间戳 links:链接 xattr:扩展属性 context:安全上下文 all -p: --preserv=mode,ownership,timestamp 保留权限,属主属组时间戳 -v:--verbose 显示详细信息 -f: --force 强行复制文件或目录, 不论目的文件或目录是否已经存在
linux 一般默认 cp='cp -i'
-
source是文件且目标不存在时,新建DEST并将SRC中的内容填充至DEST中;
[root@zj-5-2 ~]# ll /tmp/hosts ls: /tmp/hosts: 没有那个文件或目录 [root@zj-5-2 ~]# cp /etc/hosts /tmp/hosts [root@zj-5-2 ~]# cat /tmp/hosts # Do not remove the following line, or various programs # that require network functionality will fail. 127.0.0.1 localhost.localdomain localhost ::1 localhost6.localdomain6 localhost6 192.168.101.202 zj-5-2
-
source是文件,目标存在且为文件,将SRC的内容覆盖到DEST中;
[root@zj-5-2 ~]# cat /tmp/hosts 123 [root@zj-5-2 ~]# cp /etc/hosts /tmp/hosts cp:是否覆盖“/tmp/hosts”? y [root@zj-5-2 ~]# cat /etc/hosts # Do not remove the following line, or various programs # that require network functionality will fail. 127.0.0.1 localhost.localdomain localhost ::1 localhost6.localdomain6 localhost6 192.168.101.202 zj-5-2
-
source是文件,目标存在且为目录,在DEST下新建与源文件同名的文件,并将SRC的内容填充至新文件中;
[root@zj-5-2 ~]# ll /tmp/hosts ls: /tmp/hosts: 没有那个文件或目录 [root@zj-5-2 ~]# cp /etc/hosts /tmp/ [root@zj-5-2 ~]# cat /etc/hosts # Do not remove the following line, or various programs # that require network functionality will fail. 127.0.0.1 localhost.localdomain localhost ::1 localhost6.localdomain6 localhost6 192.168.101.202 zj-5-2
-
SOURCE是目录(此时使用选项:-r 递归复制),如果DEST不存在,则创建指定目录,并复制SRC中的所有文件至DEST
[root@zj-5-2 test]# ll /tmp/root ls: /tmp/root: 没有那个文件或目录 [root@zj-5-2 test]# cp -r /root/ /tmp/root [root@zj-5-2 test]# ll /tmp/root 总计 64 -rw------- 1 root root 1326 07-16 19:32 anaconda-ks.cfg drwxr-xr-x 2 root root 4096 07-16 19:32 Desktop -rw-r--r-- 1 root root 51097 07-16 19:32 install.log -rw-r--r-- 1 root root 0 07-16 19:32 install.log.syslog
-
SOURCE是目录(此时使用选项:-r 递归复制),如果DEST存在且为文件,系统报错
[root@zj-5-2 test]# cp -r /root/ /etc/hosts cp: 无法以目录 “/root/” 来覆盖非目录 “/etc/hosts”
-
SOURCE是目录(此时使用选项:-r 递归复制),如果DEST存在且为目录,则将SRC复制到DEST
[root@zj-5-2 tmp]# mkdir -p /tmp/test [root@zj-5-2 tmp]# cp -r /root/ /tmp/test/ [root@zj-5-2 tmp]# [root@zj-5-2 tmp]# ll /tmp/test/ 总计 4 drwxr-x--- 20 root root 4096 07-16 19:38 root
cp [OPTION]... SOURCE... DIRECTORY SOURCE...:多个文件 DIRECTORY:必须存在且为目录,其他情况均会报错
示例:
[root@zj-5-2 tmp]# ll /tmp/tset1 ls: /tmp/tset1: 没有那个文件或目录 [root@zj-5-2 tmp]# cp /etc/hosts /etc/fstab /tmp/test1 cp: 目标 “/tmp/test1” 不是目录 [root@zj-5-2 tmp]# mkdir -p /tmp/test1 [root@zj-5-2 tmp]# cp /etc/hosts /etc/fstab /tmp/test1 [root@zj-5-2 tmp]# ll /tmp/test1 总计 8 -rw-r--r-- 1 root root 532 07-16 19:44 fstab -rw-r--r-- 1 root root 211 07-16 19:44 hosts
b. mv – move (rename) files
NAME mv - move (rename) files SYNOPSIS mv [OPTION]... [-T] SOURCE DEST mv [OPTION]... SOURCE... DIRECTORY mv [OPTION]... -t DIRECTORY SOURCE...
常用选项有:
-i, --interactive prompt before overwrite -f, --force do not prompt before overwriting
linux一般默认 mv='mv -i'
示例:
[root@zj-5-2 tmp]# cat /tmp/hosts 12345 [root@zj-5-2 tmp]# mv /etc/hosts /tmp/hosts mv:是否覆盖“/tmp/hosts”? n [root@zj-5-2 tmp]# mv -f /etc/hosts /tmp/hosts [root@zj-5-2 tmp]# cat /tmp/hosts # Do not remove the following line, or various programs # that require network functionality will fail. 127.0.0.1 localhost.localdomain localhost ::1 localhost6.localdomain6 localhost6 192.168.101.202 zj-5-2
c. rm – remove files or directories
NAME rm - remove files or directories SYNOPSIS rm [OPTION]... FILE... OPTIONS Remove (unlink) the FILE(s). -f, --force 强制 ignore nonexistent files, never prompt -i, --interactive 交互式 prompt before any removal -r, -R, --recursive 递归删除 remove directories and their contents recursively
linux 一般默认 rm=‘rm -i’
示例:
[root@zj-5-2 test]# rm hosts rm:是否删除 一般文件 “hosts”? y [root@zj-5-2 test]# rm -rf /tmp/test/root/
2. bash基础特性
bash的基础特性之命令执行状态返回值和命令行展开所涉及的内容及其示例演示。
a. 命令执行状态返回值
命令的执行结果状态 成功: 失败 bash使用特殊变量$?保存最近一条命令的执行结果状态: 0:成功 1-255:失败
示例:
[root@zj-5-2 ceshi]# ls 1.sh [root@zj-5-2 ceshi]# echo $? 0 [root@zj-5-2 ceshi]# lsss -bash: lsss: command not found [root@zj-5-2 ceshi]# echo $? 127
b. 命令行展开
~:展开为用户的主目录 ~USERNAME: 展开为指定用户的主目录 {}:可承载一个以逗号分隔的列表,并将其展开为多个路径 单个{}内的内容做加法计算,多个{}相互做乘法计算 /tmp/{a,b}=/tmp/a,/tmp/b, /tmp/{tom,jerry}hi=/tmp/tom/hi,/tmp/jerry/hi /tmp/{a,b}_{c,d}=/tmp/a_c,/tmp/a_d,/tmp/b_c,/tmp/b_d
示例:
~:展开为用户的主目录 [root@zj-5-2 ceshi]# cd ~ [root@zj-5-2 ~]# pwd /root
~USERNAME: 展开为指定用户的主目录 [root@zj-5-2 ~]# cd ~oracle [root@zj-5-2 oracle]# pwd /home/oracle
3. 命令行展开功能练习
-
创建/tmp目录下的:a_c, a_d, b_c, b_d
[root@zj-5-2 tmp]# mkdir -p /tmp/{a,b}_{c,d} [root@zj-5-2 tmp]# ls -lrt /tmp/ drwxr-xr-x 2 root root 4096 07-11 12:28 a_c drwxr-xr-x 2 root root 4096 07-11 12:28 b_d drwxr-xr-x 2 root root 4096 07-11 12:28 b_c drwxr-xr-x 2 root root 4096 07-11 12:28 a_d
-
使用命令行展开功能,在/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@zj-5-2 tmp]# mkdir -p /tmp/mylinux/{bin,boot/grup,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@zj-5-2 tmp]# tree mylinux/ mylinux/ |-- bin |-- boot | `-- grup |-- dev |-- etc | |-- rc.d | | `-- init.d | `-- sysconfig | `-- network-scripts |-- lib | `-- modules |-- lib64 |-- proc |-- sbin |-- sys |-- tmp |-- usr | `-- local | |-- bin | `-- sbin `-- var |-- lock |-- log `-- run 24 directories, 0 files
4. 文件元数据信息
文件的元数据信息有哪些,分别表示什么含义,如何查看?如何修改文件的时间戳信息。
文件:元数据(metadata)和数据(data)组成。
元数据(Metadata),又称中介数据、中继数据,为描述数据的数据(data about data),主要是描述数据属性(property)的信息,用来支持如指示存储位置、历史数据、资源查找、文件记录等功能。
文件的元数据包含文件名、文件类型、文件属主、属组、文件权限等;
stat命令可以查看文件状态,获取文件的元数据。
NAME stat - display file or file system status SYNOPSIS stat [OPTION] FILE...
示例:
[root@zj-5-2 etc]# stat /etc/fstab File: `/etc/fstab' Size: 532 Blocks: 8 IO Block: 4096 regular file Device: 803h/2051d Inode: 1012009 Links: 1 Access: (0644/-rw-r--r--) Uid: ( 0/ root) Gid: ( 0/ root) Access: 2016-07-16 19:44:02.000000000 +0800 Modify: 2015-09-01 08:50:27.000000000 +0800 Change: 2015-09-01 08:50:27.000000000 +0800 三个时间戳: access time: 访问时间,简写atime,读取文件内容 modify time:修改时间,mtime,改变文件内容 change time:改变时间,ctime,元数据发生改变 文件的时间戳管理工具: touch [OPTION]... [FILE]... -a:只改变atime -m:只改变mtime -t STAMP: [CC]YYMMDDhhmm[.ss]
[root@zj-5-2 etc]# ls -l /etc/fstab -rw-r--r-- 1 root root 532 Sep 1 2015 /etc/fstab ls -l的命令输出自左向右共分为7部分: 1. -rw-r--r-- 文件类型及权限 按照自左向右的顺序: -:文件类型,普通文件 rw-:属主权限 r--: 属组权限 r--:其他用户权限 2. 1 :文件被硬链接的次数 3. root:属主 4. root:属组 5. 532:文件大小 6. Sep 1 2015:文件最后一次被修改的时间 7. /etc/fstab:文件路径及文件名
文件类型分类: -(f):普通文件 d:目录文件 directory l:符号链接 link b:块设备文件 block,一般位于/dev目录下,如硬盘、光盘 c:字符设备文件 character,一般位于/dev目录下,如键盘 p:管道文件 pipe s:套接字文件 socket 文件权限: r:可读,数字表示为4 w:可写,数字表示为2 x:可执行,数字表示为1
5. 命令别名的使用 – alias
如何定义一个命令的别名,如何在命令中引用另一个命令的执行结果?
通过alias命令实现, alias [-p] [name[=value] ... ] 1.alias: 显示当前shell进程中所有可用的命令别名 2.alias NAME='VALUE' 定义别名NAME,其相当于执行命令VALUE; 注意:在命令行中定义的别名,仅对当前shell生效;若想永久生效,要定义在配置文件中; 仅对当前用户有效:~/.bashrc 对所有用户有效:/etc/bashrc Note: 编辑配置文件给出的新配置不会立即生效 bash进程重新读取配置文件: source 配置文件名(/path/to/config_file) . 配置文件名 撤销别名:unalias unalias [-a] name [name ...] -a: 撤销所有命令别名 unalias NAME:撤销别名NAME Note:如果别名同原命令的名称,则如果要执行原命令,可使用"\COMMAND";
示例:
[root@zj-5-2 ~]# alias alias cp='cp -i' alias grep='grep --color=auto' alias l.='ls -d .* --color=tty' alias ll='ls -l --color=tty' alias ls='ls --color=tty' alias mv='mv -i' alias rm='rm -i' alias vi='vim' alias which='alias | /usr/bin/which --tty-only --read-alias --show-dot --show-tilde' [root@zj-5-2 ~]# [root@zj-5-2 ~]# alias name='hostname' [root@zj-5-2 ~]# name zj-5-2 [root@zj-5-2 ~]# unalias name [root@zj-5-2 ~]# name -bash: name: command not found
6. 通配符使用练习
a. 通配符介绍
1. * 任意长度的任意字符 2. ? 任意单个字符 3. [] 匹配指定范围内的任意单个字符 [0-9]: 只能有一个数字 [a-z]:只能有一个字符,不区分字符大小写 [A-Z]: 只匹配一个大写字符 [0-9a-z]: 匹配一个数字和字符 aab aAb == a[a-z]b aAb == a[A-Z]b 4. [^] 匹配指定范围外的任意单个字符 [^0-9] 5. 专用字符集合(均表示单个字符) [:digit:]:任意数字,相当于[0-9] [:lower:]:任意小写字母 [:upper:]:任意大写字母 [:alpha:]:任意大小写字母,相当于[a-z] [:alnum:]:任意数字或字母 [:space:]:任意空白字符 [:punct:]:标点符号 [:cntrl:]:控制符
b. 相关练习
-
显示/var目录下所有以l开头,以一个小写字母结尾,且中间至少出现一位数字(可以有其它字符)的文件或目录.
ls -d /var/l*[0-9]*[[:lower:]] ls -d /var/l*[[:digit:]]*[[:lower:]]
-
显示/etc目录下,以任意一个数字开头,且以非数字结尾的文件或目录.
ls -d /etc/[0-9]*[^0-9] ls -d /etc/[[:digit:]]*[^[:digit:]]
-
显示/etc目录下,以非字母开头,后面跟了一个字母以及其它任意长度任意字符的文件或目录.
ls -d /etc/[^[:alpha:]][[:alpha:]]*
-
在/tmp目录下创建以tfile开头,后跟当前日期和时间的文件,文件名形如:tfile-2016-05-27-09-32-22.
touch /tmp/tfile-`date +%F-%H-%M-%S` touch /tmp/tfile-`date +%Y-%m-%d-%H-%M-%S`
-
复制/etc目录下所有以p开头,以非数字结尾的文件或目录到/tmp/mytest1目录中.
[root@zj-5-2 ~]# mkdir /tmp/mytest1 [root@zj-5-2 ~]# cp -a /etc/p*[^[:digit:]] /tmp/mytest1 [root@zj-5-2 ~]# ls /tmp/mytest1/ pam.d pinforc profile pam_smb.conf pki profile-2016-04-11.bak pango pm profile-2016-04-13.bak passwd ppp profile.bak passwd- prelink.cache profile.d passwd-2016-04-11.bak prelink.conf protocols passwd-2016-04-13.bak prelink.conf.d pcmcia printcap
-
复制/etc目录下所有以.d结尾的文件或目录至/tmp/mytest2目录中.
[root@zj-5-2 ~]# mkdir /tmp/mytest2 [root@zj-5-2 ~]# cp -a /etc/*.d /tmp/mytest2/ [root@zj-5-2 ~]# ls /tmp/mytest2/ bash_completion.d ld.so.conf.d pam.d rc3.d reader.conf.d cron.d logrotate.d prelink.conf.d rc4.d rwtab.d depmod.d lsb-release.d profile.d rc5.d sane.d dev.d makedev.d rc0.d rc6.d setuptool.d dnsmasq.d modprobe.d rc1.d rc.d xinetd.d init.d netplug.d rc2.d readahead.d yum.repos.d
-
复制/etc/目录下所有以l或m或n开头,以.conf结尾的文件至/tmp/mytest3目录中.
[root@zj-5-2 ~]# mkdir /tmp/mytest3 [root@zj-5-2 ~]# cp -a /etc/[lmn]*.conf /tmp/mytest3 [root@zj-5-2 ~]# ls /tmp/mytest3 ldap.conf libaudit.conf ltrace.conf modprobe.conf nscd.conf ld.so.conf libuser.conf mcelog.conf mtools.conf nsswitch.conf lftp.conf logrotate.conf mke2fs.conf multipath.conf ntp.conf
原创文章,作者:N21_未来人,如若转载,请注明出处:http://www.178linux.com/24386
评论列表(3条)
写的很好,排版也很漂亮,加油。给你提一个问题,怎么在文件存在的情况下,在不提示警告的情况下,直接覆盖文件?
@马哥教育:因为我的linux系统中alias cp=’cp -i’,所以可以unalias cp,然后使用cp -f进行复制即可;
方法二:直接使用原cp命令进行复制,\cp -r
@N21_未来人:\cp -f