Linux文件和目录操作命令01

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了Linux文件和目录操作命令01相关的知识,希望对你有一定的参考价值。

2.1 pwd(5*****)

(print work directory)打印工作目录(显示当前所在路径) 后面可以接 -L 默认情况下接的也是-L(logical)的 此种情况显示的是逻辑路径(相当于win的一样) -P(physical)的话,就会把真实的物理路径全部显示出来

[root@oldbody local]# pwd
/usr/local
[root@oldbody local]# cd -    返回上一次所在路径
/root
[root@oldbody ~]# 
[root@oldbody home]# pwd
/home
[root@oldbody home]# echo $PWD
/home
[root@oldbody ~]# ls -l /etc/init.d
lrwxrwxrwx. 1 root root 11 6月  15 00:26 /etc/init.d -> rc.d/init.d    软连接文件
[root@oldbody ~]# cd /etc/init.d
[root@oldbody init.d]# pwd    为啥pwd更够输出当前工作目录了 因为环境变量$PWD的原因
/etc/init.d  
[root@oldbody init.d]# pwd -L   获取环境变量PWD对应的数值 即为echo $PWD
/etc/init.d
[root@oldbody init.d]# pwd -P    显示链接对应源文件的目录路径
/etc/rc.d/init.d
[root@oldbody init.d]#

2.2 cd(5*****)

(change directory)改变目录路径 例子:cd /etc 后面的参数-L和-P的话,一个是逻辑的,一个是物理的
绝对路径:从/开始的路径 /root/test/a/b
相对路径:不从/开始的路径 test/a/b
cd ../.. 上上级目录
cd ../../.. 上上上级目录
cd / 直接到/目录下
cd - 上一次目录 其实 - 是因为有一个$OLDPWD这个环境变量
cd ~ 代表家目录 其实 因为有一个$HOME这个环境变量
cd .. 退回上一级目录 如果是一个点的话代表当前目录

比如[root@oldbody oldboy]# pwd     pwd命令从PWD这个变量中获取的
/oldboy
[root@oldbody oldboy]# cd /tmp/
[root@oldbody tmp]# cd -       cd将从环境变量OLDPWD对应值获取路径名
/oldboy
[root@oldbody oldboy]# env | grep -i oldpwd     
OLDPWD=/tmp
OLDPWD=/tmp
[root@oldbody oldboy]# 
[root@oldbody oldboy]# cd -
/tmp
[root@oldbody tmp]# env | grep -i oldpwd       因为你在tmp目录下 所以你的环境变量OLDPWD=/oldboy 其中-i就是不区分大小写的
OLDPWD=/oldboy
[root@oldbody tmp]#
[root@key ~]# cd /etc/sysconfig/
[root@key sysconfig]# cd     不加任何参数 从环境变量HOME获取路径 /root
[root@key ~]# cd /etc/sysconfig/
[root@key sysconfig]# cd ~    从环境变量HOME获取路径 /root

2.3 tree(4****)

tree 树的意思 以树的形式来显示一个目录结构 如果tree不接任何参数的话,会显示所有的tree的目录结构
tree -a 查看隐藏文件 .开头的文件都是隐藏文件
tree -d 代表只显示目录
tree -L 其中L代表level层级的意思 显示指定的层级
tree -i 不显示树枝 常与-f参数配合使用
tree -f 显示每个文件的全路径
tree -F 用以区分文件和目录的方法 以/结尾的为目录
可以用rpm -qa tree命令查看下tree是否安装 如果tree没有安装,可以使用yum install tree -y 安装tree软件包 LANG=en 调整字符集 为英文

[root@oldbody /]# tree /liangli2/
/liangli2/
`-- liangli3

1 directory, 0 files

[root@oldbody key]# tree
.
|-- 1
|-- key1
|   |-- 4
|   `-- 5
|-- key2
|   |-- 4
|   `-- 5
`-- key3
    |-- 4
    `-- 5

10 directories, 0 files
[root@oldbody key]# tree -L 1
.
|-- 1
|-- key1
|-- key2
`-- key3

4 directories, 0 files
[root@oldbody key]# tree -dL 1
.
|-- 1
|-- key1
|-- key2
`-- key3

4 directories
[root@oldbody key]# 

为每一个路径显示完整的路径 f full 完整

[root@oldbody key]# tree -dLf 1
.
|-- ./1
|-- ./key1
|-- ./key2
`-- ./key3

4 directories
[root@oldbody key]#
[root@oldbody sysconfig]# tree -L 1 -fi /boot/    indentation压痕 不要前面的树枝
/boot
/boot/System.map-2.6.32-573.el6.x86_64
/boot/config-2.6.32-573.el6.x86_64
/boot/efi
/boot/grub
/boot/initramfs-2.6.32-573.el6.x86_64.img
/boot/lost+found
/boot/symvers-2.6.32-573.el6.x86_64.gz
/boot/vmlinuz-2.6.32-573.el6.x86_64

3 directories, 5 files
[root@oldbody sysconfig]#
[root@oldbody key]# tree -F           区分文件和目录 文件后面都加上了/
.
|-- 1/
|-- key1/
|   |-- 4/
|   `-- 5/
|-- key2/
|   |-- 4/
|   `-- 5/
`-- key3/
    |-- 4/
    `-- 5/

10 directories, 0 files
[root@oldbody key]# 

2.4 mkdir(5*****)

windows下的路径样式为c:data est 而Linux下的路径样式为/data/test,不同的是windows系统下还有D,E等盘,Linux下就只有/,它是所有目录的顶点 (make directorys)创建目录 例子:mkdir /data 在根/下创建data目录
-p 参数 如果目录存在 在创建目录话,接-p参数不会报错的 另一个作用就是 可以连续创建多级目录
-v 参数 就是可以看到创建目录的流程是怎么样的
或者cd /;mkdir data 切换到根下,然后创建data目录 其中;就是命令的分隔符
连续创建目录 mkdir -p /liangli/liangli1 创建2个目录 一个是liangli一个是liangli1 其中liangli1在liangli目录下

[root@oldbody /]# mkdir -pv Tech/{1..3}/{4..6}
mkdir: created directory `Tech/1‘
mkdir: created directory `Tech/1/4‘
mkdir: created directory `Tech/1/5‘
mkdir: created directory `Tech/1/6‘
mkdir: created directory `Tech/2‘
mkdir: created directory `Tech/2/4‘
mkdir: created directory `Tech/2/5‘
mkdir: created directory `Tech/2/6‘
mkdir: created directory `Tech/3‘
mkdir: created directory `Tech/3/4‘
mkdir: created directory `Tech/3/5‘
mkdir: created directory `Tech/3/6‘

[root@oldbody /]# tree /tmp
/tmp
`-- Tech
    |-- 1
    |   |-- 4
    |   |-- 5
    |   `-- 6
    |-- 2
    |   |-- 4
    |   |-- 5
    |   `-- 6
    `-- 3
        |-- 4
        |-- 5
        `-- 6

13 directories, 0 files   
[root@oldbody /]# mkdir /Tech/dir{1..5}     连续5个dir1  dir2  dir3  dir4  dir5目录
[root@oldbody /]# ls /Tech/
dir1  dir2  dir3  dir4  dir5  liangli.txt  oldboy.txt

同时创建多个目录

[root@oldbody tmp]# mkdir -p test/dir{1..5}  oldboy/{a..g}
[root@oldbody tmp]# tree test oldboy/
test
|-- dir1
|-- dir2
|-- dir3
|-- dir4
`-- dir5
oldboy/
|-- a
|-- b
|-- c
|-- d
|-- e
|-- f
`-- g

12 directories, 0 files
[root@oldbody tmp]#

克隆目录结构

[root@oldbody ~]# tree -if liangli2018/      
liangli2018
liangli2018/dir1
liangli2018/dir1/4
liangli2018/dir1/5
liangli2018/dir1/6
liangli2018/dir1/7
liangli2018/dir2
liangli2018/dir2/4
liangli2018/dir2/5
liangli2018/dir2/6
liangli2018/dir2/7
liangli2018/dir3
liangli2018/dir3/4
liangli2018/dir3/5
liangli2018/dir3/6
liangli2018/dir3/7

15 directories, 0 files
[root@oldbody ~]# tree -if liangli2018/ --noreport liangli2018   --noreport不显示最后一行统计信息
liangli2018
liangli2018/dir1
liangli2018/dir1/4
liangli2018/dir1/5
liangli2018/dir1/6
liangli2018/dir1/7
liangli2018/dir2
liangli2018/dir2/4
liangli2018/dir2/5
liangli2018/dir2/6
liangli2018/dir2/7
liangli2018/dir3
liangli2018/dir3/4
liangli2018/dir3/5
liangli2018/dir3/6
liangli2018/dir3/7
liangli2018
liangli2018/dir1
liangli2018/dir1/4
liangli2018/dir1/5
liangli2018/dir1/6
liangli2018/dir1/7
liangli2018/dir2
liangli2018/dir2/4
liangli2018/dir2/5
liangli2018/dir2/6
liangli2018/dir2/7
liangli2018/dir3
liangli2018/dir3/4
liangli2018/dir3/5
liangli2018/dir3/6
liangli2018/dir3/7

[root@oldbody ~]# tree -if liangli2018/ --noreport liangli2018 >oldboy.txt 
[root@oldbody ~]# cat oldboy.txt 
liangli2018          这个是必须存在的目录
liangli2018/dir1
liangli2018/dir1/4
liangli2018/dir1/5
liangli2018/dir1/6
liangli2018/dir1/7
liangli2018/dir2
liangli2018/dir2/4
liangli2018/dir2/5
liangli2018/dir2/6
liangli2018/dir2/7
liangli2018/dir3
liangli2018/dir3/4
liangli2018/dir3/5
liangli2018/dir3/6
liangli2018/dir3/7
liangli2018
liangli2018/dir1
liangli2018/dir1/4
liangli2018/dir1/5
liangli2018/dir1/6
liangli2018/dir1/7
liangli2018/dir2
liangli2018/dir2/4
liangli2018/dir2/5
liangli2018/dir2/6
liangli2018/dir2/7
liangli2018/dir3
liangli2018/dir3/4
liangli2018/dir3/5
liangli2018/dir3/6
liangli2018/dir3/7
[root@oldbody ~]# cd /tmp
[root@oldbody tmp]# mkdir -p `cat /root/oldboy.txt`    首先执行``反引号里面的内容 然后在执行mkdir命令
[root@oldbody tmp]# ll
total 4
drwxr-xr-x 5 root root 4096 Sep 29 10:42 liangli2018
[root@oldbody tmp]# tree
.
`-- liangli2018
    |-- dir1
    |   |-- 4
    |   |-- 5
    |   |-- 6
    |   `-- 7
    |-- dir2
    |   |-- 4
    |   |-- 5
    |   |-- 6
    |   `-- 7
    `-- dir3
        |-- 4
        |-- 5
        |-- 6
        `-- 7

16 directories, 0 files
[root@oldbody tmp]#

2.5 touch(5*****)

创建文件或更新时间戳 查看ls /Tech可以看到自己创建的文件了,如果文件不存在,就建立新文件,如果存在,就改变文件的访问时间atime等时间戳
连续创建10000个文件 touch stu{1..10000}
-a 参数 只更改指定文件最后访问时间
-m 参数 只更改指定文件最后修改时间
-t 参数 设置文件的时间属性
-d 参数 设置指定文件的时间属性
-r 参数 指定文件的时间属性与模板文件file的时间属性相同
可以同时创建2个文件 touch a.txt b.txt 两个文件 也可以用touch {1..4}.txt
通过命令可以看到访问(-a) 修改(-m) 改变(-c)文件的时间状态

[root@oldbody 1]# stat 1.txt 
File: `1.txt‘
Size: 0               Blocks: 0          IO Block: 4096   regular empty file
Device: 803h/2051d      Inode: 784979      Links: 1
Access: (0644/-rw-r--r--)  Uid: (    0/    root)   Gid: (    0/    root)
Access: 2018-06-21 20:16:43.546093627 +0800
Modify: 2018-06-21 20:16:43.546093627 +0800
Change: 2018-06-21 20:16:43.546093627 +0800
[root@oldbody 1]# 
[root@oldbody 1]# touch -a 1.txt 的话,表示只改变访问和改变的时间戳,不改变修改的时间戳  其中Change时间不管任何情况都是会改变的
touch -m 1.txt   表示只改变修改和改变的时间戳   其中Change时间不管任何情况都是会改变的
[root@oldboy liangli]# stat  -c  %a  a.txt 
644
[root@oldboy liangli]#
-c    使用指定的格式而不是默认的格式  %a 八进制权限

指定时间属性创建/修改文件(了解)
[root@oldbody tmp]# touch -d 20201001 1.txt    d指定创建文件后文件修改时间
[root@oldbody tmp]# ll -h 1.txt 
-rw-r--r-- 1 root root 11 Oct  1  2020 1.txt
[root@oldbody tmp]# ll -h 2.txt 
-rw-r--r-- 1 root root 0 Sep 29 10:57 2.txt     10:57 此时间指的是文件的修改时间
[root@oldbody tmp]# touch -r 2.txt 1.txt         r让其和其他文件时间属性保持一致
[root@oldbody tmp]# ll -h 1.txt           
-rw-r--r-- 1 root root 11 Sep 29 10:57 1.txt
[root@oldbody tmp]# touch -t 201809291110.00 1.txt    t设置文件格式
[root@oldbody tmp]# ll -h --full-time  1.txt 
-rw-r--r-- 1 root root 11 2018-09-29 11:10:00.000000000 +0800 1.txt
[root@oldbody tmp]#

2.6 ls(5*****)

list(列表) 列表目录文件 例子:ls / 列 根/目录下目录和文件 ls -l 显示的时间为文件或目录的修改时间
-l long长格式(显示出来的时间为最后一次修改时间)
-d directorys查看目录
-a all -A 列出所有文件,包括隐藏文件,但是不包括.和..这两个是目录
-t 根据最后修改时间mtime排序,默认以文件名排序
-r 反转排序
-i 显示inode节点
-h 人类可读
--full-time 以完整的时间格式输出
-p 只在目录后面加上/
--time-style=long-iso 显示完整时间属性参数(年份)
-F 参数 区分文件和目录的方式(在结尾处加上类型指示符号 / @等)了解 加上“”代表可执行的普通文件
加上“/”表示目录
加上“=”表示套接字(sockets)
加上“|”表示FIFOs
加上“@”表示符号链接

[root@oldbody oldboy]# touch oldboy.txt
[root@oldbody oldboy]# ls -lrt     r是倒叙的意思    t按修改时间排序 
total 20
-rw-r--r-- 1 root root    0 Jun 26 21:53 yingsui.gz
-rw-r--r-- 1 root root    0 Jun 26 21:53 wodi.gz
-rw-r--r-- 1 root root    0 Jun 26 21:53 oldboy
drwxr-xr-x 2 root root 4096 Jun 26 21:56 xiaofan
-rw-r--r-- 1 root root    0 Jun 26 23:40 oldboy.txt
[root@oldbody oldboy]# 
[root@oldbody ~]# date         查看系统时间
Wed Jun 27 20:28:45 CST 2018
[root@oldbody ~]#
ls -l --color=auto   显示颜色
[root@oldbody oldboy]# 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‘
alias which=‘alias | /usr/bin/which --tty-only --read-alias --show-dot --show-tilde‘
[root@oldbody oldboy]# ls -l   目录会显示颜色的
total 20
drwxr-xr-x 3 root root 4096 Jun 26 21:56 ext
-rw-r--r-- 1 root root    0 Jun 26 21:53 jeacen
drwxr-xr-x 2 root root 4096 Jun 26 21:56 xingfujie
-rw-r--r-- 1 root root    0 Jun 26 21:53 yingsui.gz
[root@oldbody oldboy]# ls -l     屏蔽掉别名
total 20
drwxr-xr-x 3 root root 4096 Jun 26 21:56 ext
-rw-r--r-- 1 root root    0 Jun 26 21:53 jeacen
drwxr-xr-x 2 root root 4096 Jun 26 21:56 xiaofan
drwxr-xr-x 2 root root 4096 Jun 26 21:56 xingfujie
-rw-r--r-- 1 root root    0 Jun 26 21:53 yingsui.gz
[root@oldbody oldboy]# 
[root@oldbody oldboy]# ls -l --color=auto   目录会显示颜色的
total 20
drwxr-xr-x 3 root root 4096 Jun 26 21:56 ext
-rw-r--r-- 1 root root    0 Jun 26 21:53 jeacen
drwxr-xr-x 2 root root 4096 Jun 26 21:56 xiaofan
drwxr-xr-x 2 root root 4096 Jun 26 21:56 xingfujie
-rw-r--r-- 1 root root    0 Jun 26 21:53 yingsui.gz
[root@oldbody oldboy]# 
[root@oldbody oldboy]# cat 123.log 
key
[root@oldbody oldboy]# grep --color=auto key 123.log  我们也可以给过滤的内容加颜色
key
[root@oldbody oldboy]# 
[root@oldbody oldboy]# grep --color=auto 3306 /etc/services    给3306这个端口加上颜色
mysql           3306/tcp                        # MySQL
mysql           3306/udp                        # MySQL
[root@oldbody oldboy]#
ls -a  可以显示隐藏的文件和不隐藏的文件 all
[root@oldbody test]# ls -a   显示全部的文件
.  ..  dir1  dir2  dir3  file1.txt  file2.txt  file3.txt

ls -l 将文件的属性和修改时间都可以显示出来

ll就相当于ls -l一样 系统自带的一个alias

[root@oldbody test]# ls -l
total 12
drwxr-xr-x 2 root root 4096 Jun 28 11:48 dir1
drwxr-xr-x 2 root root 4096 Jun 28 11:48 dir2
drwxr-xr-x 2 root root 4096 Jun 28 11:48 dir3
-rw-r--r-- 1 root root    0 Jun 28 11:47 file1.txt
-rw-r--r-- 1 root root    0 Jun 28 11:47 file2.txt
-rw-r--r-- 1 root root    0 Jun 28 11:47 file3.txt
[root@oldbody test]# ll
total 12
drwxr-xr-x 2 root root 4096 Jun 28 11:48 dir1
drwxr-xr-x 2 root root 4096 Jun 28 11:48 dir2
drwxr-xr-x 2 root root 4096 Jun 28 11:48 dir3
-rw-r--r-- 1 root root    0 Jun 28 11:47 file1.txt
-rw-r--r-- 1 root root    0 Jun 28 11:47 file2.txt
-rw-r--r-- 1 root root    0 Jun 28 11:47 file3.txt
[root@oldbody test]# 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‘
alias which=‘alias | /usr/bin/which --tty-only --read-alias --show-dot --show-tilde‘
[root@oldbody test]# 

-h human(人类) 的作用就是可以很直观的查看文件的大小

[root@oldbody test]# ls -lh
total 12K
drwxr-xr-x 2 root root 4.0K Jun 28 11:48 dir1
drwxr-xr-x 2 root root 4.0K Jun 28 11:48 dir2
drwxr-xr-x 2 root root 4.0K Jun 28 11:48 dir3
-rw-r--r-- 1 root root    0 Jun 28 11:47 file1.txt
-rw-r--r-- 1 root root    0 Jun 28 11:47 file2.txt
-rw-r--r-- 1 root root    0 Jun 28 11:47 file3.txt
[root@oldbody test]#

-d directory参数表示只显示目录

[root@oldbody test]# ls -l | grep dir1
drwxr-xr-x 2 root root 4096 Jun 28 11:48 dir1
[root@oldbody test]# ll -d dir1
drwxr-xr-x 2 root root 4096 Jun 28 11:48 dir1
[root@oldbody test]# 

-F classify 就是给目录后面加上/

[root@oldbody test]# ls -F
dir1/  dir2/  dir3/  file1.txt  file2.txt  file3.txt
[root@oldbody test]#

生产案例:查找最近更新的文件 ll -rt 等于ls -lrt

-r reverse 倒叙排序或者反向排序
-t 按修改时间排序 默认是以文件名排序
默认情况下 最新创建的文件和目录放在最前面

[root@oldbody test]# ll
total 12
drwxr-xr-x 2 root root 4096 Jun 28 11:48 dir1
drwxr-xr-x 2 root root 4096 Jun 28 11:48 dir2
drwxr-xr-x 2 root root 4096 Jun 28 11:48 dir3
-rw-r--r-- 1 root root    0 Jun 28 11:47 file1.txt
-rw-r--r-- 1 root root    0 Jun 28 11:47 file2.txt
-rw-r--r-- 1 root root    0 Jun 28 11:47 file3.txt
[root@oldbody test]# 
[root@oldbody test]# ll -rt
total 12
-rw-r--r-- 1 root root    0 Jun 28 11:47 file3.txt
-rw-r--r-- 1 root root    0 Jun 28 11:47 file2.txt
-rw-r--r-- 1 root root    0 Jun 28 11:47 file1.txt
drwxr-xr-x 2 root root 4096 Jun 28 11:48 dir3
drwxr-xr-x 2 root root 4096 Jun 28 11:48 dir2
drwxr-xr-x 2 root root 4096 Jun 28 11:48 dir1
[root@oldbody test]# 

-i 参数 查看inode节点

[root@oldbody test]# ll -i
total 12
915788 drwxr-xr-x 2 root root 4096 Jun 28 11:48 dir1
915789 drwxr-xr-x 2 root root 4096 Jun 28 11:48 dir2
915790 drwxr-xr-x 2 root root 4096 Jun 28 11:48 dir3
915785 -rw-r--r-- 1 root root    0 Jun 28 11:47 file1.txt
915786 -rw-r--r-- 1 root root    0 Jun 28 11:47 file2.txt
915787 -rw-r--r-- 1 root root    0 Jun 28 11:47 file3.txt
[root@oldbody test]#
[root@oldbody tmp]# ll --time-style=long-iso    --time-style=long-iso 参数使用
total 12
-rw-r--r-- 1 root root   21 2018-09-29 11:39 1.txt
-rw-r--r-- 1 root root    0 2018-09-29 11:21 123.txt
-rw-r--r-- 1 root root    0 2018-09-29 10:57 2.txt
drwxr-xr-x 2 root root 4096 2018-09-29 11:19 key
-rw-r--r-- 1 root root    0 2018-09-29 11:18 key.txt
drwxr-xr-x 5 root root 4096 2018-09-29 10:42 liangli2018

2.7 cp(5*****)

不加参数的时候 只能拷贝文件
-a 相当于-dpr
-d 若源文件为链接文件(link file),则复制链接文件属性而非档案本身
-p 连同档案的属性一起复制过去,而非使用默认属性
-r 递归 用于复制目录
假如tmp目录下有一个test.txt文件 mnt目录下有一个test.txt文件,现在将tmp目录下的test.txt文件复制到mnt目录下 默认情况下 会进行相应的提示
输入命令 cp /mnt/test.txt /tmp/ 不提示 别名的原因 就是屏蔽别名
或者 /bin/cp /mnt/test.txt /tmp/ 补全cp命令的路径也是不提示的
因为cp mv rm属于危险的操作命令,有可能会对文件造成损坏,我们可以查看下系统现有的别名alias 可以输入命令unalias cp 直接删除cp的别名,也可以达到其效果 (不推荐使用)

[root@oldbody test]# ll
total 12
drwxr-xr-x 2 root root 4096 Jun 28 11:48 dir1
drwxr-xr-x 2 root root 4096 Jun 28 11:48 dir2
drwxr-xr-x 2 root root 4096 Jun 28 11:48 dir3
-rw-r--r-- 1 root root    0 Jun 28 11:47 file1.txt
-rw-r--r-- 1 root root    0 Jun 28 11:47 file2.txt
-rw-r--r-- 1 root root    0 Jun 28 11:47 file3.txt
[root@oldbody test]# cp file3.txt file4.txt
[root@oldbody test]# ll
total 12
drwxr-xr-x 2 root root 4096 Jun 28 11:48 dir1
drwxr-xr-x 2 root root 4096 Jun 28 11:48 dir2
drwxr-xr-x 2 root root 4096 Jun 28 11:48 dir3
-rw-r--r-- 1 root root    0 Jun 28 11:47 file1.txt
-rw-r--r-- 1 root root    0 Jun 28 11:47 file2.txt
-rw-r--r-- 1 root root    0 Jun 28 11:47 file3.txt
-rw-r--r-- 1 root root    0 Jun 28 12:17 file4.txt    时间属性改变了
[root@oldbody test]# 
cp    -a      -a等于-pdr      作用,复制文件或目录过去的时候可以保证属性不变化  复制文件或目录保持源文件或源目录软连接不发生变化
[root@oldbody test]# cp file3.txt file5.txt
[root@oldbody test]# ll
total 12
drwxr-xr-x 2 root root 4096 Jun 28 11:48 dir1
drwxr-xr-x 2 root root 4096 Jun 28 11:48 dir2
drwxr-xr-x 2 root root 4096 Jun 28 11:48 dir3
-rw-r--r-- 1 root root    0 Jun 28 11:47 file1.txt
-rw-r--r-- 1 root root    0 Jun 28 11:47 file2.txt
-rw-r--r-- 1 root root    0 Jun 28 11:47 file3.txt
-rw-r--r-- 1 root root    0 Jun 28 12:17 file4.txt
-rw-r--r-- 1 root root    0 Jun 28 11:47 file5.txt
[root@oldbody test]# 
[root@oldbody test]# alias cp    -i   覆盖前会提示
alias cp=‘cp -i‘
[root@oldbody test]# 
[root@oldbody test]# cp -a file3.txt file5.txt
cp: overwrite `file5.txt‘? 
[root@oldbody test]# cp -a file3.txt file5.txt   屏蔽别名
[root@oldbody test]#
[root@oldbody test]# cp -a dir3 dir4   可以复制目录
[root@oldbody test]# ll
total 16
drwxr-xr-x 2 root root 4096 Jun 28 11:48 dir1
drwxr-xr-x 2 root root 4096 Jun 28 11:48 dir2
drwxr-xr-x 2 root root 4096 Jun 28 11:48 dir3
drwxr-xr-x 2 root root 4096 Jun 28 11:48 dir4
-rw-r--r-- 1 root root    0 Jun 28 11:47 file1.txt
-rw-r--r-- 1 root root    0 Jun 28 11:47 file2.txt
-rw-r--r-- 1 root root    0 Jun 28 11:47 file3.txt
-rw-r--r-- 1 root root    0 Jun 28 12:17 file4.txt
-rw-r--r-- 1 root root    0 Jun 28 11:47 file5.txt
[root@oldbody test]# 
A{B,C}  等价于 AB  AC
[root@oldbody test]# cp -a dir{3,5}
[root@oldbody test]# ll
total 20
drwxr-xr-x 2 root root 4096 Jun 28 11:48 dir1
drwxr-xr-x 2 root root 4096 Jun 28 11:48 dir2
drwxr-xr-x 2 root root 4096 Jun 28 11:48 dir3
drwxr-xr-x 3 root root 4096 Jun 28 12:30 dir4
drwxr-xr-x 2 root root 4096 Jun 28 11:48 dir5
-rw-r--r-- 1 root root    0 Jun 28 11:47 file1.txt
-rw-r--r-- 1 root root    0 Jun 28 11:47 file2.txt
-rw-r--r-- 1 root root    0 Jun 28 11:47 file3.txt
-rw-r--r-- 1 root root    0 Jun 28 12:17 file4.txt
-rw-r--r-- 1 root root    0 Jun 28 11:47 file5.txt
[root@oldbody test]# 
cp /etc/ssh/sshd_config {,.ori}  相当于
cp /etc/ssh/sshd_config cp /etc/ssh/sshd_config.ori   一样
[root@oldbody test]# cp /etc/sysconfig/network-scripts/ifcfg-eth0{,.ori}  备份网卡信息

2.8 mv(5*****)

移动文件和重命名 move 移动文件或目录 移动就是剪切的意思 例子:mv /Tech /liangli 把Tech移动到liangli目录下 也有改名的功能
mv 移动文件和重命名 move(rename)files

[root@oldbody test]# mv file{4,6}.txt    改名的功能
[root@oldbody test]# ll
total 20
drwxr-xr-x 2 root root 4096 Jun 28 11:48 dir1
drwxr-xr-x 2 root root 4096 Jun 28 11:48 dir2
drwxr-xr-x 2 root root 4096 Jun 28 11:48 dir3
drwxr-xr-x 3 root root 4096 Jun 28 12:30 dir4
drwxr-xr-x 2 root root 4096 Jun 28 11:48 dir5
-rw-r--r-- 1 root root    0 Jun 28 11:47 file1.txt
-rw-r--r-- 1 root root    0 Jun 28 11:47 file2.txt
-rw-r--r-- 1 root root    0 Jun 28 11:47 file3.txt
-rw-r--r-- 1 root root    0 Jun 28 11:47 file5.txt
-rw-r--r-- 1 root root    0 Jun 28 12:17 file6.txt
No such file or directory  没有那个文件或目录
[root@oldbody test]# 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‘             mv  系统别名  -i参数 在覆盖前需要提示
alias rm=‘rm -i‘
alias which=‘alias | /usr/bin/which --tty-only --read-alias --show-dot --show-tilde‘
[root@oldbody test]# 
多个文件的移动方式(必须得保证/dir1目录存在)
[root@oldbody test]# mv file1.txt  file2.txt  file3.txt  file5.txt  file6.txt dir1/t  file6.txt  dir1/
[root@oldbody test]# ls
dir1  dir2  dir3  dir4  dir5
[root@oldbody test]# cd dir1/
[root@oldbody dir1]# ls
file1.txt  file2.txt  file3.txt  file5.txt  file6.txt
[root@oldbody test]# tree
.
|-- dir1
|   |-- file1.txt
|   |-- file2.txt
|   |-- file3.txt
|   |-- file5.txt
|   `-- file6.txt
|-- dir2
|-- dir3
|-- dir4
|   `-- dir3
`-- dir5

6 directories, 5 files
[root@oldbody test]# 
[root@oldbody test]# file dir1       使用file dir1  可以查看dir1是文件还是目录
dir1: directory
[root@oldbody test]# mv dir1  dir2  dir3  dir4  dir5   移动目录 把前n-1个目录移动到最后一个目录(必须得保证dir5目录存在)
[root@oldbody test]# tree
.
`-- dir5
    |-- dir1
    |   |-- file1.txt
    |   |-- file2.txt
    |   |-- file3.txt
    |   |-- file5.txt
    |   `-- file6.txt
    |-- dir2
    |-- dir3
    `-- dir4
        `-- dir3

6 directories, 5 files
[root@oldbody test]#

2.9 rm(5*****)

remove(移除)删除目录和文件 -f(force)强制,-r(递归,用于删除目录) 强调删除命令要慎用,非常危险,删除前一定要先备份一份 因为删除后不可恢复
正确删除文件的姿势
1,使用mv命令移动到/tmp(回收站)替代删除动作
2、通过cd命令到达目的目录

然后通过find -type f(d) -name ‘’ | xargs  rm -f
或者    find -type f(d)-name “*.txt” -mtime +7 -exec rm {} ;

别名在你敲这条命令的时候生效的,通过一些管道符传送给它的是不会生效的

2.10 rmdir(1*)

用于删除空目录 当目录不为空时 命令不起作用

-p参数 递归删除空目录

[root@oldbody ~]# 
[root@oldbody ~]# mkdir -p oldboy/oldboy1/oldboy2
[root@oldbody ~]# rmdir -p oldboy/oldboy1/oldboy2/
[root@oldbody ~]#

2.11 ln(5*****)

link得缩写,可以创建硬链接与软连接
硬链接 ln 源文件 目标文件 (硬链接生成时普通文件-字符)
软链接 ln -s 源文件 目标文件 (目标文件不能事先存在)(生成的符号链接l类型)
硬链接:
是通过inode来进行链接的 在linux文件系统中,多个文件名指向同一个inode是正常且允许的 硬链接文件就相当于文件的另外一个入口 硬链接的作用之一是允许一个文件拥有多个有效路径名(多个入口),这样用户就可以建立硬链接到重要的文件 ,以防止 误删 源数据 注意:目录不能作为硬链接

[root@oldbody ~]# cat /etc/hosts
127.0.0.1   localhost localhost.localdomain localhost4 localhost4.localdomain4
::1         localhost localhost.localdomain localhost6 localhost6.localdomain6
[root@oldbody ~]# ln /etc/hosts hard_link   创建硬链接
[root@oldbody ~]# ll -ih /etc/hosts hard_link 
654109 -rw-r--r--. 3 root root 158 1月  12 2010 /etc/hosts
654109 -rw-r--r--. 3 root root 158 1月  12 2010 hard_link
[root@oldbody ~]# rm -f /etc/hosts   删除
[root@oldbody ~]# cat /etc/hosts
cat: /etc/hosts: 没有那个文件或目录
[root@oldbody ~]# cat hard_link 
127.0.0.1   localhost localhost.localdomain localhost4 localhost4.localdomain4
::1         localhost localhost.localdomain localhost6 localhost6.localdomain6
[root@oldbody ~]# ln hard_link /etc/hosts
[root@oldbody ~]# cat /etc/hosts
127.0.0.1   localhost localhost.localdomain localhost4 localhost4.localdomain4
::1         localhost localhost.localdomain localhost6 localhost6.localdomain6
[root@oldbody ~]# ll -ih /etc/hosts hard_link 
654109 -rw-r--r--. 3 root root 158 1月  12 2010 /etc/hosts
654109 -rw-r--r--. 3 root root 158 1月  12 2010 hard_link
[root@oldbody ~]#

硬链接知识小结:

1、具有相同inode节点号的多个文件是互为硬链接文件
2、删除硬链接文件或者删除源文件任意之一,文件实体并未被删除
3、只有删除了源文件及所有对应的硬链接文件,文件实体才会被删除
4、当所有的硬链接文件及源文件被删除后,再存放新的数据会占用这个文件的空间,或者磁盘fsck检查的时候,删除的数据也会被系统回收(养成删除及多套环境测试的好习惯)
5、硬链接文件就是文件的另一个入口(相当于超市的前门,后门一样)
6、可以通过给文件设置硬链接文件,来防止重要文件被误删
7、通过执行命令 ln 源文件 硬链接文件 即可完成创建硬链接
8、硬链接文件是普通文件,因此可以用rm命令删除
9、对于静态文件(没有进程正在调用的文件)来讲,当对应硬链接数为0 (i_link)文件就被删除 i_link的查看方法(ls -l结果的第三列就是)

软连接 或者符号链接 相当于win的快捷方式 注意:目录可以创建软连接
ln -s 源文件 目标文件

软链接知识小结:

1、软链接类似win的快捷方式(可以通过readlink查看其指向)
2、软链接类似一个文本文件,里面存放的是源文件的路径,指向源文件实体
3、删除源文件,软链接文件依然存在,但是无法访问指向的源文件路径的内容了
4、失效的时候一般是白字红底闪烁提示
5、执行命令 ln -s 源文件 软链接文件 即可完成创建软链接(目标不能存在)
6、软链接和源文件是不同类型的文件,也是不同的文件,inode号也不相同
7、软链接文件类型为(l),可以用rm命令

[root@oldbody ~]# ln -s /etc/hosts soft_link
[root@oldbody ~]# ll -ih /etc/hosts hard_link soft_link 
654109 -rw-r--r--. 3 root root 158 1月  12 2010 /etc/hosts
654109 -rw-r--r--. 3 root root 158 1月  12 2010 hard_link
915785 lrwxrwxrwx  1 root root  10 9月  29 13:34 soft_link -> /etc/hosts

全局结论:

删除源文件 对硬链接没有影响 但是会导致软链接文件失效,白字红底闪烁
删除源文件和硬链接文件 整个文件会真正的被删除
很多硬件设备中的快照功能 就是利用了硬链接的原理

[root@oldbody liangli2018]# ll -ihd oldboy  oldboy/. oldboy/test/..
915805 drwxr-xr-x 3 root root 4.0K 9月  29 13:44 oldboy
915805 drwxr-xr-x 3 root root 4.0K 9月  29 13:44 oldboy/.
915805 drwxr-xr-x 3 root root 4.0K 9月  29 13:44 oldboy/test/..

目录的链接小结:

1、对于目录 不可以创建硬链接 但可以创建软链接(原因是目录可以跨文件系统的)
2、对于目录的软链接是生产场景运维中常用的技巧
3、目录的硬链接不能跨越文件系统(从硬链接原理可以理解 硬链接需要有相同的inode值)
4、每个目录下面都有一个硬链接 “.” 号和对应上级目录的硬链接“..”
5、再父目录里创建一个子目录,父目录的链接数增加1(每个子目录里都有..来指向父目录)但是再父目录里创建文件,父目录的链接数不会增加

2.12 readlink(2**)

查看符号链接文件的内容

[root@oldbody ~]# readlink soft_link 
/etc/hosts

以上是关于Linux文件和目录操作命令01的主要内容,如果未能解决你的问题,请参考以下文章

Linux高级命令03:文本搜索命令★ Python Web篇学习汇总:Part 01—Linux基础命令绝对路径和相对路径 / 创建删除复制移动文件及目录命令

在java中使用linux命令复制目录操作

Linux中的文件与目录操作01

使用sunOS中的find命令比较两个目录中的所有文件

Android 逆向Linux 文件权限 ( Linux 权限简介 | 系统权限 | 用户权限 | 匿名用户权限 | 读 | 写 | 执行 | 更改组 | 更改用户 | 粘滞 )(代码片段

Linux 系统常用命令行文件/目录操作