1、Linux上的文件管理类命令都有哪些,其常用的使用方法及其相关示例演示。
1、目录管理类的命令:
mkdir:创建目录
常用参数:
-p: 自动按需创建父目录
-v: 显示详细过程
-m MODE:直接给定权限
[root@localhost ~]# mkdir -pv -m 600 /tmp/a/b mkdir: created directory ‘/tmp/a’ mkdir: created directory ‘/tmp/a/b’ [root@localhost ~]# ls -ld /tmp/a/b drw-------. 2 root root 6 May 7 21:14 /tmp/a/b
rmdir:删除空目录
常用参数:
-p:删除某目录后,如果其父目录为空,则一并删除
-v: 显示详细过程
[root@localhost ~]# rmdir -pv /tmp/a/b rmdir: removing directory, ‘/tmp/a/b’ rmdir: removing directory, ‘/tmp/a’ rmdir: removing directory, ‘/tmp’ rmdir: failed to remove directory ‘/tmp’: Device or resource busy
2、文件管理类命令:
cp:复制文件
单源复制:cp [OPTION]... [-T] SOURCE DEST
如果DEST不存在:则事先创建此文件,并复制源文件的数据流至DEST中
如果DEST存在:如果DEST是非目录文件,则覆盖目标文件;如果DEST是目录文件,则先在DEST目录下创建一个与源文件同名的文件,并复制其数据流
[root@localhost ~]# mkdir /tmp/src /tmp/dst [root@localhost ~]# touch /tmp/src/file{1,2,3} [root@localhost ~]# ls /tmp/src/ /tmp/dst /tmp/dst: /tmp/src/: file1 file2 file3 [root@localhost ~]# cp /tmp/src/file1 /tmp/dst/ [root@localhost ~]# ls /tmp/dst/ file1 [root@localhost ~]# cp /tmp/src/file2 /tmp/dst/file1 cp: overwrite ‘/tmp/dst/file1’? y [root@localhost ~]# ls /tmp/dst/ file1 [root@localhost ~]# cp /tmp/src/file2 /tmp/dst/ [root@localhost ~]# ls /tmp/dst/ file1 file2
多源复制:cp [OPTION]... SOURCE... DIRECTORY
cp [OPTION]... -t DIRECTORY SOURCE...
如果DEST不存在:错误
如果DEST存在:如果DEST是非目录文件,错误;如果DEST是目录文件,分别复制每个文件至目标目录中,并保持原名
注:多源复制仅支持DEST为目录文件
[root@localhost ~]# cp /tmp/src/* /tmp/dst1/ cp: target ‘/tmp/dst1/’ is not a directory [root@localhost ~]# cp /tmp/src/* /tmp/dst/file cp: target ‘/tmp/dst/file’ is not a directory [root@localhost ~]# cp /tmp/src/* /tmp/dst/ cp: overwrite ‘/tmp/dst/file1’? y cp: overwrite ‘/tmp/dst/file2’? y [root@localhost ~]# ls /tmp/dst file1 file2 file3
常用参数:
-i:交互式,即覆盖之前提醒用户确认
注:root用户默认使用添加-i参数的别名命令,普通用户默认使用命令本身,root用户也想使用命令本身需在命令前增加"\"
[root@localhost ~]# alias alias cp='cp -i'
-f:强制覆盖目标文件
[root@localhost ~]# echo "123" > /tmp/src/file1 [root@localhost ~]# cp -f /tmp/src/file1 /tmp/dst/file1 cp: overwrite ‘/tmp/dst/file1’? y [root@localhost ~]# \cp -f /tmp/src/file1 /tmp/dst/file1 [root@localhost ~]# cat /tmp/dst/file1 123
-r, -R:递归复制目录
-d:复制符号链接文件本身,而非其指向的源文件
[root@localhost ~]# ln -s /tmp/src/file1 /tmp/src/filelink [root@localhost ~]# ls -l /tmp/src/ total 4 -rw-r--r--. 1 root root 4 May 7 23:55 file1 -rw-r--r--. 1 root root 0 May 7 23:46 file2 -rw-r--r--. 1 root root 0 May 7 23:46 file3 lrwxrwxrwx. 1 root root 14 May 8 00:08 filelink -> /tmp/src/file1 [root@localhost ~]# cp -d /tmp/src/filelink /tmp/dst/ [root@localhost ~]# ls -l /tmp/dst/ total 4 -rw-r--r--. 1 root root 4 May 8 00:02 file1 -rw-r--r--. 1 root root 0 May 7 23:57 file2 -rw-r--r--. 1 root root 0 May 7 23:57 file3 lrwxrwxrwx. 1 root root 14 May 8 00:09 filelink -> /tmp/src/file1 [root@localhost ~]# cp /tmp/src/filelink /tmp/dst/filelink1 [root@localhost ~]# ls -l /tmp/dst/ total 8 -rw-r--r--. 1 root root 4 May 8 00:02 file1 -rw-r--r--. 1 root root 0 May 7 23:57 file2 -rw-r--r--. 1 root root 0 May 7 23:57 file3 lrwxrwxrwx. 1 root root 14 May 8 00:09 filelink -> /tmp/src/file1 -rw-r--r--. 1 root root 4 May 8 00:12 filelink1
-a:-dR --preserve=all, archive,用于实现归档
--preserv=mode:权限
ownership:属主和属组
timestamps: 时间戳
context:安全标签(selinux安全上下文)
xattr:扩展属性
links:符号链接
all:上述所有属性
mv:移动文件或重命名
mv [OPTION]... [-T] SOURCE DEST
mv [OPTION]... SOURCE... DIRECTORY
mv [OPTION]... -t DIRECTORY SOURCE..
常用参数:
-i:交互式,即移动之前提醒用户确认
-f:强制移动
[root@localhost ~]# mv /tmp/dst/file1 /tmp/dst/file4 [root@localhost ~]# ls -l /tmp/dst/ total 8 -rw-r--r--. 1 root root 0 May 7 23:57 file2 -rw-r--r--. 1 root root 0 May 7 23:57 file3 -rw-r--r--. 1 root root 4 May 8 00:02 file4 lrwxrwxrwx. 1 root root 14 May 8 00:09 filelink -> /tmp/src/file1 -rw-r--r--. 1 root root 4 May 8 00:12 filelink1
rm:删除文件
rm [OPTION]... FILE...
常用参数:
-i:交互式,即删除之前提醒用户确认
-f:强制删除
-r: 递归删除
[root@localhost ~]# rm -rf /tmp/dst/ [root@localhost ~]# ls /tmp/dst ls: cannot access /tmp/dst: No such file or directory
3、文件查看类命令:
ls:列出指定目录下的内容
常用参数:
-a: 显示所有文件,包括隐藏文件
[root@localhost ~]# ls -a / . bin dev home lib64 mnt proc run srv tmp var .. boot etc lib media opt root sbin sys usr
-A:显示除.和..之外的所有文件
[root@localhost ~]# ls -A / bin dev home lib64 mnt proc run srv tmp var boot etc lib media opt root sbin sys usr
-l:长格式列表,即显示文件的详细属性信息
-h:以人类可读的方式对文件大小单位换算;换算后结果可能会是非精确值
[root@localhost ~]# ls -lh / total 32K lrwxrwxrwx. 1 root root 7 Aug 3 2016 bin -> usr/bin dr-xr-xr-x. 3 root root 4.0K Aug 2 2016 boot drwxr-xr-x. 19 root root 3.1K Aug 2 2016 dev drwxr-xr-x. 132 root root 8.0K Aug 2 2016 etc drwxr-xr-x. 4 root root 90 Aug 2 2016 home lrwxrwxrwx. 1 root root 7 Aug 3 2016 lib -> usr/lib lrwxrwxrwx. 1 root root 9 Aug 3 2016 lib64 -> usr/lib64 drwxr-xr-x. 3 root root 18 Aug 2 2016 media drwxr-xr-x. 3 root root 17 Aug 2 2016 mnt drwxr-xr-x. 3 root root 15 Aug 3 2016 opt dr-xr-xr-x. 505 root root 0 Aug 3 2016 proc dr-xr-x---. 14 root root 4.0K Aug 2 2016 root drwxr-xr-x. 35 root root 1.2K May 7 21:26 run lrwxrwxrwx. 1 root root 8 Aug 3 2016 sbin -> usr/sbin drwxr-xr-x. 2 root root 6 Mar 13 2014 srv dr-xr-xr-x. 13 root root 0 Aug 3 2016 sys drwxrwxrwt. 17 root root 4.0K May 7 21:54 tmp drwxr-xr-x. 13 root root 4.0K Aug 3 2016 usr drwxr-xr-x. 22 root root 4.0K Aug 3 2016 var
-d:查看目录自身而非其内部的文件列表
[root@localhost ~]# ls -ld /etc drwxr-xr-x. 132 root root 8192 Aug 2 2016 /etc
-r:逆序显示
[root@localhost ~]# ls -r / var tmp srv run proc mnt lib64 home dev bin usr sys sbin root opt media lib etc boot
-R:递归显示
注:Linux系统上的文件类型有:
-:file,常规文件
d:directory,目录文件
b:block device,块设备文件,支持以“block”为单位进行随机访问
c:character device,字符设备文件,支持以“character”为单位进行线性访问
major number:主设备号,用于标识设备类型,进而确定要加载的驱动程序
minor number:次设备号,用于标识同一类型中的不同的设备
l:symbolic link,符号链接文件
p:pipe,命名管道
s:socket,套接字文件
file:查看文件内容类型
[root@localhost ~]# file /sbin/ss /sbin/ss: ELF 64-bit LSB executable, x86-64, version 1 (SYSV), dynamically linked (uses shared libs), for GNU/Linux 2.6.32, BuildID[sha1]=0x14230a7d5743155147230c263cb721757a49db89, stripped
cat:连接并显示文件
常用参数:
-n:给显示的文本行编号
[root@localhost ~]# cat -n /etc/fstab 1 2# 3# /etc/fstab 4# Created by anaconda on Tue Aug 2 21:31:19 2016 5# 6# Accessible filesystems, by reference, are maintained under '/dev/disk' 7# See man pages fstab(5), findfs(8), mount(8) and/or blkid(8) for more info 8# 9/dev/mapper/rhel-root / xfs defaults 1 1 10UUID=ce40e87b-854d-42dc-ac50-e1309101c43d /boot xfs defaults 1 2 11/dev/mapper/rhel-swap swap swap defaults 0 0 12/dev/cdrom/media/cdromiso9660defaults0 0
-E: 显示行结束符$
[root@localhost ~]# cat -E /etc/issue \S$ Kernel \r on an \m$ $
tac:连接并显示文件,是cat的反向显示
常用参数:
-n:给显示的文本行编号
-E: 显示行结束符$
head:查看文件的前n行
常用参数:
-n #(-#):查看文件的前#行
[root@localhost ~]# head -n 10 /etc/passwd root:x:0:0:root:/root:/bin/bash bin:x:1:1:bin:/bin:/sbin/nologin daemon:x:2:2:daemon:/sbin:/sbin/nologin adm:x:3:4:adm:/var/adm:/sbin/nologin lp:x:4:7:lp:/var/spool/lpd:/sbin/nologin sync:x:5:0:sync:/sbin:/bin/sync shutdown:x:6:0:shutdown:/sbin:/sbin/shutdown halt:x:7:0:halt:/sbin:/sbin/halt mail:x:8:12:mail:/var/spool/mail:/sbin/nologin operator:x:11:0:operator:/root:/sbin/nologin
tail:查看文件的后n行
常用参数:
-n #(-#):查看文件的后#行
[root@localhost ~]# tail -5 /etc/passwd gnome-initial-setup:x:993:991::/run/gnome-initial-setup/:/sbin/nologin postfix:x:89:89::/var/spool/postfix:/sbin/nologin sshd:x:74:74:Privilege-separated SSH:/var/empty/sshd:/sbin/nologin tcpdump:x:72:72::/:/sbin/nologin linuxprobe:x:1000:1000:linuxprobe:/home/linuxprobe:/bin/bash
-f:查看文件尾部内容结束后不退出,跟随显示新增的行(通常用于查看系统日志信息)
[root@localhost ~]# tail -f /var/log/messages May 7 22:18:40 localhost dbus[1088]: [system] Activating via systemd: service name='net.reactivated.Fprint' unit='fprintd.service' May 7 22:18:40 localhost systemd: Starting Fingerprint Authentication Daemon... May 7 22:18:41 localhost dbus-daemon: dbus[1088]: [system] Successfully activated service 'net.reactivated.Fprint' May 7 22:18:41 localhost dbus[1088]: [system] Successfully activated service 'net.reactivated.Fprint' May 7 22:18:41 localhost systemd: Started Fingerprint Authentication Daemon. May 7 22:18:41 localhost fprintd: ** (fprintd:4822): WARNING **: fprint init failed with error -99 May 7 22:18:41 localhost systemd: fprintd.service: main process exited, code=exited, status=157/n/a May 7 22:18:41 localhost systemd: Unit fprintd.service entered failed state. May 7 22:20:01 localhost systemd: Starting Session 9 of user root. May 7 22:20:01 localhost systemd: Started Session 9 of user root.
more:分屏查看文件,翻屏至文件尾部后自动退出
less:分屏查看文件,支持上下翻页、查询操作,按q退出
2、bash的工作特性之命令执行状态返回值和命令行展开所涉及的内容及其示例演示。
1、bash通过状态返回值来输出命令执行的结果:
成功:0
失败:1-255之间的随机数,根据命令及其功能不同,结果各不相同
命令执行完成之后,其状态返回值保存于bash的特殊变量$?中,可以通过echo $?查看
[root@localhost ~]# ls /boot/ config-3.10.0-123.el7.x86_64 grub2 initramfs-0-rescue-49da9e087d6e4f9dab50f2af4a9a5921.img initramfs-3.10.0-123.el7.x86_64.img initramfs-3.10.0-123.el7.x86_64kdump.img initrd-plymouth.img symvers-3.10.0-123.el7.x86_64.gz System.map-3.10.0-123.el7.x86_64 vmlinuz-0-rescue-49da9e087d6e4f9dab50f2af4a9a5921 vmlinuz-3.10.0-123.el7.x86_64 [root@localhost ~]# echo $? 0 [root@localhost ~]# ls /boot/error ls: cannot access /boot/error: No such file or directory [root@localhost ~]# echo $? 2
2、命令行展开所涉及的内容
~:自动展开为用户的家目录,或指定的用户的家目录
[root@localhost ~]# cp /etc/issue ~/ [root@localhost ~]# ls ~/ 2017-05-07 anaconda-ks.cfg Downloads Music Templates 22:50 Desktop initial-setup-ks.cfg Pictures Videos 22:50:00 Documents issue Public
{}:可承载一个以逗号分隔的路径列表,并能够将其展开为多个路径
[root@localhost ~]# touch /tmp/file{1..10} [root@localhost ~]# ls /tmp/file* /tmp/file1 /tmp/file2 /tmp/file4 /tmp/file6 /tmp/file8 /tmp/file10 /tmp/file3 /tmp/file5 /tmp/file7 /tmp/file9
3、请使用命令行展开功能来完成以下练习:
(1)、创建/tmp目录下的:a_c, a_d, b_c, b_d
[root@localhost ~]# mkdir -pv /tmp/{a,b}_{c,d} mkdir: created directory ‘/tmp/a_c’ mkdir: created directory ‘/tmp/a_d’ mkdir: created directory ‘/tmp/b_c’ mkdir: created directory ‘/tmp/b_d’ [root@localhost ~]# tree -L 1 /tmp/ /tmp/ ├── 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
[root@localhost ~]# 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: created directory ‘/tmp/mylinux’ mkdir: created directory ‘/tmp/mylinux/bin’ mkdir: created directory ‘/tmp/mylinux/boot’ mkdir: created directory ‘/tmp/mylinux/boot/grub’ mkdir: created directory ‘/tmp/mylinux/dev’ mkdir: created directory ‘/tmp/mylinux/etc’ mkdir: created directory ‘/tmp/mylinux/etc/rc.d’ mkdir: created directory ‘/tmp/mylinux/etc/rc.d/init.d’ mkdir: created directory ‘/tmp/mylinux/etc/sysconfig’ mkdir: created directory ‘/tmp/mylinux/etc/sysconfig/network-scripts’ mkdir: created directory ‘/tmp/mylinux/lib’ mkdir: created directory ‘/tmp/mylinux/lib/modules’ mkdir: created directory ‘/tmp/mylinux/lib64’ mkdir: created directory ‘/tmp/mylinux/proc’ mkdir: created directory ‘/tmp/mylinux/sbin’ mkdir: created directory ‘/tmp/mylinux/sys’ mkdir: created directory ‘/tmp/mylinux/tmp’ mkdir: created directory ‘/tmp/mylinux/usr’ mkdir: created directory ‘/tmp/mylinux/usr/local’ mkdir: created directory ‘/tmp/mylinux/usr/local/bin’ mkdir: created directory ‘/tmp/mylinux/usr/local/sbin’ mkdir: created directory ‘/tmp/mylinux/var’ mkdir: created directory ‘/tmp/mylinux/var/lock’ mkdir: created directory ‘/tmp/mylinux/var/log’ mkdir: created directory ‘/tmp/mylinux/var/run’ [root@localhost ~]# 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 24 directories, 0 files
4、文件的元数据信息有哪些,分别表示什么含义,如何查看?如何修改文件的时间戳信息。
1、文件的数据分为元数据(metadata)和数据(data)。其中元数据是对数据本身特征的描述,包括:文件路径、文件大小、数据块信息,文件类型、文件权限、属主属组、安全信息、时间戳信息(访问时间、修改时间、改变时间)等内容。
2、查看文件元数据信息
stat:显示文件或文件系统状态
[root@localhost ~]# echo 123 > /tmp/testfile [root@localhost ~]# stat /tmp/testfile File: ‘/tmp/testfile’ Size: 4 Blocks: 8 IO Block: 4096 regular file Device: fd00h/64768dInode: 102531229 Links: 1 Access: (0644/-rw-r--r--) Uid: ( 0/ root) Gid: ( 0/ root) Context: unconfined_u:object_r:user_tmp_t:s0 Access: 2017-05-08 01:10:05.142639974 +0800 Modify: 2017-05-08 01:10:05.142639974 +0800 Change: 2017-05-08 01:10:05.142639974 +0800 Birth: -
3、修改文件的时间戳信息
touch:修改文件时间戳或创建文件
常用参数:
-c: 指定的文件路径不存在时不予创建
-a: 仅修改access time
[root@localhost ~]# touch -a -t 05101223 /tmp/testfile [root@localhost ~]# stat /tmp/testfile File: ‘/tmp/testfile’ Size: 4 Blocks: 8 IO Block: 4096 regular file Device: fd00h/64768dInode: 102531229 Links: 1 Access: (0644/-rw-r--r--) Uid: ( 0/ root) Gid: ( 0/ root) Context: unconfined_u:object_r:user_tmp_t:s0 Access: 2017-05-10 12:23:00.000000000 +0800 Modify: 2017-05-08 01:13:30.103620135 +0800 Change: 2017-05-08 01:14:37.774613584 +0800 Birth: -
-m:仅修改modify time
[root@localhost ~]# touch -m -t 05111122 /tmp/testfile [root@localhost ~]# stat /tmp/testfile File: ‘/tmp/testfile’ Size: 4 Blocks: 8 IO Block: 4096 regular file Device: fd00h/64768dInode: 102531229 Links: 1 Access: (0644/-rw-r--r--) Uid: ( 0/ root) Gid: ( 0/ root) Context: unconfined_u:object_r:user_tmp_t:s0 Access: 2017-05-10 12:23:00.000000000 +0800 Modify: 2017-05-11 11:22:00.000000000 +0800 Change: 2017-05-08 01:15:16.110609873 +0800 Birth: -
-t STAMP [[CC]YY]MMDDhhmm[.ss]:修改时间戳
5、如何定义一个命令的别名,如何在命令中引用另一个命令的执行结果?
1、定义别名及撤销别名
alias NAME='COMMAND'
注:仅对当前shell进程有效
unalias NAME
[root@localhost ~]# alias lsver='cat /etc/redhat-release' [root@localhost ~]# lsver Red Hat Enterprise Linux Server release 7.0 (Maipo) [root@localhost ~]# alias 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 lsver='cat /etc/redhat-release' alias mv='mv -i' alias rm='rm -i' alias which='alias | /usr/bin/which --tty-only --read-alias --show-dot --show-tilde' [root@localhost ~]# unalias lsver [root@localhost ~]# alias 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'
2、引用另一个命令的执行结果
$(COMMAND)或`COMMAND`
[root@localhost ~]# touch /tmp/file$(date +%F) [root@localhost ~]# touch /tmp/file`date +%T` [root@localhost ~]# ls /tmp/file* /tmp/file01:31:33 /tmp/file2017-05