第二周:文件管理练习

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

目录管理管理类命令

mkdir

make directories

mkdir [OPTION]... DIRECTORY...
注意:路径基名作为命令的作用对象时,基名之前的路径必须要存在;
    -p:自动按需创建父目录;
    -v:--verbose,显示详细过程;
    -m MODE:直接给定权限;

[root@localhost ~]# mkdir -pv /tmp/mylinux/etc/sysconfig/network-scripts
mkdir: created directory ‘/tmp/mylinux’
mkdir: created directory ‘/tmp/mylinux/etc’
mkdir: created directory ‘/tmp/mylinux/etc/sysconfig’
mkdir: created directory ‘/tmp/mylinux/etc/sysconfig/network-scripts’

rmdir

remove empty directories

rmdir [OPTION]... DIRECTORY...
    -p:删除目录后,如果其父目录为空,则一并删除;
    -v:显示详细过程;

[root@localhost ~]# rmdir -pv /tmp/mylinux/etc/sysconfig/network-scripts/
rmdir: removing directory, ‘/tmp/mylinux/etc/sysconfig/network-scripts/’
rmdir: removing directory, ‘/tmp/mylinux/etc/sysconfig’
rmdir: removing directory, ‘/tmp/mylinux/etc’
rmdir: removing directory, ‘/tmp/mylinux’
rmdir: removing directory, ‘/tmp’
rmdir: failed to remove directory ‘/tmp’: Directory not empty

文件管理类命令

cp

copy files and directories

单源复制:
    cp [OPTION]... [-T] SOURCE DEST
    如果DEST不存在,则事先创建此文件,并复制源文件的数据流至DEST中;
    如果DEST存在:
    如果DEST是非目录文件,则覆盖目标文件;
    如果DEST是目录文件,则先在DEST目录下创建一个与源文件同名的文件,并复制其数据流;
多源复制:
    cp [OPTION]... SOURCE... DIRECTORY
    cp [OPTION]... -t DIRECTORY SOURCE...
    如果DEST不存在,则发生错误;
    如果DEST存在:
    如果DEST是非目录文件,则发生错误;
    如果DEST是目录文件,则分别复制每个文件至目标目录中,并保持原名;

    -i:交互式复制,即在覆盖之前提醒用户确认;    
    -f:强制覆盖目标文件;
    -r/R:递归复制(recursive);    
    -d:复制符号链接本身,而非其指向的源文件;
    --preserve[=ATTR_LIST]
          mode:权限;
          ownership:属主和属组;
          timestamps:时间戳;
          context:安全标签;
          links:符号链接;
          xattr:扩展属性;
          all:上述所有属性;    
    -a:-dR --preserve=all,用于实现归档(archieve);

[root@localhost ~]# cp /etc/hosts /tmp/host
[root@localhost ~]# cp -r /var/log/ /tmp/

mv

move (rename) files

mv [OPTION]... [-T] SOURCE DEST
mv [OPTION]... SOURCE... DIRECTORY
mv [OPTION]... -t DIRECTORY SOURCE...
    -i:交互式(interactive);    
    -f:强制移动(force);

[root@localhost ~]# mv /tmp/host /tmp/hosts

rm

remove files or directories

rm [OPTION]... FILE...
    -i:交互式;    
    -f:强制删除;
    -r:递归删除(删除目录:rm -rf /PATH/TO/DIR);    
注意:危险操作:rm -rf /*;
所有不用的文件建议不要直接删除,而是先移动至某个专用目录(模拟回收站);

[root@localhost ~]# rm -rf /tmp/log/

文件查看类命令

ls

list directory contents

ls [OPTION]... [FILE]...    
    -a:显示所有文件,包括隐藏文件;
    -A:显示除.和..之外的所有文件;    
    -l:--long,长格式列表,显示文件的详细属性;
    -h:--human-readable,显示文件大小换算后的值;    
    -d:查看目录本身而非其内部的文件列表;
    -r:逆序显示(reverse);
    -R:递归显示(recursive);

[root@localhost ~]# ls -l /etc/issue
-rw-r--r--. 1 root root 23 Dec  9  2015 /etc/issue

注意:文件属性信息详解:
-:文件类型
    -:常规文件,即f;
    d:directory,目录文件;
    b:block device,块设备文件,支持以“block”为单位进行随机访问;
    c:character device,字符设备文件,支持以“character”为单位进行线性访问;
        major number:主设备号,用于标识设备类型,进而确定要加载的驱动程序;
        minor number:次设备号,用于标识同一类型中的不同设备;
    l:symbolic link,符号链接文件;
    p:pipe,命名管道;
    s:socket,套接字文件;
rw-r--r--:文件权限
    rw-:文件属主的权限;
    r--:文件属组的权限;
    r--:其他用户(非属主、属组)的权限;1:使用数字表示文件被硬链接的次数;
root:文件的属主;
root:文件的属组;    
23:数字表示文件的大小,单位是字节;
Dec  9  2015:文件最近一次被修改的时间;
/etc/issue:文件名;

file

determine file type

file FILE

[root@localhost ~]# file /etc/issue
/etc/issue: ASCII text
[root@localhost ~]# file /bin/ls
/bin/ls: ELF 64-bit LSB executable, x86-64, version 1 (SYSV), dynamically linked (uses shared libs), for GNU/Linux 2.6.32, BuildID[sha1]=aa7ff68f13de25936a098016243ce57c3c982e06, stripped
[root@localhost ~]# file /var/log/wtmp 
/var/log/wtmp: data

注意:file命令将文件分为以下三类:
文本文件(ASCII):包含可打印字符的文件;
可执行文件(binary):可以在系统运行的文件;
数据文件(data):包含不可打印的二进制字符的文件,但也不可以在系统运行;

cat

concatenate files and print on the standard output
连接并显示文件

cat [OPTION]... [FILE]...
    -n:显示行号;
    -E:显示行结束符;

[root@localhost ~]# cat -n /etc/passwd
     1    root:x:0:0:root:/root:/bin/bash     
     2    bin:x:1:1:bin:/bin:/sbin/nologin     
     3    daemon:x:2:2:daemon:/sbin:/sbin/nologin     
     4    adm:x:3:4:adm:/var/adm:/sbin/nologin     
     5    lp:x:4:7:lp:/var/spool/lpd:/sbin/nologin     
     6    sync:x:5:0:sync:/sbin:/bin/sync     
     7    shutdown:x:6:0:shutdown:/sbin:/sbin/shutdown     
     8    halt:x:7:0:halt:/sbin:/sbin/halt
        ...(此处省略)
[root@localhost ~]# cat /etc/issue /etc/fstab

\S
Kernel \r on an \m
#
# /etc/fstab
# Created by anaconda on Sun Aug 21 23:55:20 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
#
UUID=3a80cc61-a45f-433f-992e-21e32ae89bcb /                     xfs     defaults        0 0
UUID=4e2eb638-558e-4c6c-ae13-b0820a99acfe /boot                   xfs     defaults        0 0
UUID=f6900d6b-f21f-4a13-953d-4d969aa0b845 /home                   xfs     defaults        0 0
UUID=57d73846-3f09-4d1f-bfa4-57bace5fedc0 swap                    swap     defaults        0 0

tac

concatenate and print files in reverse
是tac的反向显示;

tac [OPTION]... [FILE]...

[root@localhost ~]# tac /etc/issue
Kernel \r on an \m
\S

output the first part of files
查看文件的前n行,默认为前10行;

head [OPTION]... [FILE]...
    -#:查看前#行;
    
[root@localhost ~]# head -5 /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

tail

output the last part of files

tail [OPTION]... [FILE]...
    -#:查看后#行;
    -f:查看文件尾部内容后不退出,跟踪显示新增的行(Ctrl+c退出);

[root@localhost ~]# tail -f /var/log/messages
...(此处省略)
Aug 30 06:01:02 localhost systemd: Starting Session 3 of user root.
Aug 30 07:01:01 localhost systemd: Started Session 4 of user root.
Aug 30 07:01:01 localhost systemd: Starting Session 4 of user root.
(光标停在此处)

more

file perusal filter for crt viewing
文件分屏查看,翻屏至文件尾部后自动退出;

more file

less

opposite of more

more file

[root@localhost ~]# less /etc/rc.d/init.d/functions 

注意:其具体的上下翻页、查询、退出等操作同使用man命令查看手册的操作;

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

命令执行状态返回值

bash通过状态返回值来输出此结果:

  • 成功0

  • 失败1-255

注意:命令执行完成之后,其状态返回值保存于bash的特殊变量$?中;
命令正常执行时,有的还会有命令返回值,根据命令及其功能的不同,其结果各不相同;

命令行展开

  • ~:自动展开为用户家目录,或指定的用户家目录;

  • { }:可承载一个以逗号分割的路径列表,并能够将其展开为多个路径;

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

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

[root@localhost ~]# mkdir -v /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’

2).创建/tmp/mylinux目录如下

第二周:文件管理练习

[root@localhost ~]# 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 ~]# 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.文件的元数据信息有哪些,分别表示什么含义,如何查看?如何修改文件的时间信息

Linux系统的文件由3个部分组成:

  • 数据(data):指普通文件中的实际数据;

  • 元数据(metadata):指用来描述一个文件特征的系统数据,保存在inode中;

  • 目录项(directory entry):保存文件名;

文件的元数据信息及其含义如下:

Size:文件大小;
Blocks/IO Block:单位块大小/块的数量,二者乘积即为文件大小;
Device:设备号;
Access:文件类型与访问权限;
Uid:文件所有者及其ID;
Gid:文件所属组及其ID;
Links:文件硬链接次数,即文件名指向inode节点的数量;
atime:access time,文件被访问的时间;
mtime:modify time,文件被修改的时间;
ctime:change time,文件被改变的时间,即inode节点信息被改变的时间;
Birth:文件被创建的时间;

查看文件元数据信息一般使用stat命令,而修改文件的时间信息一般用touch命令;

stat

display file or file system status

stat FILE

[root@localhost ~]# stat /etc/issue
File: ‘/etc/issue’
Size: 23            Blocks: 8          IO Block: 4096   regular file
Device: 802h/2050d    Inode: 33595545    Links: 1
Access: (0644/-rw-r--r--)  Uid: (    0/    root)   Gid: (    0/    root)
Context: system_u:object_r:etc_t:s0
Access: 2016-08-28 04:20:26.763999574 +0800
Modify: 2015-12-09 17:59:15.000000000 +0800
Change: 2016-08-21 23:55:30.405994623 +0800
Birth: -

touch

change file timestamps

touch [OPTION]... FILE...
   -c:指定的文件路径不存在时不予创建;   
   -a:仅修改access time;
   -m:仅修改modify time;
   -t STAMP:使用[[CC]YY]MMDDhhmm[.ss]格式;

[root@localhost ~]# touch /tmp/hello.txt

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

命令别名的定义与取消分别使用alias和unalias命令;

alias

Define or display aliases

[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'
[root@localhost ~]# alias cls='clear'

注意:使用alias命令定义的别名仅对当前shell进程有效;

unalias

Remove each NAME from the list of defined aliases

[root@localhost ~]# unalias cls

引用命令的执行结果有以下两种形式:

  • $(COMMAND)

  • `COMMAND`

[root@localhost ~]# echo $(pwd)/root
[root@localhost ~]# echo `pwd`/root

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

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

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

[root@localhost ~]# ls -d /etc/[0-9]*[^0-9]

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

[root@localhost ~]# ls -d /etc/[^a-z][a-z]*

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

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

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

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

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

[root@localhost ~]# mkdir /tmp/mytest2
[root@localhost ~]# cp -r /etc/*.d /tmp/mytest2

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

[root@localhost ~]# mkdir /tmp/mytest3
[root@localhost ~]# cp -r /etc/[l,m,n]*.conf /tmp/mytest3

原创文章,作者:dawning,如若转载,请注明出处:http://www.178linux.com/48745