首页 > 其他分享 >第三天

第三天

时间:2024-02-24 10:33:23浏览次数:19  
标签:文件 用户 -- 第三天 目录 root 链接

第三天

Linux****下的文件类型
\- 普通文件

d 目录文件directory

l 符号链接文件link

b 块设备block 

c 字符设备character

p 管道文件pipe

s 套接字文件socket

范例:

root@ubuntu2204:~# ls -l /run/
total 20
-rw-------  1 root root    0 Feb 23  2024 agetty.reload
drwxr-xr-x  2 root root   60 Feb 23  2024 blkid
drwxr-xr-x  3 root root  320 Feb 23  2024 cloud-init
drwxr-xr-x  2 root root   80 Feb 23  2024 console-setup
drwxr-xr-x  3 root root   60 Feb 23  2024 credentials
-rw-r--r--  1 root root    4 Feb 23  2024 crond.pid
----------  1 root root    0 Feb 23  2024 crond.reboot
drwx------  2 root root   40 Feb 23  2024 cryptsetup
drwxr-xr-x  2 root root   60 Feb 23  2024 dbus
prw-------  1 root root    0 Feb 23  2024 dmeventd-client
prw-------  1 root root    0 Feb 23  2024 dmeventd-server
drwxr-xr-x  2 root root   60 Feb 23  2024 fsck
prw-------  1 root root    0 Feb 23  2024 initctl
drwx------  2 root root  100 Feb 23  2024 initramfs
drwxr-xr-x  2 root root   60 Feb 23  2024 irqbalance
drwxrwxrwt  4 root root   80 Feb 23  2024 lock
drwxr-xr-x  3 root root   60 Feb 23  2024 log
drwx------  5 root root  160 Feb 23  2024 lvm
-rw-r--r--  1 root root  696 Feb 23  2024 motd.dynamic
drwxr-xr-x  2 root root   80 Feb 23  2024 mount
drwx------  2 root root   40 Feb 23  2024 multipath
-rw-r--r--  1 root root    3 Feb 23  2024 multipathd.pid
drwxr-xr-x  2 root root   40 Feb 23  2024 netns
drwxr-xr-x  2 root root   60 Feb 23  2024 network
drwxrwxrwt  2 root utmp   40 Feb 23  2024 screen
drwxr-xr-x  2 root root   40 Feb 23  2024 sendsigs.omit.d
lrwxrwxrwx  1 root root    8 Feb 23  2024 shm -> /dev/shm
drwxr-xr-x  4 root root   80 Feb 23  2024 snapd
srw-rw-rw-  1 root root    0 Feb 23  2024 snapd-snap.socket
srw-rw-rw-  1 root root    0 Feb 23  2024 snapd.socket
drwxr-xr-x  2 root root   40 Feb 23  2024 sshd
-rw-r--r--  1 root root    4 Feb 23  2024 sshd.pid
drwx--x--x  2 root root   40 Feb 23  2024 sudo
drwxr-xr-x 25 root root  600 Feb 23  2024 systemd
drwxr-xr-x  2 root root   60 Feb 23  2024 tmpfiles.d
drwxr-xr-x  8 root root  180 Feb 23  2024 udev
drwx------  2 root root   40 Feb 23  2024 udisks2
drwxr-xr-x  3 root root   60 Feb 23  2024 user
-rw-rw-r--  1 root utmp 1920 Feb 23  2024 utmp
drwxr-xr-x  2 root root   60 Feb 23  2024 uuidd
drwxr-xr-x  2 root root   60 Feb 23  2024 vmware
绝对和相对路径
绝对路径

以正斜杠/ 即根目录开始

完整的文件的位置路径

可用于任何想指定一个文件名的时候

相对路径名

不以斜线开始

一般情况下,是指相对于当前工作目录的路径,特殊场景下,是相对于某目录的位置

可以作为一个简短的形式指定一个文件名

基名:basename,只取文件名而不要路径

目录名:dirname,只取路径,不要文件名
范例

[root@centos8 bin]#basename /etc/sysconfig/network

network

[root@centos8 bin]#dirname /etc/sysconfig/network

/etc/sysconfig

[root@centos8 ~]#dirname /etc/sysconfig/network-scripts/ifcfg-eth0

/etc/sysconfig/network-scripts

[root@centos8 ~]#basename /etc/sysconfig/network-scripts/ifcfg-eth0

ifcfg-eth0

范例

[root@ubuntu2004 ~]#basename http://nginx.org/download/nginx-1.18.0.tar.gz

nginx-1.18.0.tar.gz

[root@ubuntu2004 ~]#basename http://nginx.org/download/nginx-1.18.0.tar.gz 

.tar.gz

nginx-1.18.0

[root@ubuntu2004 ~]#basename -s .tar.gz http://nginx.org/download/nginx-

1.18.0.tar.gz 

nginx-1.18.0

[root@ubuntu2004 ~]#url=http://nginx.org/download/nginx-1.18.0.tar.gz

[root@ubuntu2004 ~]#echo $url

http://nginx.org/download/nginx-1.18.0.tar.gz

[root@ubuntu2004 ~]#basename $url

nginx-1.18.0.tar.gz

basename
打印目录或者文件的基本名称

补充说明
basename命令 用于打印目录或者文件的基本名称。basename和dirname命令通常用于shell脚本中的命令替换来指定和指定的输入文件名称有所差异的输出文件名称。

语法
basename(选项)(参数)
选项
--help:显示帮助;
--version:显示版本号。
参数
文件:带路径信息的文件;
后缀:可选参数,指定要去除的文件后缀字符串。
实例
1、要显示一个shell变量的基本名称,请输入:

basename $WORKFILE
此命令显示指定给shell变量WORKFILE的值的基本名称。如果WORKFILE变量的值是/home/jim/program.c文件,则此命令显示program.c。

要构造一个和另一个文件名称相同(除了后缀)的文件名称,请输入:

OFILE=`basename $1 .c`.o
此命令指定给 OFILE 文件第一个位置上的参数($1)的值,但它的 .c 后缀更改至 .o。如果 $1 是 /home/jim/program.c 文件,则 OFILE 成为 program.o。因为 program.o 仅是一个基本文件名称,它标识在当前目录中的文件。

dirname
去除文件名中的非目录部分



补充说明
dirname命令 去除文件名中的非目录部分,仅显示与目录有关的内容。dirname命令读取指定路径名保留最后一个/及其后面的字符,删除其他部分,并写结果到标准输出。如果最后一个/后无字符,dirname 命令使用倒数第二个/,并忽略其后的所有字符。dirname 和 basename 通常在 shell 内部命令替换使用,以指定一个与指定输入文件名略有差异的输出文件名。

语法
dirname(选项)(参数)
选项
--help:显示帮助;
--version:显示版本号。
实例
dirname //
结果为 /

dirname /a/b/
结果为:/a

dirname a
结果为 .

dirname a/b
结果为路径名 a

cd
切换用户当前工作目录



概要
cd [-L|[-P [-e]]] [dir]
主要用途
切换工作目录至dir。其中dir的表示法可以是绝对路径或相对路径。
若参数dir省略,则默认为使用者的shell变量HOME。
如果dir指定为~时表示为使用者的shell变量HOME,.表示当前目录,..表示当前目录的上一级目录。
环境变量CDPATH是由冒号分割的一到多个目录,你可以将常去的目录的上一级加入到CDPATH以便方便访问它们;如果dir以/开头那么CDPATH不会被使用。
当shopt选项cdable_vars打开时,如果dir在CDPATH及当前目录下均不存在,那么会把它当作变量,读取它的值作为要进入的目录。
参数
dir(可选):指定要切换到的目录。

选项
-L (默认值)如果要切换到的目标目录是一个符号连接,那么切换到符号连接的目录。
-P 如果要切换到的目标目录是一个符号连接,那么切换到它指向的物理位置目录。
-  当前工作目录将被切换到环境变量OLDPWD所表示的目录,也就是前一个工作目录。
返回值
返回状态为成功除非无法进入指定的目录。

例子
cd    # 进入用户主目录;
cd /  # 进入根目录
cd ~  # 进入用户主目录;
cd ..  # 返回上级目录(若当前目录为“/“,则执行完后还在“/";".."为上级目录的意思);
cd ../..  # 返回上两级目录;
cd !$  # 把上个命令的参数作为cd参数使用。
关于切换到上一个工作目录的说明

cd -
# 命令会首先显示要切换到的目标目录,然后再进入。
cd ${OLDPWD}
# 命令会直接切换到上一个工作目录。
关于CDPATH

# 设置桌面文件夹作为CDPATH的值。
CDPATH='~/Desktop'
# 假设我们接下来要演示涉及到的路径~和~/Desktop下没有test3文件夹,现在新建它们。
mkdir ~/test3
mkdir ~/Desktop/test3
# 进入~目录。
cd ~
# 进入test3目录。
cd test3
# 执行后显示~/Desktop/test3并进入该目录,而不是~目录的test3目录。
# 如果CDPATH存在值,那么优先在CDPATH中查找并进入第一个匹配成功的,如果全部失败那么最后尝试当前目录。
关于cdable_vars

# 打开选项。
shopt -s cdable_vars
# 假设当前路径以及CDPATH没有名为new_var的目录。
new_var='~/Desktop'
# 尝试进入。
cd new_var
# 关闭选项。
shopt -u cdable_vars
注意
该命令是bash内建命令,相关的帮助信息请查看help命令。

建议您在编写脚本的过程中如有必要使用cd命令时,请增加必要的注释以用于提醒阅读者当前工作目录,以免出现诸如找不到文件这类问题的发生。



范例

[root@centos8 ~]#cd /etc/sysconfig
[root@centos8 sysconfig]#pwd
/etc/sysconfig
[root@centos8 sysconfig]#cd ../../data
[root@centos8 data]#pwd
/data
[root@centos8 data]#cd /bin
[root@centos8 bin]#pwd
/bin
[root@centos8 bin]#cd -P /bin 
[root@centos8 bin]#pwd
/usr/bin


stat
用于显示文件的状态信息

补充说明
stat命令 用于显示文件的状态信息。stat命令的输出信息比ls命令的输出信息要更详细。

语法
stat(选项)(参数)
选项
-L:支持符号连接;
-f:显示文件系统状态而非文件状态;
-t:以简洁方式输出信息;
--help:显示指令的帮助信息;
--version:显示指令的版本信息。
参数
文件:指定要显示信息的普通文件或者文件系统对应的设备文件名。

实例
[root@localhost ~]# ls -l myfile
-rw-r--r-- 1 root root 0 2010-10-09 myfile

[root@localhost ~]# stat myfile
file: “myfile”
Size: 0               Blocks: 8          IO Block: 4096   一般空文件
Device: fd00h/64768d    Inode: 194805815   Links: 1
Access: (0644/-rw-r--r--)  Uid: (    0/    root)   Gid: (    0/    root)
Access: 2010-12-12 12:22:35.000000000 +0800
Modify: 2010-10-09 20:44:21.000000000 +0800
Change: 2010-10-09 20:44:21.000000000 +0800

[root@localhost ~]# stat -f myfile
File: "myfile"
id: 0        Namelen: 255     type: ext2/ext3
Block size: 4096       Fundamental block size: 4096
Blocks: Total: 241555461  free: 232910771  Available: 220442547
Inodes: Total: 249364480  Free: 249139691

[root@localhost ~]# stat -t myfile
myfile 0 8 81a4 0 0 fd00 194805815 1 0 0 1292127755 1286628261 1286628261 4096

file
用来探测给定文件的类型



补充说明
file命令 用来探测给定文件的类型。file命令对文件的检查分为文件系统、魔法幻数检查和语言检查3个过程。

语法
file(选项)(参数)
选项
-b:列出辨识结果时,不显示文件名称;
-c:详细显示指令执行过程,便于排错或分析程序执行的情形;
-f<名称文件>:指定名称文件,其内容有一个或多个文件名称时,让file依序辨识这些文件,格式为每列一个文件名称;
-L:直接显示符号连接所指向的文件类别;
-m<魔法数字文件>:指定魔法数字文件;
-v:显示版本信息;
-z:尝试去解读压缩文件的内容。
参数
文件:要确定类型的文件列表,多个文件之间使用空格分开,可以使用shell通配符匹配多个文件。

实例
显示文件类型

[root@localhost ~]# file install.log
install.log: UTF-8 Unicode text

[root@localhost ~]# file -b install.log      <== 不显示文件名称
UTF-8 Unicode text

[root@localhost ~]# file -i install.log      <== 显示MIME类别。
install.log: text/plain; charset=utf-8

[root@localhost ~]# file -b -i install.log
text/plain; charset=utf-8
显示符号链接的文件类型

[root@localhost ~]# ls -l /var/mail
lrwxrwxrwx 1 root root 10 08-13 00:11 /var/mail -> spool/mail

[root@localhost ~]# file /var/mail
/var/mail: symbolic link to `spool/mail'

[root@localhost ~]# file -L /var/mail
/var/mail: directory

[root@localhost ~]# file /var/spool/mail
/var/spool/mail: directory

[root@localhost ~]# file -L /var/spool/mail
/var/spool/mail: directory

文件通配符模式 wildcard pattern

文件通配符可以用来匹配符合条件的多个文件,方便批量管理文件

通配符采有特定的符号,表示特定的含义,此特符号称为元 meta 字符

常见的通配符如下:

* 匹配零个或多个字符,但不匹配 "." 开头的文件,即隐藏文件
? 匹配任何单个字符,一个汉字也算一个字符
~ 当前用户家目录
~mage 用户mage家目录
[0-9] 匹配数字范围
[a-z] 一个字母
[A-Z] 一个字母
[wang] 匹配列表中的任何的一个字符
[^wang] 匹配列表中的所有字符以外的字符
[^a-z] 匹配列表中的所有字符以外的字符
. 和 ~+ 当前工作目录
~-   前一个工作目录

另外还有在Linux系统中预定义的字符类表示法如下:man 7 glob

[:digit:]:任意数字,相当于0-9
[:lower:]:任意小写字母,表示 a-z
[:upper:]: 任意大写字母,表示 A-Z 
[:alpha:]: 任意大小写字母
[:alnum:]:任意数字或字母
[:blank:]:水平空白字符
[:space:]:水平或垂直空白字符
[:punct:]:标点符号
[:print:]:可打印字符
[:cntrl:]:控制(非打印)字符
[:graph:]:图形字符
[:xdigit:]:十六进制字符

touch

创建空文件和刷新时间

范例

[root@centos8 data]#touch f1.txt
[root@centos8 data]#ll
total 0
-rw-r--r-- 1 root root 0 Mar 23 11:30 f1.txt
[root@centos8 data]#ll /etc/issue
-rw-r--r--. 1 root root 23 Jan  2 23:21 /etc/issue
[root@centos8 data]#touch /etc/issue
[root@centos8 data]#ll /etc/issue
-rw-r--r--. 1 root root 23 Mar 23 11:31 /etc/issue
[root@centos8 data]#stat /etc/issue
 File: /etc/issue
 Size: 23             Blocks: 8         IO Block: 4096   regular file
Device: 802h/2050d     Inode: 134345998   Links: 1
Access: (0644/-rw-r--r--) Uid: (    0/   root)   Gid: (    0/   root)
Access: 2020-03-23 11:31:20.030291332 +0800
Modify: 2020-03-23 11:31:20.030291332 +0800
Change: 2020-03-23 11:31:20.030291332 +0800
 Birth: -
[root@centos8 data]#date
Fri Dec 13 16:11:55 CST 2019
[root@centos8 data]#touch `date -d "-1 day" +%F_%T`.log
[root@centos8 data]#ls
2019-12-12_16:11:48.log
[root@centos8 data]#touch $(date -d "1 year" +%F_%T).log
[root@centos8 data]#ls
2019-12-12_16:11:48.log  2020-12-13_16:13:11.log

cp
将源文件或目录复制到目标文件或目录中

补充说明
cp命令 用来将一个或多个源文件或者目录复制到指定的目的文件或目录。它可以将单个源文件复制成一个指定文件名的具体的文件或一个已经存在的目录下。cp命令还支持同时复制多个文件,当一次复制多个文件时,目标文件参数必须是一个已经存在的目录,否则将出现错误。

语法
cp(选项)(参数)


选项
-a:此参数的效果和同时指定"-dpR"参数相同;
-d:当复制符号连接时,把目标文件或目录也建立为符号连接,并指向与源文件或目录连接的原始文件或目录;
-f:强行复制文件或目录,不论目标文件或目录是否已存在;
-i:覆盖既有文件之前先询问用户;
-l:对源文件建立硬连接,而非复制文件;
-p:保留源文件或目录的属性;
-R/r:递归处理,将指定目录下的所有文件与子目录一并处理;
-s:对源文件建立符号连接,而非复制文件;
-u:使用这项参数后只会在源文件的更改时间较目标文件更新时或是名称相互对应的目标文件并不存在时,才复制文件;
-S:在备份文件时,用指定的后缀“SUFFIX”代替文件的默认后缀;
-b:覆盖已存在的文件目标前将目标文件备份;
-v:详细显示命令执行的操作。


参数
源文件:制定源文件列表。默认情况下,cp命令不能复制目录,如果要复制目录,则必须使用-R选项;
目标文件:指定目标文件。当“源文件”为多个文件时,要求“目标文件”为指定的目录。


实例
下面的第一行中是 cp 命令和具体的参数(-r 是“递归”, -u 是“更新”,-v 是“详细”)。接下来的三行显示被复制文件的信息,最后一行显示命令行提示符。这样,只拷贝新的文件到我的存储设备上,我就使用 cp 的“更新”和“详细”选项。

通常来说,参数 -r 也可用更详细的风格 --recursive。但是以简短的方式,也可以这么连用 -ruv。

cp -r -u -v /usr/men/tmp ~/men/tmp
版本备份 --backup=numbered 参数意思为“我要做个备份,而且是带编号的连续备份”。所以一个备份就是 1 号,第二个就是 2 号,等等。

$ cp --force --backup=numbered test1.py test1.py
$ ls
test1.py test1.py.~1~ test1.py.~2~
如果把一个文件复制到一个目标文件中,而目标文件已经存在,那么,该目标文件的内容将被破坏。此命令中所有参数既可以是绝对路径名,也可以是相对路径名。通常会用到点.或点点..的形式。例如,下面的命令将指定文件复制到当前目录下:

cp ../mary/homework/assign .
所有目标文件指定的目录必须是己经存在的,cp命令不能创建目录。如果没有文件复制的权限,则系统会显示出错信息。

将文件file复制到目录/usr/men/tmp下,并改名为file1

cp file /usr/men/tmp/file1
将目录/usr/men下的所有文件及其子目录复制到目录/usr/zh中

cp -r /usr/men /usr/zh
交互式地将目录/usr/men中的以m打头的所有.c文件复制到目录/usr/zh中

cp -i /usr/men m*.c /usr/zh
我们在Linux下使用cp命令复制文件时候,有时候会需要覆盖一些同名文件,覆盖文件的时候都会有提示:需要不停的按Y来确定执行覆盖。文件数量不多还好,但是要是几百个估计按Y都要吐血了,于是折腾来半天总结了一个方法:

cp aaa/* /bbb

# 复制目录aaa下所有到/bbb目录下,这时如果/bbb目录下有和aaa同名的文件,需要按Y来确认并且会略过aaa目录下的子目录。

cp -r aaa/* /bbb

# 这次依然需要按Y来确认操作,但是没有忽略子目录。

cp -r -a aaa/* /bbb

# 依然需要按Y来确认操作,并且把aaa目录以及子目录和文件属性也传递到了/bbb。

\cp -r -a aaa/* /bbb

# 成功,没有提示按Y、传递了目录属性、没有略过目录。

递归强制复制目录到指定目录中覆盖已存在文件

cp -rfb ./* ../backup

# 将当前目录下所有文件,复制到当前目录的兄弟目录 backup 文件夹中

拷贝目录下的隐藏文件如 .babelrc

cp -r aaa/.* ./bbb

# 将 aaa 目录下的,所有`.`开头的文件,复制到 bbb 目录中。

cp -a aaa ./bbb/ 

# 记住后面目录最好的'/' 带上 `-a` 参数

复制到当前目录

cp aaa.conf ./

# 将 aaa.conf 复制到当前目录

mv
用来对文件或目录重新命名

补充说明
mv命令 用来对文件或目录重新命名,或者将文件从一个目录移到另一个目录中。source表示源文件或目录,target表示目标文件或目录。如果将一个文件移到一个已经存在的目标文件中,则目标文件的内容将被覆盖。

mv命令可以用来将源文件移至一个目标文件中,或将一组文件移至一个目标目录中。源文件被移至目标文件有两种不同的结果:

如果目标文件是到某一目录文件的路径,源文件会被移到此目录下,且文件名不变。
如果目标文件不是目录文件,则源文件名(只能有一个)会变为此目标文件名,并覆盖己存在的同名文件。如果源文件和目标文件在同一个目录下,mv的作用就是改文件名。当目标文件是目录文件时,源文件或目录参数可以有多个,则所有的源文件都会被移至目标文件中。所有移到该目录下的文件都将保留以前的文件名。
注意事项:mv与cp的结果不同,mv好像文件“搬家”,文件个数并未增加。而cp对文件进行复制,文件个数增加了。

语法
mv(选项)(参数)


选项
--backup=<备份模式>:若需覆盖文件,则覆盖前先行备份;
-b:当文件存在时,覆盖前,为其创建一个备份;
-f:若目标文件或目录与现有的文件或目录重复,则直接覆盖现有的文件或目录;
-i:交互式操作,覆盖前先行询问用户,如果源文件与目标文件或目标目录中的文件同名,则询问用户是否覆盖目标文件。用户输入”y”,表示将覆盖目标文件;输入”n”,表示取消对源文件的移动。这样可以避免误将文件覆盖。
--strip-trailing-slashes:删除源文件中的斜杠“/”;
-S<后缀>:为备份文件指定后缀,而不使用默认的后缀;
--target-directory=<目录>:指定源文件要移动到目标目录;
-u:当源文件比目标文件新或者目标文件不存在时,才执行移动操作。


参数
源文件:源文件列表。
目标文件:如果“目标文件”是文件名则在移动文件的同时,将其改名为“目标文件”;如果“目标文件”是目录名则将源文件移动到“目标文件”下。




实例
将目录/usr/men中的所有文件移到当前目录(用.表示)中:

mv /usr/men/* .
移动文件

mv file_1.txt /home/office/
移动多个文件

mv file_2.txt file_3.txt file_4.txt /home/office/
mv *.txt /home/office/
移动目录

mv directory_1/ /home/office/
重命名文件或目录

mv file_1.txt file_2.txt # 将文件file_1.txt改名为file_2.txt
重命名目录

mv directory_1/ directory_2/
打印移动信息

mv -v *.txt /home/office
提示是否覆盖文件

mv -i file_1.txt /home/office
源文件比目标文件新时才执行更新

mv -uv *.txt /home/office
不要覆盖任何已存在的文件

mv -vn *.txt /home/office
复制时创建备份

mv -bv *.txt /home/office
无条件覆盖已经存在的文件

mv -f *.txt /home/office

rename
用字符串替换的方式批量改变文件名

补充说明
rename命令存在两个版本用法上有所区别

C语言版本, 支持通配符
[常用通配符说明]
?    表示一个任意字符

*    表示一个或一串任意字符

Perl版本, 支持正则表达式
[常用正则表达式符号说明]
^    匹配输入的开始位置
$    匹配输入的结尾
.    匹配除换行符外的任意字符

+    匹配前一个字符一次或多次 例如,"zo+"可以匹配"zoo",但不匹配"z"
     [a-z]    表示某个范围内的字符,例如,"[a-z]"匹配"a"与"z"之间的任何一个小写字母字符。
     [^m-z]    否定的字符区间。与不在指定区间内的字符匹配。
     区分方法: rename --version

如果返回结果中包含 util-linux , 说明是C语言版本, 反之是Perl版本

# Perl版本 | Ubuntu(18),Mint(20)默认的是Perl版本

$ rename --version
/usr/bin/rename using File::Rename version 1.10

# C语言版本 | Centos(7)默认的是C语言版本

$ rename --version
rename,来自 util-linux 2.23.2
语法

# Perl版本

rename [ -h|-m|-V ] [ -v ] [ -0 ] [ -n ] [ -f ] [ -d ] [ -e|-E perlexpr]*|perlexpr [ files ]

# C语言版本

rename [选项] 表达式 替换的字符 文件...
参数

# Perl版本

-v, --verbose
        详细:成功重命名的文件的打印名称。

-0, --null
        从STDIN读取时,请使用\0作为记录分隔符

-n, --nono
        不执行任何操作:打印要重命名的文件名,但不重命名。

-f, --force
        覆盖:允许覆盖现有文件

--path, --fullpath
        重命名完整路径:包括任何目录组件。默认

-d, --filename, --nopath, --nofullpath
        不重命名目录:仅重命名路径的文件名部分

-h, --help
        帮助:打印提要和选项。

-m, --man
        手册: 打印手册页.

-V, --version
        版本: 显示版本号.

-e      表达: 作用于文件名的代码.

        可以重复来构建代码(比如“perl-e”)。如果没有-e,则第一个参数用作代码。

-E      语句:对文件名执行操作的代码,如-e,但终止于 ';'.


# C语言版本

-v, --verbose
        提供视觉反馈,其中重命名了哪些文件(如果有的话)

-V, --version
        显示版本信息并退出。

-s, --symlink
        在符号链接目标上执行重命名

-h, --help
        显示帮助文本并退出
        
        
实例
Perl版本
将1.txt 2.txt重命名为1.log 2.log

$ rename -v "s/txt/log/g" 1.txt 2.txt
1.txt renamed as 1.log
2.txt renamed as 2.log
修改文件的后缀

rename "s//.html//.php/" *     # 把.html 后缀的改成 .php后缀
批量添加文件后缀

rename "s/$//.txt/" *  # 把所有的文件名都以txt结尾
批量删除文件名

rename "s//.txt//" *   # 把所有以.txt结尾的文件名的.txt删掉
C语言版本
将1.txt 2.txt重命名为1.log 2.log

$ rename -v txt log 1.txt 2.txt
`1.txt' -> `1.log'
`2.txt' -> `2.log'
文件夹中有这些文件foo1, ..., foo9, foo10, ..., foo278

# 把foo1到foo9的文件重命名为foo01到foo09,重命名的文件只是有4个字符长度名称的文件,文件名中的foo被替换为foo0。

rename foo foo0 foo?

# foo01到foo99的所有文件都被重命名为foo001到foo099,只重命名5个字符长度名称的文件,文件名中的foo被替换为foo0。

rename foo foo0 foo??

# foo001到foo278的所有文件都被重命名为foo0001到foo0278,所有以foo开头的文件都被重命名。

rename foo foo0 foo*

# 从foo0200到foo0278的所有文件都被重命名为foo200到foo278,文件名中的foo0被替换为foo。

rename foo0 foo foo0[2]*

rm
用于删除给定的文件和目录

补充说明
rm 命令 可以删除一个目录中的一个或多个文件或目录,也可以将某个目录及其下属的所有文件及其子目录均删除掉。对于链接文件,只是删除整个链接文件,而原有文件保持不变。

注意:使用rm命令要格外小心。因为一旦删除了一个文件,就无法再恢复它。所以,在删除文件之前,最好再看一下文件的内容,确定是否真要删除。rm命令可以用-i选项,这个选项在使用文件扩展名字符删除多个文件时特别有用。使用这个选项,系统会要求你逐一确定是否要删除。这时,必须输入y并按Enter键,才能删除文件。如果仅按Enter键或其他字符,文件不会被删除。

语法
rm (选项)(参数)
选项
-d:直接把欲删除的目录的硬连接数据删除成0,删除该目录;
-f:强制删除文件或目录;
-i:删除已有文件或目录之前先询问用户;
-r或-R:递归处理,将指定目录下的所有文件与子目录一并处理;
--preserve-root:不对根目录进行递归操作;
-v:显示指令的详细执行过程。


参数
文件:指定被删除的文件列表,如果参数中含有目录,则必须加上-r或者-R选项。

实例
交互式删除当前目录下的文件test和example

rm -i test example
Remove test ?n(不删除文件test)
Remove example ?y(删除文件example)
删除当前目录下除隐含文件外的所有文件和子目录

# rm -r *

应注意,这样做是非常危险的!

rm 命令删除当前目录下的 node_modules 目录

find . -name 'node_modules' -type d -prune -exec rm -rf '{}' +
rm 命令删除文件

# rm 文件1 文件2 ...

rm testfile.txt
rm 命令删除目录

rm -r [目录名称] -r 表示递归地删除目录下的所有文件和目录。 -f 表示强制删除

rm -rf testdir
rm -r testdir
删除操作前有确认提示

rm -i [文件/目录]

rm -r -i testdir
rm 忽略不存在的文件或目录

-f 选项(LCTT 译注:即 “force”)让此次操作强制执行,忽略错误提示

rm -f [文件...]
仅在某些场景下确认删除

选项 -I,可保证在删除超过 3 个文件时或递归删除时(LCTT 译注: 如删除目录)仅提示一次确认。

rm -I file1 file2 file3
删除根目录

当然,删除根目录(/)是 Linux 用户最不想要的操作,这也就是为什么默认 rm 命令不支持在根目录上执行递归删除操作。 然而,如果你非得完成这个操作,你需要使用 --no-preserve-root 选项。当提供此选项,rm 就不会特殊处理根目录(/)了。

不给实例了,操作系统都被你删除了,你太坏了

标签:文件,用户,--,第三天,目录,root,链接
From: https://www.cnblogs.com/nwq1101/p/18030835

相关文章

  • Android家庭记账本开发第三天:MainActivity主界面逻辑文件
    昨天讲了主界面的xml文件的布局,这里讲一下对应的主界面的Java文件,首先上代码:1packagecom.example.myapplication3;23importandroid.annotation.SuppressLint;4importandroid.content.Intent;5importandroid.database.Cursor;6importandroid.databas......
  • Erlang 学习之第三天 . 函数,模块,递归,数字,字符串
    Erlang函数Erlang是一种众所周知的函数式编程语言,因此您将看到许多关于函数如何在Erlang中工作的重点。本章介绍如何使用Erlang中的函数完成所有操作。直接上实例:定义函数add(X,Y) ->    Z = X+Y,    io:fwrite("~w~n",[Z]). start() ->    add(5,6).......
  • 代码随想录算法训练营第三天 |203.移除链表元素 , 707.设计链表,206.反转链表
    206.反转链表 已解答简单 相关标签相关企业 给你单链表的头节点 head ,请你反转链表,并返回反转后的链表。 示例1:输入:head=[1,2,3,4,5]输出:[5,4,3,2,1]示例2:输入:head=[1,2]输出:[2,1]示例3:输入:head=[]输出:[] 提示:链......
  • 代码随想录算法训练营第三天| 203.移除链表元素,707.设计链表 ,206.反转链表
    203.移除链表元素给你一个链表的头节点 head 和一个整数 val ,请你删除链表中所有满足 Node.val==val 的节点,并返回 新的头节点 。题目链接:203.移除链表元素-力扣(LeetCode)注意c++中NULL和nullptr的区别。应该用nullptr来表示空指针。/***Definitionforsingly......
  • 第三天
    helloworld随便新建一个文件夹,存放代码新建一个Java文件。文件后缀名为.java。Hello.java。【注意点】系统可能没有显示文件后缀名,我们需要手动打开编写代码publicclassHello{ publicstaticvoidmain(String[]args){ System.out.print("Hello,World!"); ......
  • 第三天
    第三天编译和解释java先把代码进行编译,然后把代码解释给电脑,让操作系统进行处理。注释//单行注释/**/多行注释/**回车文本文档注释标识符和关键字标识符命名只能以大小写字符和$和_,开头。不能用java存在的关键词。数据类型byte,short,char<int<long<float<double常......
  • Leetcode刷题第三天-贪心-双指针
    738:单调递增链接:738.单调递增的数字-力扣(LeetCode)嘶~介个介个恶心心,从后往前遍历,前一个数比当前数大,前一个数-1,当前数变为9需要注意的是,保证每个9后面全是9100,第一轮遍历完时90T_T1classSolution:2defmonotoneIncreasingDigits(self,n:int)->int:3......
  • C语言学习第三天
    一、选择语句#include<stdio.h>intmain(){intinput=0;printf("学习C语言\n");printf("你要好好学习C语言,然后好好学习数据结构吗?(1/0)/n,1--好好学习,2--不好好学习");scanf("%d",&input);//if(input==0)printf("娶个丑老婆");......
  • Python第三天学习笔记
    执行Python的两种形式第一种:交互式,在cmd中运行优点:直接给出结果缺点:无法保存jupyter对这一种进行了封装第二种:命令行式,通过cmd中输入Python3文本.txt文件可以,.py文件也可以,命令行式可以识别任何文本文件优点:可以保存缺点:无法及时得到报错反馈1.2.1三个步骤编写Py......
  • 接口自动化测试第三天,利用类的动态方法设置全局变量
    今天的注意知识点是学会使用jsonpath,利用类的动态方法设置全局变量我们大多数情况下,接口都需要使用到登录时获取的token,为了方便使用,我们需要将登录后的token使用jsonpath表达式提取出来然后设置为全局变量首先提前下载好第三方库,jsonpath,这里给一个jsonpath官方地址和在线练习......