您的位置:首页 > 其它

文件与目录操作命令(3)

2017-05-23 15:04 405 查看
命令(17个)
ls,cd,cp,mkdir,mv,pwd,rename,rm,rmdir,touch,tree,basename,dirname,chattr,lsattr,file,MD5sum

3.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 88
dr-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.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覆盖文件或目录
示例:
[root@localhost scripts]# cp -v file file2 #常规复制
`file' -> `file2'
[root@localhost scripts]# cp -v file2{,.bak} #用大括号复制改变是不是更简洁些
`file2' -> `file2.bak'


3.4.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.6.mv

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

语法:

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

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

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

常用选项:

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

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

-v 显示移动信息

-i 交互式

-f 强制

-t 将所有源移动到目录中

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

示例:
[root@localhost scripts]# mv file2.bak{,.ori} 把file2.bak重名为file2.bak.ori
[root@localhost scripts]# ls yyl
10.txt  1.txt  2.txt  3.txt  4.txt  5.txt  6.txt  7.txt  8.txt  9.txt
移动到上一级目录有多种方法:
[root@localhost yyl]# mv 1.txt 2.txt 3.txt 4.txt 5.txt 6.txt 7.txt 8.txt 9.txt 10.txt -t ../   #这个方法太笨
[root@localhost yyl]# ls ../
10.txt  1.txt  2.txt  3.txt  4.txt  5.txt  6.txt  7.txt  8.txt  9.txt
[root@localhost yyl]# mv {1..10}.txt ../
[root@localhost yyl]# mv * ../
3.6.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.7.rename
功能:重命名文件,支持通配符

语法:rename from to file...

rename -V

常用选项:

-V:打印版本(唯一参数)

示例:
[root@localhost scripts]# rename -V
rename (util-linux-ng 2.17.2)
批量命名文件
将file1-file5重名为test1-test5
[root@localhost ~]# ls file*
file1  file2  file3  file4  file5
[root@localhost ~]# rename "file" "test" *
[root@localhost ~]# ls test*
test1  test2  test3  test4  test5
创建文件后缀为.jpg的,然后把后缀改名为.html
[root@localhost test]# for file in `seq -w 10`;do touch stu_$file.jpg;done
[root@localhost test]# ls
stu_01.jpg  stu_03.jpg  stu_05.jpg  stu_07.jpg  stu_09.jpg
stu_02.jpg  stu_04.jpg  stu_06.jpg  stu_08.jpg  stu_10.jpg
[root@localhost test]# rename ".jpg" ".html" ./*
[root@localhost test]# ls
stu_01.html  stu_03.html  stu_05.html  stu_07.html  stu_09.html
stu_02.html  stu_04.html  stu_06.html  stu_08.html  stu_10.html


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

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

常用选项:

-i:交互式

-f:强制删除

-r:递归

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

3.9.rmdir
功能:删除空的目录

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

选项:

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

-v:显示过程

示例:
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.10.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.11.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.12.basename
功能:打印路径的最后一个后缀

语法:basename NAME [SUFFIX]

basename OPTION

常用选项:

-V:查看版本

man手册示例:

basename /usr/bin/sort

Output "sort".

basename include/stdio.h .h

Output "stdio".

跟dirname刚好相反

验证下:
[root@localhost scripts]# basename /usr/local/bin
bin
[root@localhost scripts]# ls read01.sh
read01.sh
[root@localhost scripts]# basename read01.sh
read01.sh


3.13.dirname
功能:去除路径的最后一个后缀

语法:dirname NAME

dirname OPTION

man手册的示例:

dirname /usr/bin/sort

Output "/usr/bin"

dirname stdio.h

Output "."

验证下:
[root@localhost test]# dirname /usr/local/bin/
/usr/local
[root@localhost scripts]# ls read01.sh
read01.sh
[root@localhost scripts]# dirname read01.sh


3.14.chattr
功能:更改文件的隐藏属性
语法格式:chattr [ -RVf ] [ -v version ] [ mode ] files…
常用选项:
-R 递归更改
-V 显示详细信息
-f 忽略大部分错误信息
-v version 设置文件的档案号码
mode 设置文件的隐藏属性,其格式为+-=[acdeijstuACDST]
最关键的是在[mode]部分,[mode]部分的格式是+-=[acdeijstuACDST],这部分是用来设置文件的属性。其中+表示在原有参数设定基础上追加参数;-表示在原有参数设定基础上移除参数;=表示更新为指定参数。下面列出几个常用的属性参数的含义:

属性含义
A文件的atime(access time)不可被修改,这样可以减少磁盘I/O数量,对于笔记本电脑有利于提高续航能力
S硬盘I/O同步选项,功能类似sync
a即append,设定该参数后,只能向文件中添加数据,而不能删除,多用于服务器日志文件安全,只有root才能设定这个属性
i文件不能被删除、改名、设定链接关系,同时不能写入或新增内容(即使是root用户)。只有root才能设定这个属性
c即compresse,文件会自动的经压缩后再存储,读取时会自动的解压
d即no dump,设定文件不能成为dump程序的备份目标
j即journal,设定此参数使得当通过mount参数”data=ordered”或”data=writeback”挂载的文件系统,文件在写入时会先被记录(在journal中)。如果filesystem被设定参数为data=journal,则该参数自动失效
s即secure,保密选项。设置了s属性的文件在被删除时,其所有数据块会被写入0
u即undelete,反删除选项。与s相反,文件在被删除时,其所有的数据块都保留着,用户今后可以恢复该文件
示例:

这条命令,可以将MySecretDir目录下的文件设置为不允许任何人修改:
$ sudo chattr -R =i ~/MySecretDir
# chattr +A 1.txt        --这个属性让文件的access time访问后也不会变化,节省了IO(IO优化);默认情况下rhel5,访问一次atime就会跟着变一次,rhel6下只有当atime等于或早于mtime和ctime之一时,才会访问跟着变,否则不会变。(原因我们在后面讲mount参数时再补充)
# stat 1.txt |tail -3        --用cat命令访问这个文件,再用此命令查看access time,会发现不再变化
Access: 2014-07-17 11:12:58.589838878 +0800
Modify: 2014-07-17 11:12:58.589838878 +0800
Change: 2014-07-17 11:13:15.405701371 +0800
# chattr -a 1.txt
# chattr +i 1.txt  --加了i属性,此文件不可被修改,重命名


3.15.lsattr
功能:列出文件的隐藏属性
语法格式:lsattr [ -RVadv ] [ files… ]
常用选项:

选项含义
-R递归显示
-V显示lsattr程序的版本信息
-a显示所有文件的属性信息,包括以.开头的文件
-d显示目录的属性,而不是目录下的文件的属性
-v显示文件的档案号码
示例:
这条命令显示MySecretDir目录的隐藏属性
$ lsattr -Rd MySecretDir/
----i----------- MySecretDir/
一个文件加了a属于,重定向覆盖以前的内容不允许,但追加内容是可以的
# lsattr 1.txt
-----a-------e- 1.txt

# echo 456 > 1.txt
bash: 1.txt: Operation not permitted
# echo 456 >> 1.txt


3.16.file
功能:鉴定文件类型
# file /dev/tty1
/dev/tty1: character special
字符设备:输入输出
输入设备:键盘、鼠标
输出设备:显示器、打印机
# file /dev/sda
/dev/sda: block special
块设备:软盘|U盘|磁盘|光盘
# file /dev/stdin
/dev/stdin: symbolic link to `/proc/self/fd/0'
链接文件,类似windows下快捷方式


3.17.MD5sum
功能:用于生成和校验文件的md5值md5校验,有很小的概率不同的文件生成的md5可能相同。比md5更安全的校验算法还有SHA*系列的
md5值是一个128位的二进制数据。
在网络传输时,我们校验源文件获得其md5sum,传输完毕后,校验其目标文件,并对比如果源文件和目标文件md5 一致的话,则表示文件传输无异常。否则说明文件在传输过程中未正确传输。
常用选项:-b 以二进制模式读入文件内容
-t 以文本模式读入文件内容
-c 根据已生成的md5值,对现存文件进行校验
--status 校验完成后,不生成错误或正确的提示信息,可以通过命令的返回值来判断。
示例:
生成文件md5值
md5sum file
[root@localhost scripts]# md5sum  123.sh
5f745455dc1be7dea720d7de894c9eea  123.sh
[root@localhost scripts]# md5sum 1234.sh
5f745455dc1be7dea720d7de894c9eea  1234.sh
说明:同一文件,不同名称,单md5值是一样,说明md5值效验的是文件内容,跟文件名无关

读取md5值
[root@localhost ~]# md5sum  123
f66d7df84020cbed01c9fdbb714d2079  123
[root@localhost ~]# file 123
123: ASCII text
[root@localhost ~]# md5sum 123
f66d7df84020cbed01c9fdbb714d2079  123
[root@localhost ~]# md5sum -b 123
f66d7df84020cbed01c9fdbb714d2079 *123
[root@localhost ~]# md5sum -t 123
f66d7df84020cbed01c9fdbb714d2079  123

md5值重定向
将生成md5值重定向到指定的文件,通常文件的扩展名我们会命为.md5
[root@localhost ~]# md5sum 123 > 123.md5
[root@localhost ~]# cat 123.md5
f66d7df84020cbed01c9fdbb714d2079  123
[root@localhost ~]# md5sum 123
f66d7df84020cbed01c9fdbb714d2079  123

将多个文件的md5重定向到指定的文件每个文件的md5生成为一行
[root@localhost ~]# md5sum 123* >1.md5
[root@localhost ~]# cat 1.md5
f66d7df84020cbed01c9fdbb714d2079  123
f66d7df84020cbed01c9fdbb714d2079  1234
f66d7df84020cbed01c9fdbb714d2079  123.bak
1dd5e6301ec14b12e8f51fb319477884  123.md5

重定向追加这里新增文件ls,单独求其md5,将其md5追加到文件中
[root@master lianxi]# cp /bin/ls .
[root@localhost ~]# md5sum ls >>1.md5
[root@localhost ~]# cat 1.md5
f66d7df84020cbed01c9fdbb714d2079  123
f66d7df84020cbed01c9fdbb714d2079  1234
f66d7df84020cbed01c9fdbb714d2079  123.bak
1dd5e6301ec14b12e8f51fb319477884  123.md5
ca226dd605e91b72e0d2060a6357c28f  ls

md5校验
-c选项来对文件md5进行校验。校验时,根据已生成的md5来进行校验。生成当前文件的md5,并和之前已经生成的md5进行对比,如果一致,则返回OK,否则返回错误信息
[root@localhost ~]# md5sum  -c 1.md5
123: OK
1234: OK
123.bak: OK
123.md5: OK
ls: OK
修改文件后,文件md5变化
[root@localhost ~]# md5sum 123
99d43d51be42c65df4b0f3177c07cbed  123
[root@localhost ~]# md5sum 123 >123.md5
[root@localhost ~]# echo "yyl" >>123
[root@localhost ~]# md5sum 123
ac2c2d832d38424b8ef996c8074f6c18  123
[root@localhost ~]# md5sum -c 123.md5
123: FAILED
md5sum: WARNING: 1 of 1 computed checksum did NOT match
--status,不显示校验信息,以命令返回值来判断,校验一致返回0,不一致返回1
[root@localhost ~]# md5sum -c --status 123.md5
[root@localhost ~]# echo $?
1

多个文件文件校验和grep连用通过grep将正确的信息过滤掉
[root@master lianxi]# md5sum -c ../value.md5
acpid: OK
acpid.1: OK
anaconda.log: OK
anaconda.syslog: OK
anaconda.xlog: OK
boot.log: OK
boot.log.1: OK
...
省略中间部分
yum.log.2: OK  15: md5sum: WARNING: 1 of 56 computed checksums did NOT match
[root@master lianxi]# md5sum -c ../value.md5 | grep -v OK
md5sum: WARNING: 1 of 56 computed checksums did NOT match
cron.1: FAILED

特殊说明
1)md5sum 是校验文件内容,与文件名是否相同无关2)md5sum值逐位校验,所以文件越大,校验时间越长。

总结
通过md5sum来校验生成文件校验码,来发现文件传输(网络传输、复制、本地不同设备间的传输)异常造成的文件内容不一致的情况。

工作 实践应用场景:
需要比较2个rc1.tar.gz 包和rc2.tar.gz两个包,变更是不是和开发说的一致
1.获取包,确保包正确无误
获取包后,验证包的MD5值:md5sum rc*.tar.gz
2. 解压缩到指定目录
确保对应的目录存在
tar -zxvf  rc1.tar.gz -C ./test_rc1
tar -zxvf  rc2.tar.gz -C ./test_rc2
3. 递归生成各文件的的MD5值
find ./test_rc1 -type f -print0| xargs -0 md5sum >> rc1_md5.txt
find ./test_rc2 -type f -print0| xargs -0 md5sum >> rc2_md5.txt
4. 比较两文件的MD5值
diff -c rc1_md5.txt  rc2_md5.txt
或者用UltraCompare Professional比对结果

练习:
(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 yyl]# mkdir /tmp/{x,y}_{m,n}
[root@localhost yyl]# ls /tmp/
x_m  x_n  y_m  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 yyl]# touch test
[root@localhost yyl]# cp test test1
[root@localhost yyl]# ll -i test test1
523308 -rw-r--r-- 1 root root 0 Nov 24 13:58 test
523309 -rw-r--r-- 1 root root 0 Nov 24 13:58 test1
[root@localhost yyl]# mv test test3
[root@localhost yyl]# ll -i test1 test3
523309 -rw-r--r-- 1 root root 0 Nov 24 13:58 test1
523308 -rw-r--r-- 1 root root 0 Nov 24 13:58 test3
解析:cp一个文件,新文件的inode会变,由523308到523309,mv一个文件,inode号不变,由523308到523308,这是同一分区不变,不同分区会改变吗?
[root@localhost yyl]# df -h
Filesystem            Size  Used Avail Use% Mounted on
/dev/mapper/VolGroup-lv_root
18G  4.3G   13G  26% /
tmpfs                 491M     0  491M   0% /dev/shm
/dev/sda1             477M   28M  425M   6% /boot
/dev/mapper/VolGroup-lv01
4.8G   19M  4.6G   1% /data

[root@localhost yyl]# mv test3 /data/test
[root@localhost yyl]# ll -i test1 /data/test
12 -rw-r--r-- 1 root root 0 Nov 24 13:58 /data/test
523309 -rw-r--r-- 1 root root 0 Nov 24 13:58 test1
(5)如何把/etc/skel/目录里以.开头的隐藏文件拷到/tmp目录

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


(6)在/home目录下创建yyl01/redhat/test目录。然后在/home/yyl01下面创建文件file1~file5,并且修改file1的时间为2020年的7月7号。
[root@localhost ~]# mkdir -p /home/yyl01/redhat/test
[root@localhost yyl01]# touch /home/yyl01/file{1..5}
[root@localhost yyl01]# touch -m file{1..5} -t 202007070707
[root@localhost home]# tree /home
/home
├── yyl
└── yyl01
├── file1
├── file2
├── file3
├── file4
├── file5
└── redhat
└── test
[root@localhost home]# ll /home/yyl01/
total 4
-rw-r--r-- 1 root root    0 Jul  7  2020 file1
-rw-r--r-- 1 root root    0 Jul  7  2020 file2
-rw-r--r-- 1 root root    0 Jul  7  2020 file3
-rw-r--r-- 1 root root    0 Jul  7  2020 file4
-rw-r--r-- 1 root root    0 Jul  7  2020 file5
drwxr-xr-x 3 root root 4096 May 25 11:55 redhat


(7)将/home/yyl01下的file1~file5文件移动到/home/yyl01/redhat/test目录下,并且重命名为test1~test5
[root@localhost ~]# mv /home/yyl01/file{1..5} /home/yyl01/redhat/test/
[root@localhost ~]# cd /home/yyl01/redhat/test/
[root@localhost test]# rename "file" "test" *
[root@localhost test]# ll
total 0
-rw-r--r-- 1 root root 0 May 25 14:21 test1
-rw-r--r-- 1 root root 0 May 25 14:21 test2
-rw-r--r-- 1 root root 0 May 25 14:21 test3
-rw-r--r-- 1 root root 0 May 25 14:21 test4
-rw-r--r-- 1 root root 0 May 25 14:21 test5
方法2
for i in `ls ./*`;do mv $i `echo $i|sed 's/file/test/g'`;done #for循环加sed改名


(8)将/home/yyl01/redhat/test下的test5文件远程拷贝到192.168.5.1上面的/home/test目录下,并且重命名成自己名字。远程服务器用户redhat用户,密码是123
[root@localhost test]# scp /home/yyl01/redhat/test/file5 redhat@192.168.5.1:/home/test/yyl


(9)删除/home/yyl01目录下的redhat目录
[root@localhost test]# cd /home/yyl01/
[root@localhost yyl01]# ls
redhat
[root@localhost yyl01]# rm -rf redhat
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息