ls 文件与目录的视察
LS-LIST的缩写
第一组为“文件拥有者可具备的权限”,以“initial-setup-ks.cfg”那个文件为例,该文件的拥有者可以读写,但不可执行;
第二组为“加入此群组之帐号的权限”;
第三组为“非本人且没有加入本群组之其他帐号的权限”。
若有一个文件的类型与权限数据为“-rwxr-xr--”,请说明其意义为何?答:先将整个类型与权限数据分开查阅,并将十个字符整理成为如下所示:
[-][rwx][r-x][r--]
1 234 567 890
1 为:代表这个文件名为目录或文件,本例中为文件(-);
234为:拥有者的权限,本例中为可读、可写、可执行(rwx);
567为:同群组使用者权限,本例中为可读可执行(rx);
890为:其他使用者权限,本例中为可读(r),就是只读之意同时注意到,rwx所在的位置是不会改变的,有该权限就会显示字符,没有该权限就变成减号(-)就是了。
第二栏表示有多少文件名链接到此节点(i-node):每个文件都会将他的权限与属性记录到文件系统的i-node中,不过,我们使用的目录树却是使用文件名来记录,因此每个文件名就会链接到一个i-node啰!这个属性记录的,就是有多少不同的文件名链接到相同的一个i-node号码去就是了。关于i-node的相关数据我们会在第七章谈到文件系统时再加强介绍的。
第三栏表示这个文件(或目录)的“拥有者帐号”
第四栏表示这个文件的所属群组在Linux系统下,你的帐号会加入于一个或多个的群组中。举刚刚我们提到的例子,class1,class2, class3均属于projecta这个群组,假设某个文件所属的群组为projecta,则class1, class2, class3三人对于该文件都具有可读、可写、可执行的权限(看群组权限)。但如果是不属于projecta的其他帐号,对于此文件就不具有任何权限了。
第五栏为这个文件的容量大小,默认单位为Bytes;
第六栏为这个文件的创建日期或者是最近的修改日期:
第七栏为这个文件的文件名
这七个字段的意义是很重要的!务必清楚的知道各个字段代表的意义!尤其是第一个字段的九个权限,那是整个Linux文件权限的重点之一。
ls -l 显示当前目录中的内容
ls -la 与ls -l输出内容与格式基本相同 a指令使得输出了隐藏文件信息
ls -lha 与ls -l输出内容与格式基本相同 h将文件大小改为了人类适度的单位
ls -lt 与ls -l输出内容与格式基本相同,t指的是按时间排序
ls -R 递归显示当前目录中的文件和子目录
ls -l [dir_name] 目录下的详细信息
cp 复制
命令名称:cp(Copy)
作用说明:cp命令用于将文件或目录从一个位置复制到另一个位置。它可以用于在不同目录之间复制文件,也可以用于复制目录及其所有子目录和文件。
参数使用:
- -r 或 -R:递归地复制目录及其内容。
- -a:保留源文件的所有属性(包括权限、所有者、组、时间戳等)进行复制。
- -v:显示复制过程中每个文件被复制的详细信息。
- -u:只复制目标不存在或源文件较新的文件。
- -i:在复制前进行确认提示,防止意外覆盖目标文件。
- -p:保留源文件的权限。
- -f:强制复制,即覆盖目标文件。
- -l:创建硬链接而非复制文件。
例子1:将文件file.txt复制到目录backup中
$ cp file.txt backup/
例子2:递归地将目录dir1复制到目录dir2中,并保留源文件的所有属性
$ cp -a dir1/ dir2/
在默认的条件中, cp 的来源文件与目的文件的权限是不同的,目的文件的拥有者通常会是指令操作者本身。
范例四可有趣了!使用 -l 及 -s 都会创建所谓的链接文件(link file),但是这两种链接文件却有不一样的情况。这是怎么一回事啊?那个 -l 就是所谓的实体链接(hard link),至于 -s 则是符号链接(symbolic link),简单来说,bashrc_slink 是一个“捷径”,这个捷径会链接到bashrc去!所以你会看到文件名右侧会有个指向(->)的符号!
rm 删除文件或目录
rm命令用于删除文件或目录。它的基本语法是:
rm [选项] 文件/目录
常用的选项包括:
- -r 递归地删除目录及其内容
- -f 强制删除,不显示确认提示
- -i 删除前显示确认提示
- -v 显示详细的操作信息
例子1:删除文件
rm file.txt
这个命令将删除名为file.txt的文件。
例子2:强制删除目录
rm -rf dir/
这个命令将递归地删除名为dir的目录及其所有内容,并且不显示确认提示。
范例四也是很有趣的例子,我们在之前就谈过,文件名最好不要使用 "-" 号开头,因为 "-"后面接的是选项,因此,单纯的使用“ rm -aaa- ”系统的指令就会误判啦!那如果使用后面会谈到的正则表达式时,还是会出问题的!所以,只能用避过首位字符是 "-" 的方法啦!就是加上本目录“ ./ ”即可!如果man rm 的话,其实还有一种方法,那就是“ rm -- -aaa- ”也可以啊!
mv 移动文件或者目录, 或更名
命令名称:mv
作用说明:mv命令用于移动或重命名文件或目录。
参数使用:mv命令常用参数如下:
- 要移动或重命名的源文件或目录
- 目标文件或目录的路径
例子1:将文件file1.txt重命名为file2.txt
命令:mv file1.txt file2.txt
例子2:将文件file1.txt移动到目录dir1中
命令:mv file1.txt dir1/
这是搬移(move)的意思!当你要移动文件或目录的时后,呵呵!这个指令就很重要啦!同样的,你也可以使用 -u ( update )来测试新旧文件,看看是否需要搬移啰!另外一个用途就是“变更文件名!”,我们可以很轻易的使用mv 来变更一个文件的文件名呢!不过,在 Linux 才有的指令当中,有个rename 可以用来更改大量文件的文件名
rename 更改大量文件的文件名
在Linux系统中,rename命令用于批量重命名文件或目录。它允许您通过指定一个或多个匹配模式和一个替换模式来重命名文件或目录的名称。
参数使用:
- -v 或 --verbose:显示执行过程中的详细信息。
- -n 或 --no-act:仅模拟重命名操作,不实际执行。
- -f 或 --force:强制执行重命名操作,覆盖同名文件。
- -s 或 --symlink:在重命名时创建符号链接,而不是实际更改文件名。
- -i 或 --interactive:在重命名时进行交互式确认,确保不会意外删除或覆盖文件。
示例1:将所有以.txt结尾的文件名中的".txt"替换为".md":
rename 's/\.txt$/.md/' *.txt
示例2:将所有以数字开头的文件名中的数字删除:
rename 's/^[0-9]+//' *
以上命令将删除文件名中开头的任何数字。例如,文件名为"123_file.txt"将被重命名为"file.txt"。
basename
作用说明:basename命令用于从一个文件路径中提取出文件名或目录名部分。
参数使用:basename [选项] 文件路径
选项:
- a, --multiple:提取多个文件路径中的文件名或目录名
- z, --zero:文件路径之间使用空字符分隔
例子1:假设当前目录下有一个文件路径为/home/user/file.txt,可以使用basename命令提取出文件名部分:
$ basename /home/user/file.txt 输出:file.txt
例子2:假设当前目录下有多个文件路径为/home/user/file1.txt和/home/user/file2.txt,可以使用basename命令提取出多个文件名部分:
$ basename -a /home/user/file1.txt /home/user/file2.txt 输出:file1.txt file2.txt
dirname
在Linux系统中,dirname是一个用于获取给定路径的父目录的命令。
参数使用:
- path: 要提取父目录的路径。可以是相对路径或绝对路径。
例子1:
假设当前目录是"/home/user/documents",我们想要获取"/home/user"作为父目录。可以使用以下命令:
$ dirname /home/user/documents
输出结果:
/home/user
例子2:
假设当前目录是"/var/www/html",我们想要提取"/var/www"作为父目录。可以使用以下命令:
$ dirname /var/www/html
输出结果:
/var/www