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)
上一篇 2016-09-26 22:23
下一篇 2016-09-27 13:04

相关推荐

  • httpd配置

    1、Centos7系统下实现httpd-2.2的安装,并分别实现prefork、worker、event等几种工作方式

    2、简述request报文请求方法和状态响应码

    3、详细描述httpd虚拟主机、站点访问控制、基于用户的访问控制、持久链接等应用配置实例

    Linux干货 2018-02-05
  • Bash Shell语法之三函数简介

     Bash Shell语法之三函数简介 一、什么是Bash函数 像其他编程语言一样,Shell 也支持函数。Shell函数必须先定义后使用。函数可以让我们将一个复杂功能划分成若干模块,让程序结构更加清晰,代码重复利用率更高。 二、Bash函数定义格式 [ function ] fun () {     &nb…

    Linux干货 2015-05-11
  • linux软件包管理(开始上正菜了)

    linux程序包管理:     API:数据接口     ABI:应用程序二进制接口        库级别的虚拟化:             linux:wine    …

    Linux干货 2017-03-07
  • mysql基础

      mysql基础 数据模型: 数据模型:层次模型、网状模型、关系模型、…… 关系模型: 二维关系:表     行:row, entity     列:colume, attribution 索引:数据结构,辅助完成数据查找;  &nbsp…

    Linux干货 2016-11-01
  • 使用httpd反向代理模块实现tomcat负载均衡集群(下)

    上一篇讲解了http使用mod_http和mod_ajp代理模块实现tomcat负载均衡,下面我们来讲解使用http的mod_jk实现taomcat的负载均衡集群: 注意:http的mod_jk是第三方扩展模块,在新http版本中以不支持,在httpd 1.3和2.0效果较好 6、使用mod_jk实现tomcat负载均衡集群 6.1安装mod_jk [roo…

    Linux干货 2015-07-21
  • haproxy代理服务

    HAProxy: LB Cluster:         四层:   lvs, nginx(stream),haproxy(mode tcp)         七层:   http: nginx(http, ngx_http_upstrea…

    Linux干货 2017-05-17

评论列表(1条)

  • luoweiro
    luoweiro 2016-10-10 22:41

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