首页 > 代码库 > 文件与目录管理命令(三)

文件与目录管理命令(三)

目录管理类命令包括:cd,pwd,ls,mkdir,rmdir,tree,cp,mv,rm,touch,stat


1.1.ls

功能:列出文件或目录

命令帮助:

man ls

info ls

ls --help

help cd  #只有内部命令才能用
ls /usr/share/man 文档位置

常用选项

-a:列出所有的文件(包含隐藏文件)

-l:以长格式的形式列出信息

-i:显示文件inode号

-h:单位换算

-m:以逗号分割文件名列出

-t:按照修改时间来排序

-r:按照修改时间来反向排列

-S:按大小排

示例:

将家目录下的所有文件列出来(含属性与隐藏档)

[root@localhost /]# ls -al ~

total 88dr-xr-x---.  3 root root  4096 May  8 22:27

 .......长格式列出

 [root@localhost ~]# ls -l

 total 44-rw-------. 1 root root  1166 May  7 10:08 anaconda-ks.cfg

 -rw-r--r--. 1 root root 17957 May  7 10:08 install.log

 -rw-r--r--. 1 root root  4178 May  7 10:06 install.log.syslog

 -rw-r--r--. 1 root root  7273 May  7 21:30 system.sh

 按照修改时间倒序

 [root@localhost ~]# ls -lt

 total 44-rw-r--r--. 1 root root  7273 May  7 21:30 system.sh

 -rw-------. 1 root root  1166 May  7 10:08 anaconda-ks.cfg

 -rw-r--r--. 1 root root 17957 May  7 10:08 install.log

 -rw-r--r--. 1 root root  4178 May  7 10:06 install.log.syslog

 按照修改时间正序

 [root@localhost ~]# ls -lrt

 total 44-rw-r--r--. 1 root root  4178 May  7 10:06 install.log.syslog

 -rw-r--r--. 1 root root 17957 May  7 10:08 install.log

 -rw-------. 1 root root  1166 May  7 10:08 anaconda-ks.cfg

 -rw-r--r--. 1 root root  7273 May  7 21:30 system.sh

3.2.cd

功能:更改工作路径

cd是Change Directory的缩写

用法:

cd 直接回车 直接切换到当前用户的家目录里
cd ~:直接切换到当前用户的家目录里
cd .或者 ./:切换到当前目录
cd ..:切换到上一级目录
cd -:切换到上一次的工作目录
示例:

绝对路径切换:
[root@localhost ~]# cd /root/test

相对路径切换:
[root@localhost /]# cd ./test
当前是root,那就是回到root家目录

[root@localhost /]# cd ~

回到上一级目录

[root@localhost test]# cd ..


3.3.pwd(Print Working Directory)

功能:显示当前所在位置的绝对路径。

选项:

-P:显示出实际的路径,而非使用链接(link)路径。

示例:

单纯显示出目前的工作目录
[root@www ~]# pwd
/root   

显示实际的工作目录,而非连接挡本身的目录名而已
root@www ~]# cd /var/mail   <==注意,/var/mail是一个连结档
[root@www mail]# pwd
/var/mail         <==列出目前的工作目录
[root@www mail]# pwd -P
/var/spool/mail   <==怎么跟上面显示不一样?
[root@www mail]# ls -ld /var/mail
lrwxrwxrwx 1 root root 10 Sep  4 17:54 /var/mail -> spool/mail
# /var/mail 是连结档,连结到 /var/spool/mail
# 加上 pwd -P 的选项后,会不以连结档的数据显示,而是显示正确的完整路径

3.4.touch 

功能

创建文件,更改文件的时间戳

当目标文件不存在:创建新的,空的文件
touch filename
touch file1 file2
touch {a,b,c}.txt
touch file{1..5}
当文件命有特殊字符时,可以进行如下转义:
touch a\ b\ c
touch "a b c"
touch ‘a b c‘
 当目标文件存在时,touch修改文件的时间戳:
# stat file1  查看文件详细信息(时间戳)
  File: `file1‘
  Size: 0         Blocks: 0          IO Block: 4096   regular empty file
Device: fd00h/64768dInode: 275119      Links: 1
Access: (0644/-rw-r--r--)  Uid: (    0/    root)   Gid: (    0/    root)
Access: 2016-03-30 14:34:51.724484689 +0800  访问时间
Modify: 2016-03-30 14:34:45.915484930 +0800  修改时间
Change: 2016-03-30 14:34:45.915484930 +0800  属性时间
 
touch -a file1 -t 202011111111  修改文件的访问时间
touch -m file1 -t 201011111212  修改文件的修改时间
touch -d 20201010 filename      修改文件的访问时间和修改时间

block  块,操作系统块是一次IO的单位,系统块默认大小为4096字节;以后oracle里也会学到块的概念,oracle块默认为8192字节

inode  是文件系统给文件的一个编号,类似于文件的一个门牌号码


一个优化有关的问题:

块大好,还小好?

块大,一次IO数据量大,IO吞吐量大,空间浪费较多

块小,正好和块大相反

 

批量创建文件:

第一种:touch {1..10}

第二种seq 11 2 20 |xargs touch  seq产生一个序列, |符号是管道(表示把前面的结果传到后面)

第三种:写shell脚本做循环

#!/bin/bash

. /etc/init.d/functions 

for i in `seq 10`;do   

    touch file$i && File_Status=$?   

    if [ $File_Status -eq 0 ];then      

       action "this is file$i successed" /bin/true  

    else      

       action "this is file$i failed" /bin/false   

    fi

done


3.5.stat

功能:显示文件或文件系统状态

常用选项:

-Z   显示selinux安全上下文

-f  显示文件系统状态

-c  指定格式输出内容

    %y     Time of last modification(最近修改时间)

    %x     Time of last access (最近访问时间)

-t  以简洁的形式打印

示例:

显示文件详细信息:

[root@localhost ~]# stat anaconda-ks.cfg  

File: `anaconda-ks.cfg‘  

Size: 1148          Blocks: 8          IO Block: 4096   regular file

Device: fd00h/64768d    Inode: 267953      Links: 1

Access: (0600/-rw-------)  Uid: (    0/    root)   Gid: (    0/    root)

Access: 2017-04-05 10:38:15.690999958 +0800

Modify: 2017-04-05 10:38:16.614999958 +0800C

hange: 2017-04-05 10:38:18.527999957 +0800

只显示文件访问时间:

[root@localhost ~]# stat -c %x anaconda-ks.cfg

2017-04-05 10:38:15.690999958 +0800

3.6.mkdir

功能:创建新目录(make directory)

语法:mkdir [OPTION]... DIRECTORY...

常用选项:

-m :配置文件的权限

-p :递归创建目录

-v:显示创建过程

示例:

请到/tmp底下尝试创建数个新目录看看:

[root@localhost tmp]# pwd

/tmp

[root@localhost tmp]# mkdir test #创建test新目录

[root@localhost tmp]# mkdir -p test1/test2/test3/test4  递归创建多个目录

[root@localhost tmp]# tree test1 查看创建成功

test1

└── test2

    └── test3

        └── test4



directories, 0 files

范例:创建权限为rwx--x--x的目录

[root@localhost tmp]# mkdir -m 655 test2

[root@localhost tmp]# ll -d test2

drw-r-xr-x 2 root root 4096 May 24 10:19 test2

 

上面的权限部分,如果没有加上 -m 来强制配置属性,系统会使用默认属性。

创建多个目[root@localhost tmp]# mkdir {1,2}

[root@localhost tmp]# ll

total 24

drwxr-xr-x  2 root root 4096 May 24 10:21 1

drwxr-xr-x  2 root root 4096 May 24 10:21 2

创建连续目录:

[root@localhost tmp]# mkdir {3..10}

[root@localhost tmp]# ll

total 56

drwxr-xr-x  2 root root 4096 May 24 10:23 1

drwxr-xr-x  2 root root 4096 May 24 10:23 10

drwxr-xr-x  2 root root 4096 May 24 10:23 2

drwxr-xr-x  2 root root 4096 May 24 10:23 3

drwxr-xr-x  2 root root 4096 May 24 10:23 4

drwxr-xr-x  2 root root 4096 May 24 10:23 5

drwxr-xr-x  2 root root 4096 May 24 10:23 6

drwxr-xr-x  2 root root 4096 May 24 10:23 7

drwxr-xr-x  2 root root 4096 May 24 10:23 8

drwxr-xr-x  2 root root 4096 May 24 10:23 9

3.7.rmdir

功能:删除空的目录

语法:rmdir [OPTION]... DIRECTORY...

选项:

-p:连同上一级『空的』目录也一起删除

-v:显示过程

示例:

[root@localhost ~]# rmdir -v a #这里的a是空目录,所以可以直接删除
rmdir: removing directory, `a‘
[root@localhost ~]# rmdir -v 1  #这里报错,是因为1不是空目录,通过tree就看的出。
rmdir: removing directory, `1‘
rmdir: failed to remove `1‘: Directory not empty
[root@localhost ~]# tree 1
1
└── 2
    └── 3
        └── 4
3 directories, 0 files
[root@localhost ~]# rmdir -p 1 #使用递归删除时这样写删除也是会报错
rmdir: failed to remove `1‘: Directory not empty
[root@localhost ~]# rmdir -p 1/2/3/4 #这样写的意思就是先删除4,再删除3,依次递归



3.8.tree

功能:以树状图列出目录的内容;

语法:语法很繁琐,这里就不介绍了

常用选项:

-d:只显示目录

-L level:指定显示的层级数目

-P pattern:只显示由指定pattern匹配到的路径,这里的P是大写;

-p:列出权限

示例:

[root@localhost ~]# ll
total 444
-rw-------. 1 root root   1148 Apr  5 10:38 anaconda-ks.cfg
drwxr-xr-x  2 root root   4096 May 22 10:52 b
drwxr-xr-x  2 root root   4096 May 22 10:52 c
drwxr-xr-x  2 root root   4096 May 22 10:52 d
drwxr-xr-x  2 root root   4096 May 22 10:52 e
-rw-r--r--  1 root root 389473 May  9 15:22 inotify-tools-3.13.tar.gz
drwxr-xr-x  2 root root   4096 May 22 10:48 install
-rw-r--r--. 1 root root  17957 Apr  5 10:38 install.log
-rw-r--r--. 1 root root   4178 Apr  5 10:37 install.log.syslog
drwxr-xr-x  2 root root   4096 May 22 10:48 tmp
[root@localhost ~]# tree -d .
.
├── b
├── c
├── d
├── e
├── install
└── tmp
[root@localhost ~]# mkdir -p 1/2/3/4/5/6
[root@localhost ~]# tree -L 2 1 #从1开始的2个层级,到3
1
└── 2
    └── 3
2 directories, 0 files
[root@localhost ~]# tree 1 #不带L参数,全部层级都显示
1
└── 2
    └── 3
        └── 4
            └── 5
                └── 6
5 directories, 0 files
[root@localhost ~]# tree -L 3 1 #从1开始的3个层级,到4 
1
└── 2
    └── 3
        └── 4
[root@localhost ~]# tree -P *.gz .
.
├── 1
│   └── 2
│       └── 3
│           └── 4
│               └── 5
│                   └── 6
├── b
├── c
├── d
├── e
├── inotify-tools-3.13.tar.gz
├── install
└── tmp
[root@localhost ~]# tree -P *.log .
.
├── 1
│   └── 2
│       └── 3
│           └── 4
│               └── 5
│                   └── 6
├── b
├── c
├── d
├── e
├── install
├── install.log
└── tmp
[root@localhost ~]# tree -p *.gz .
inotify-tools-3.13.tar.gz [error opening dir]
.
├── [drwxr-xr-x]  1
│   └── [drwxr-xr-x]  2
│       └── [drwxr-xr-x]  3
│           └── [drwxr-xr-x]  4
│               └── [drwxr-xr-x]  5
│                   └── [drwxr-xr-x]  6
├── [-rw-------]  anaconda-ks.cfg
├── [drwxr-xr-x]  b
├── [drwxr-xr-x]  c
├── [drwxr-xr-x]  d
├── [drwxr-xr-x]  e
├── [-rw-r--r--]  inotify-tools-3.13.tar.gz
├── [drwxr-xr-x]  install
├── [-rw-r--r--]  install.log
├── [-rw-r--r--]  install.log.syslog
└── [drwxr-xr-x]  tmp

3.9.cp

功能:复制文件或目录

语法:

cp [OPTION]... [-T] SOURCE DEST

cp [OPTION]... SOURCE... DIRECTORY

cp [OPTION]... -t DIRECTORY SOURCE...

常用选项:

-a  归档,相当于-dR --perserv=all

-b  目标文件存在创建备份,备份文件是文件名跟~

-f  强制复制文件或目录

-r  递归复制目录

-p  保留原有文件或目录属性,--perserv=mode,ownership,timestamp

-i  交互式,即复制文件或目录会询问

-u  当源文件比目的文件修改时间新时才复制

-v  显示复制信息,--verbose

区别:

如果是目录需要拷贝所有属性,用-a或者-rp

如果是文件需要拷贝所有属性,用-p或者-a

注意:cp在管理员的情况下慎用,尽量用交互式来确定是否真的想cp覆盖文件或目录

3.10.mv

功能:移动文件或目录,或重命名

语法:

mv [OPTION]... [-T] SOURCE DEST

mv [OPTION]... SOURCE... DIRECTORY

mv [OPTION]... -t DIRECTORY SOURCE..

常用选项:

-b  目标文件存在创建备份,备份文件是文件名跟~

-u  当源文件比目的文件修改时间新时才移动

-v  显示移动信息

-i  交互式

-f      强制

注意:mv也是一个危险命令,使用时慎之又慎


3.11.rm

功能:remove,删除文件或目录

语法:rm [OPTION]... FILE...

常用选项:

-i:交互式

-f:强制删除

-r:递归

注意:rm相对于mv,cp,在生产环境就更危险了,好多同仁受其害不止一次两次,建议禁用。


练习:

(1)如何创建目录/tmp/x/y1,/tmp/x/y2,/tmp/x/y1/a, /tmp/x/y1/b, /tmp/x/y2/a,/tmp/x/y2/b,要求一次命令运行?

[root@localhost ~]# mkdir /tmp/x /tmp/x/{y1,y2} /tmp/x/y1/{a,b} /tmp/x/y2/{a,b}
[root@localhost ~]# tree /tmp/x
/tmp/x
├── y1
│   ├── a
│   └── b
└── y2
    ├── a
    └── b
更简单的方法:
[root@localhost tmp]# mkdir -p /tmp/x/{y1,y2}/{a,b}
[root@localhost tmp]# tree /tmp/x
/tmp/x
├── y1
│   ├── a
│   └── b
└── y2
    ├── a
    └── b

2)如何创建目录 x_m,y_m,x_n,y_n,要求一次命令运行?

[root@localhost tmp]# mkdir {x,y}_{m,n}
drwxr-xr-x  2 root root 4096 May 22 14:20 x_m
drwxr-xr-x  2 root root 4096 May 22 14:20 x_n
drwxr-xr-x  2 root root 4096 May 22 14:20 y_m
drwxr-xr-x  2 root root 4096 May 22 14:20 y_n

(3)如何创建目录/tmp/bin, /tmp/sbin,/tmp/usr,/tmp/user/bin,/tmp/usr/sbin,要求一次命令运行?

[root@localhost tmp]# mkdir -p /tmp/{bin,sbin} /tmp/user/bin /tmp/usr/sbin 
[root@localhost tmp]# tree bin sbin user usr
bin
sbin
user
└── bin
usr
└── sbin

(4)看一个实验

[root@localhost tmp]# touch test
[root@localhost tmp]# ll -i test
396797 -rw-r--r-- 1 root root 0 May 22 14:26 test
[root@localhost tmp]# cp test test1
[root@localhost tmp]# ll -i test test1
396797 -rw-r--r-- 1 root root 0 May 22 14:26 test
396798 -rw-r--r-- 1 root root 0 May 22 14:26 test1
[root@localhost tmp]# ll -i test1 test3
396798 -rw-r--r-- 1 root root 0 May 22 14:26 test1
396797 -rw-r--r-- 1 root root 0 May 22 14:26 test3

说明:cp一个文件,新文件inode会改变,由396797->396798,mv一个文件,inode号不变,由396797->396797,这是同一分区不变

那不同分区会改变吗:

[root@localhost ~]# df -h
Filesystem            Size  Used Avail Use% Mounted on
/dev/mapper/VolGroup-lv_root
                       18G  1.4G   15G   9% /
tmpfs                 491M     0  491M   0% /dev/shm
/dev/sda1             477M   28M  425M   6% /boot
/dev/mapper/VolGroup-lv01
                      4.8G   10M  4.6G   1% /data
[root@localhost tmp]# ll -i test1 test3
396798 -rw-r--r-- 1 root root 0 May 22 14:26 test1
396797 -rw-r--r-- 1 root root 0 May 22 14:26 test3
[root@localhost tmp]# mv test3 /data/test4
[root@localhost tmp]# ll -i /data/test4
12 -rw-r--r-- 1 root root 0 May 22 14:26 /data/test4
把文件从根分区mv到data分区,跨区域移动,发现inode是改变了

(5)如何把/etc/skel/目录里以.开头的隐藏文件拷到/tmp目

有桌面可以用下面命令打开目录     

nautilus /etc/skel/         --图形打开一个目录
# cp /etc/skel/* /tmp/ -rf    --错误用法,*号不能代表隐藏文件
# cp /etc/skel/.* /tmp/ -rf   --错误用法, .*也包括..,也就是会把上级目录的东西也拷过去
方法一:
# cp /etc/skel/.[a-Z]*  /test/ -rf --正确做法
方法2:
#ls -a |xargs -i cp {} /test

本文出自 “烂笔头” 博客,请务必保留此出处http://lanbitou.blog.51cto.com/9921494/1928884

文件与目录管理命令(三)