Linux中的文件管理命令及shell特性

Linux中的文件管理命令

一、linux中的目录管理命令:mkdirrmdir

mkdir命令:创建目录

- SYNOPSIS     
   mkdir [OPTION]... DIRECTORY...
   
- OPTION     
   -p:按需自动创建父目录  
   -v:显示命令执行的详细过程  
   -m:创建目录时直接给定权限,否则为默认权限
   
- example:
    [root@centos ~]# mkdir -pv /tmp/x/y/z
    mkdir: created directory `/tmp/x'
    mkdir: created directory `/tmp/x/y'
    mkdir: created directory `/tmp/x/y/z'
    [root@centos ~]#

rmdir:删除目录

- SYNOPSIS:  
   rmdir [OPTION]... DIRECTORY...
   
- OPTION:  
   -p:删除某空目录后,如果其父目录为空,则一起删除。  
   -v:显示命令执行的详细过程
   
- example:    
    [root@centos ~]# rmdir -pv /tmp/x/y/z
    rmdir: removing directory, `/tmp/x/y/z'
    rmdir: removing directory, `/tmp/x/y'
    rmdir: removing directory, `/tmp/x'
    rmdir: removing directory, `/tmp'
    rmdir: failed to remove directory`/tmp': Directory not empty
    [root@centos ~]#

二、Linux中文件查看命令:cattacheadtailmoreless

more命令:file perusal filter for crt viewing

- SYNOPSIS:  
   more [OPTION] [file ...]
   
- 特点: 翻屏至文件尾部后自动退出

less命令:opposite of more

- SYNOPSIS:  
   less [file ...]
   
- 特点: 其实man读取帮助手册就是调用的less指令。所以less命令的操作方式同man

head命令:查看文件的前N行,默认为10行

- SYNOPSIS:  
    head [OPTION]... [FILE]...  
- OPTION:  
    -n # 或 -#:指定查看前#行

tail命令:查看文件的后N行,默认为10行

- SYNOPSIS:  
    tail [OPTION]... [FILE]...  
- OPTION:  
    -n # 或 -#:指定查看后#行    
    -f:查看文件尾部内容结束后不退出,跟随显示新增的行

cat:文本文件查看器。可将多个文本文件连接在一起显示
注:不能查看二进制文件。可以是用file指令确定文件是否是文本文件(ASCII test)

- SYNOPSIS:  
    cat [OPTION]... [FILE]...  
- OPTION:  
    -n:带行编号显示文件内容(不会修改原文)    
    -E:显示行结束符$

tac命令:与cat功能相近,只是逆序显示文件内容

三、Linux中文件管理命令:cpmvrm

cp:实现文件复制

- SYNOPSIS:  
    单原复制: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目录下创建一个与源文件同名的文件,并复制数据流到目标文件        
    多源复制:cp [OPTION]... SOURCE... DIRECTORY
    多源复制:cp [OPTION]... -t DIRECTORY SOURCE...
        - 如果DEST不存在:错误。        
        - 如果DEST存在:            
            -- 如果DEST是非目录文件,错误            
            -- 如果是目录文件。分别复制每个文件,至目标目录中,并保持原名。
            
- OPTION:
    -i:交互式复制,即覆盖之前提醒用户确认。    
    -f:强行覆盖目标文件。    
    -r:递归复制目录    
    -d:复制符号链接文件的本身,而非其指向的源文件    
    -a:-dR --preserve=all,用于实现归档    
    --preserve=        
        mode:权限
        ownership:属主和属组
        timestamps:时间戳
        context:安全标签
        xattr:扩展属性
        links:符号链接
        all:上述所有属性
        
- example:    
    `单源复制-目标文件不存在情况`
    [root@centos ~]# ls /tmp/
    whatis.q3Uigb  yum.log
    [root@centos ~]# cp /etc/issue /tmp
    [root@centos ~]# ls /tmp/
    issue  whatis.q3Uigb  yum.log
    [root@centos ~]# cat /tmp/issue 
    CentOS release 6.5 (Final)
    Kernel \r on an \m
    
    `单源复制-目标文件已存在情况`
    [root@centos ~]# cp /etc/hosts /tmp/issue 
    cp: overwrite `/tmp/issue'? y
    [root@centos ~]# cat /tmp/issue 
    127.0.0.1   localhost localhost.localdomain localhost4 localhost4.localdomain4
    ::1         localhost localhost.localdomain localhost6 localhost6.localdomain6
    
    `多源复制-目标目录不存在情况`
    [root@centos ~]# cp /etc/hosts /etc/issue /tmp/x
    cp: target `/tmp/x' is not a directory
    
    `多源复制-目标目录已存在情况`
    [root@centos ~]# mkdir /tmp/x
    [root@centos ~]# cp /etc/hosts /etc/issue /tmp/x
    [root@centos ~]# ls /tmp/x
    hosts  issue
    [root@centos ~]# 
    
    `-r选项实例`
    [root@centos ~]# mkdir -p /tmp/souce/x/y/z
    [root@centos ~]# mkdir /tmp/dest
    [root@centos ~]# cp -r /tmp/souce/ /tmp/dest/
    [root@centos ~]# tree /tmp/dest/    /tmp/dest/
    └── souce
        └── x
            └── y
                └── z
    
    4 directories, 0 files
    [root@centos ~]# 
    
    `--preserve选项实例`
    [root@centos ~]# ls -l /tmp/ |grep liubin
    -rw-rw-r--. 1 liubin liubin    0 Sep 27 04:56 liubin    
    [root@centos ~]# cp --preserve=ownership /tmp/liubin /tmp/root
    [root@centos ~]# ls -l /tmp/
    total 16
    drwxr-xr-x. 3 root   root   4096 Sep 27 04:53 dest
    -rw-r--r--. 1 root   root    158 Sep 27 04:43 issue    
    -rw-rw-r--. 1 liubin liubin    0 Sep 27 04:56 liubin    
    -rw-rw-r--. 1 liubin liubin    0 Sep 27 04:59 root    
    drwxr-xr-x. 3 root   root   4096 Sep 27 04:49 souce
    drwxr-xr-x. 2 root   root   4096 Sep 27 04:44 x
    -rw-------. 1 root   root      0 Sep 27 03:07 yum.log    
    [root@centos ~]#

mv命令:文件移动

- SYNOPSIS:  
    mv [OPTION]... [-T] SOURCE DEST
    mv [OPTION]... SOURCE... DIRECTORY
    mv [OPTION]... -t DIRECTORY SOURCE...
    
- OPTION:  
    -i:交互式    
    -f:强制移动
    
- example:
    [root@centos ~]# tree /tmp/x
    /tmp/x
    ├── hosts
    └── issue    
    0 directories, 2 files
    [root@centos ~]# tree /tmp/dest/
    /tmp/dest/
    └── souce
        └── x
            └── y
                └── z    
    4 directories, 0 files
    [root@centos ~]# mv /tmp/x /tmp/dest/
    [root@centos ~]# tree /tmp/dest/
    /tmp/dest/
    ├── souce
    │   └── x
    │       └── y
    │           └── z
    └── x
        ├── hosts
        └── issue    
    5 directories, 2 files
    [root@centos ~]#

rm命令:文件移除。谨慎使用。

- SYNOPSIS:  
    rm [OPTION]... FILE...
    
- OPTION:  
    -i:交互式    
    -f:强制    
    -r:递归
    
- example:
  [root@centos ~]# ls /tmp
    dest  issue  liubin  root  souce  yum.log
    [root@centos ~]# tree /tmp/souce/
    /tmp/souce/
    └── x
        └── y
            └── z    
    3 directories, 0 files
    [root@centos ~]# rm -rf /tmp/souce/
    [root@centos ~]# ls
    anaconda-ks.cfg  install.log  install.log.syslog
    [root@centos ~]#

四、shell特性–命令行展开

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

    [root@centos7 liubin]# cd ~

    切换到了当前用户(root)的家目录
    [root@centos7 ~]# cd ~liubin

    切换到指定用户(liubin)的家目录
    [root@centos7 liubin]#

  • {}:可承载一个以逗号分隔的路径列表,并能够将其展开为多个路径。
    例如:/tmp/{a,b} 相当于 /tmp/a /tmp/b

五、shell特性–命令的执行状态结果

bash通过状态返回值来输出此命令执行的状态结果

  • 成功:0

  • 失败:1-255

命令执行完成之后,其状态返回值保存于bash的特殊变量$?中。
注:只能获取最近一次执行的命令结果

[root@centos ~]# ls /tmp/dest/  
souce  x  
[root@centos ~]# echo $?  
0  
[root@centos ~]# ls /tmp/source  
ls: cannot access /tmp/source: No such file or directory  
[root@centos ~]# echo $?  
2  
[root@centos ~]#

练习:

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

[root@centos ~]# ls /tmpdest  issue  liubin  root  yum.log
[root@centos ~]# 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'
[root@centos ~]# ls /tmp/
a_c  a_d  b_c  b_d  dest  issue  liubin  root  yum.log
[root@centos ~]#

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@centos ~]# 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@centos ~]# 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
    └── run24 directories, 0 files
[root@centos ~]#

六、文件的元数据
文件的元数据可通过stat命令查看:

[root@centos ~]# stat /etc/issue
  File: `/etc/issue'
  Size: 47        	Blocks: 8          IO Block: 4096   regular file
Device: fd00h/64768d	Inode: 1966607     Links: 1Access: (0644/-rw-r--r--)  Uid: (    0/    root)   Gid: (    0/    root)
Access: 2016-09-27 03:25:29.196999983 +0800
Modify: 2013-11-27 19:53:33.000000000 +0800
Change: 2016-09-27 03:13:22.876999801 +0800
[root@centos ~]#

  • 文件名

  • 文件大小

  • 文件块

  • 文件类型

  • 文件链接数

  • 权限

  • UID

  • GID

  • 文件最后一次被查看的时间

  • 文件数据最后一次被修改的时间

  • 文件数据和元数据最后一次被改动的时间

touch命令:可于更改前2个时间戳

- SYNOPSIS:  
    touch [OPTION]... FILE...  
    
- OPTION:  
    -c:指定的文件路径不存在时不予创建    
    -a:仅修改access time    
    -m:仅修改modify time   
     
    `注意:如果不加选项。默认将三个时间改为当前时间`
    
    -t STAMP:更改指定时间        
        [[CC]YY]MMDDhhmm[.ss
        
- example:
[root@centos ~]# touch -a -t 201609262232 /tmp/issue
[root@centos ~]# stat /tmp/issue
  File: `/tmp/issue'
  Size: 158       	Blocks: 8          IO Block: 4096   regular file
Device: fd00h/64768d	Inode: 262148      Links: 1Access: (0644/-rw-r--r--)  Uid: (    0/    root)   Gid: (    0/    root)
Access: 2016-09-26 22:32:00.000000000 +0800
Modify: 2016-09-27 06:31:08.898995817 +0800
Change: 2016-09-27 06:32:04.517998108 +0800
[root@centos ~]#

七、命令别名及命令引用

命令别名查看:
[root@centos ~]# alias
alias cp='cp -i'
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'

创建别名:
[root@centos ~]# alias clear='cls'
[root@centos ~]# alias
alias clear='cls'
alias cp='cp -i'
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'

引用命令的执行结果:

  • 使用“引用:

[root@centos ~]# echo `date`
Tue Sep 27 06:45:08 CST 2016
[root@centos ~]#
  • 使用$(COMMAND)引用

[root@centos ~]# file $(which --skip-alias ls)
/bin/ls: ELF 64-bit LSB executable, x86-64, version 1 (SYSV), dynamically linked (uses shared libs), for GNU/Linux 2.6.18, stripped
[root@centos ~]#

八、globbing文件通配

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

[root@centos ~]# ls /var/1*[[:digit:]]*[[:lower:]]
/var/1Qw2Ws
[root@centos ~]#

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

[root@centos ~]# ls /etc/[[:digit:]]*[^[:digit:]]
/etc/2wssc.
[root@centos ~]#

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

[root@centos ~]# ls /etc/[^[:alpha:]][[:alpha:]]*
/etc/2wssc.
[root@centos ~]#

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

[root@centos ~]# touch /tmp/tfile-$(date +%F-%H-%M-%S)
[root@centos ~]# ls /tmp/
a_c  b_c  dest  liubin  root  yum.loga_d  b_d  issue  mylinux  tfile-2016-09-27-07-10-10
[root@centos ~]#

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

[root@centos ~]# cp -r /etc/p*[^[:digit:]] /tmp/mytest1
[root@centos ~]# ls /tmp/mytest1/
pam.d    pinforc                       popt.d         prelink.conf    protocols
pango    pki                           portreserve    prelink.conf.d  pulse
passwd   plymouth                      postfix        printcap
passwd-  pm                            ppp            profile
pcmcia   pm-utils-hd-apm-restore.conf  prelink.cache  profile.d
[root@centos ~]#

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

[root@centos ~]# cp -r /etc/*.d /tmp/mytest2/
[root@centos ~]# ls /tmp/mytest2/
bash_completion.d  init.d         modprobe.d      rc0.d  rc6.d          
statetab.dchkconfig.d        latrace.d      oddjobd.conf.d  rc1.d  rc.d           
sudoers.dcron.d             ld.so.conf.d   pam.d           rc2.d  request-key.d  
xinetd.ddepmod.d           logrotate.d    popt.d          rc3.d  rsyslog.d      
yum.repos.ddracut.conf.d   lsb-release.d  prelink.conf.d  rc4.d  rwtab.devent.d
makedev.d      profile.d       rc5.d  setuptool.d
[root@centos ~]#

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

[root@centos ~]# cp -r /etc/[l,m,n]*.conf /tmp/mytest3
[root@centos ~]# ls /tmp/mytest3
latrace.conf  libaudit.conf  logrotate.conf  mke2fs.conf    nsswitch.conf  
numad.confld.so.conf    libuser.conf   ltrace.conf     nfsmount.conf  ntp.conf
[root@centos ~]#



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

(0)
lucklymelucklyme
上一篇 2016-09-26
下一篇 2016-09-27

相关推荐

  • 运维自动化之系统安装

    自动化安装系统,cobbler的安装使用

    Linux干货 2018-01-15
  • Samba服务

    一 服务端配置 1 安装所需软件 [root@centos7 ~]# yum install samba samba-common -y samba主要提供SMB服务所需的各项服务程序、相关的文件及其他和Samba相关的设置等 samba-common提供服务端和客户端都会用的的数据,包括主配置文件、语法检查等 2 添加Samba用户 添加smb1、smb2…

    Linux干货 2017-06-13
  • 如何删除一个目录下的所有文件,但保留一个指定文件。附一些常用命令

    解答: 假设这个目录是/xx/,里面有file1,file2,file3..file10   十个文件 方法如下: find /date -type f ! -name “file10″|xargs rm -f 另外还有其他的方法比如:rsync命令和bush的 extglob功能等。在此不一一列举。 附常用命令: 文件和目…

    2017-07-15
  • 马哥教育网络班21期第1周课程练习 — 草稿

    1、描述计算机的组成及其功能。     计算机的主要组成部分包括:运算器、控制器、存储器、输入设备、输出设备。        按更常见的组件来讲:CPU = 运算器+控制器、 内存+硬盘 = 存储器、 I/O = 输入设备+输出设备  &n…

    Linux干货 2016-07-07
  • shell脚本(一)

     本周是来马哥教育的第四周,本周重点是shell脚本的编写,本篇博客也是以shell脚本的简述为主。 一.shell脚本的概念及意义     shell脚本是linux下的一种编程方式,百度百科给出这样的释义:脚本(shell script)是利用shell的功能所写的一个程序,这个程序是使用纯文本文件,将一…

    Linux干货 2017-08-05
  • 循环语句

    冯罗伊曼体系架构 1. 输入设备 2. 输出设备 3. 存储器 4. 运算器 5. 控制器 转义序列:\\, \t , \r , \n , \”,  \’ Python:是动态语言,强类型语言 算数运算符 + – */ % ** /是自然除,//是整除 位运算符 & |  ~  ^  <<  >> 原码 5=&gt…

    Linux干货 2018-03-26

评论列表(1条)

  • luoweiro
    luoweiro 2016-10-10 22:41

    基础知识和实战总结的非常不错。