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基础命令绝对路径和相对路径 / 创建删除复制移动文件及目录命令
Android 逆向Linux 文件权限 ( Linux 权限简介 | 系统权限 | 用户权限 | 匿名用户权限 | 读 | 写 | 执行 | 更改组 | 更改用户 | 粘滞 )(代码片段