第1章文件与目录操作文件管理是操作系统的重要功能,在Linux中所有的软硬件资源都被认为是特殊的文件.
本章介绍Linux下的普通文件和目录相关的操作指令.
这些指令是Linux管理员必备的基础指令.
1.
1ls指令:显示目录内容【语法】ls[选项][参数]【功能介绍】ls指令用来显示目录列表,在Linux系统中有着较高的使用率.
ls指令的输出信息可以进行彩色加亮显示,以区分不同类型的文件.
【选项说明】选项功能-a显示包括隐藏文件(文件名以".
"开头)在内的所有文件-A显示除隐藏文件".
"和".
.
"以外的所有文件列表-C多列显示输出结果.
这是默认选项-1与"-C"选项功能相反,所有输出信息用单列格式输出,不输出为多列-F在每个输出项后追加文件的类型标识符.
具体含义如下:"*"表示具有可执行权限的普通文件,"/"表示目录,"@"表示符号连接,"|"表示命名管道FIFO,"="表示sockets套接字.
当文件为普通文件时,不输出任何标识符-b将文件名中的不可输出字符以反斜线"\"加字符编码的方式输出-c与"-lt"选项连用时,按照文件的状态改变时间排序输出目录内容,排序的依据是文件的索引节点中的ctime字段.
与"-l"选项连用时,则排序的依据是文件的状态改变时间-d仅显示目录名,而不显示目录下的内容列表.
显示符号连接文件本身,而不显示其所指向的目录列表-f按照文件在磁盘上的存储顺序显示列表,对输出内容不进行排序操作.
"-f"选项具有"-a"选项的功能,可以显示隐藏文件.
不能和"-f"选项连用的选项有:"-l"选项、"--color"选项和"-s"选项-i显示文件的索引节点号(inode).
一个索引节点代表一个文件--file-type与"-F"选项的功能相同,但是不显示"*"-k以KB(千字节)为单位显示文件大小续表选项功能-l以长格式显示目录下的内容列表.
输出的信息从左到右依次包括文件名,文件类型、权限模式、硬连接数、所有者、组、文件大小和文件的最后修改时间等-m以水平方式显示文件(每个文件之间用","和一个空格隔开),已达到每行显示尽可能多的文件数-n文件所属的用户和组使用用户ID号和组ID号表示.
使用此选项时将自动采用长格式输出目录内容列表-r以文件名反序排列并输出目录内容列表.
否则,按照文件名升序显示目录内容列表-s以块(1块=1024字节)为单位显示文件的大小-t按照文件的最后修改时间降序显示目录内容列表,最近修改过的文件显示在前面-L忽略符号连接本身的信息,而显示符号连接所指向的目标文件的信息-R递归显示目录下的所有文件列表和子目录列表--full-time显示完整的日期时间,而不是使用标准的缩写.
ls指令的日期时间格式与指令date的默认格式相同--color[=WHEN]使用不同的颜色高亮显示不同类型的文件.
可选值包括"never"、"always"和"auto"【参数说明】参数功能目录指定要显示列表的目录.
也可以是具体的文件【经验技巧】ls指令来自"coreutils"软件包,此软件包中还包含有"dir"指令,此指令与"ls"指令的功能相同.
本书将不再单独介绍"dir"指令.
ls指令的"--color"选项可以使其输出内容按照文件类型用彩色加亮显示.
大部分的Linux系统默认情况下都已经设置了命令别名"aliasls--color=tty",所以在使用ls指令时不必再加上此选项.
当结合管道符号"|"使用ls指令时,ls指令的输出结果送入管道后将失去彩色加亮功能.
使用ls指令的"-l"选项以长格式输出文件属性,输出信息的第一列为权限信息,它们代表的含义:"r"表示读权限;"w"表示写权限;"x"表示执行权限;"-"表示没有权限.
使用"-l"选项时,可执行权限位可能出现"s"、"S"、"t"和"T"字母,它们代表的含义为:"s"表示"setuid"权限或"setgid"权限,以及可执行权限;"S"表示虽然具有"setuid"权限或"setgid"权限,但是文件没有可执行权限;"t"表示"sticky"权限,同时文件还具有可执行权限;"T"表示文件具有"sticky"权限,但是没有可执行权限;"x"表示文件仅具有可执行权限,不具有其他的特殊权限.
使用ls指令的"-i"选项可以显示文件的索引节点号,具有相同索引节点号的文件本质上是一个文件,故其内容完全相同.
默认情况下ls指令只能显示非隐藏文件,如果要显示所有的文件列表必须使用"-a"选项.
【示例1】显示目录列表.
默认情况下ls指令只能显示非隐藏文件,本例中将使用ls指令显示当前工作目录的非隐藏文件列表.
具体步骤如下:在命令行中输入下面的命令:[root@localhost~]#ls.
#显示当前目录下的非隐藏文件和目录,当前目录用".
"表示输出信息如下:anaconda-ks.
cfgcommand.
txtDesktopinstall.
loginstall.
log.
syslogtest(说明:本例中的".
"表示当前工作目录,也可以省略.
【示例2】显示当前工作目录下包括隐藏文件在内的所有文件列表.
要想显示目录下包括隐藏文件在内的全部文件,则必须使用ls指令的"-a"选项.
具体步骤如下:在命令行中输入下面的命令:[root@localhost~]#ls–a.
#显示当前工作目录下包括隐藏文件在内的所有文件列表输出信息如下:bashrc.
eggcups.
gnome2_private.
lesshsttestchewing.
esd_auth.
gstreamer-0.
10.
metacity.
Trash.
.
.
.
.
.
省略部分输出内容.
.
.
.
.
.
.
bash_profile.
dmrc.
gnome2install.
log.
sy-slog.
tcshrc(说明:可以发现本例的输出文件比【示例1】中的输出文件更多,包含了所有以点开头的隐藏文件和隐藏目录.
【示例3】输出长格式列表.
默认情况下,ls指令仅列出目录下的文件列表,并不包含文件的详细信息.
使用"-l"选项可以得到文件的详细信息(包括文件类型,权限,文件大小,用户和组信息等).
具体步骤如下:在命令行中输入下面的命令:[root@localhost~]#ls–l.
#以长格式显示当前目录下的内容输出信息如下:total80drwxr-xr-x2rootroot4096Apr1523:08Desktop.
.
.
.
.
.
省略部分输出内容.
.
.
.
.
.
lrwxrwxrwx1rootgroup211Apr1706:34test->install.
log(说明:在长格式的输出信息中,每行代表一个文件,第一列表示文件类型和权限(权限信息共9个字符,每3个字符为一组,分别表示文件所有者的权限、工作组的权限和其他用户的权限),第二类表示文件的连接数(这里指的是硬链接),第三列表示文件所有者,第四列表示文件所属工作组,第五列表示文件的大小,第六列表示文件最后一次访问的时间,第七列表示文件名称.
【示例4】显示文件的inode信息.
索引节点(indexnode简称为"inode")是Linux中的一个特殊概念,具有相同的索引节点号的两个文件本质上是同一个文件(除了文件名不同外),使用ls指令的"-i"选项,可以显示文件的索引节点号.
下面的例子将查看两个文件的索引节点号.
具体步骤如下:在命令行中输入下面的命令:[root@localhost~]#ls–i-lfile1file2#显示文件的索引节点号输出信息如下:64930-rw-r--r--2rootroot3372604-3009:04file164930-rw-r--r--2rootroot3372604-3009:04file2(说明:上面的输出信息中,文件"file1"和"file2"具有相同的索引节点号,所以其内容完全相同,当删除任何一个文件时另一个文件依然存在并且内容不受影响,当修改任何一个文件内容时,另一个文件内容同时发生变化.
【示例5】水平输出文件列表.
默认情况下,ls指令以每行一个文件的方式输出列表,这种输出方式占用的屏幕空间较大,为了节省屏幕空间,可以使用"-m"选项以水平紧凑方式显示文件列表信息.
具体步骤如下:在命令行中输入下面的命令:[root@localhost~]#ls–m#目录列表的显示方式为水平紧凑方式输出信息如下:account,cache,crash,cvs,db,empty,ftp,games,gdm,lib,local,lock,log,lost+found,mail,named,nis,opt,preserve,racoon,run,spool,tmp,www,yp(说明:上面的输出信息中,每个文件之间使用逗号加一个空格隔开.
当同时使用"-m"选项与"-l"选项时,"-m"选项的功能失效.
【相关指令】dir,vdir1.
2cd指令:将当前工作目录切换到指定目录【语法】cd[选项][参数]【功能介绍】cd指令用来切换用户的当前工作目录.
默认情况下,单独使用cd指令,将切换到用户的宿主目录(由环境变量"HOME"定义).
【选项说明】选项功能-P如果要切换到的目标"目录"是一个符号连接,直接切换到符号连接指向的目标目录.
例如,"cd/test"(test为指向"/home/test"的符号连接),则直接切换到"/home/test"目录-L与"-P"选项功能相反,如果要切换到的目标"目录"是一个符号连接,直接切换到符号连接名所代表的目录,而非符号连接所指向的目标目录.
例如,"cd/test"(test为指向"/home/test"的符号连接),则直接切换到"/test"目录-当仅使用"-"一个选项时,当前工作目录将被切换到环境变量"OLDPWD"所表示的目录【参数说明】参数功能目录指定要切换的目标目录【经验技巧】在使用"cd"指令时,经常使用"Tab"键来利用命令行的自动补齐功能来加快参数的输入速度和准确度.
在Linux操作系统中每个用户都有宿主目录(即:HomeDirectory),它是用户登录之后所在的默认目录.
当用户切换到其他目录后,希望快速回到宿主目录,则可以使用"cd"指令、"cd~"指令或者"cd$HOME"指令中任何一个.
【示例6】改变工作目录.
当希望从当前工作目录切换到其他目录时,将目标目录传递给cd指令即可.
具体步骤如下:(1)使用pwd指令显示当前工作目录.
在命令行中输入下面的命令:[root@localhostetc]#pwd#显示当前工作目录输出信息如下:/etc(说明:上面的输出信息表明当前的工作目录为"/etc".
(2)将当前工作目录切换到"/var/log"目录.
在命令行中输入下面的命令:[root@localhostetc]#cd/var/log#将当前工作目录切换到/var/log目录(3)再次使用pwd指令显示当前工作目录.
在命令行中输入下面的命令:[root@localhostlog]#pwd#显示当前工作目录输出信息如下:/var/log(说明:上面的输出中可以看到,当前的工作目录已经切换到了"/var/log"目录.
【示例7】快速返回用户的宿主目录.
当希望快速的返回到用户的宿主目录时,可以使用不带任何参数和选项的cd指令.
具体步骤如下:(1)使用pwd指令显示当前工作目录.
在命令行中输入下面的命令:[root@localhosthttpd]#pwd#显示当前工作目录输出信息如下:/var/log/httpd(说明:上面的输出中可以看到,当前工作目录为"/var/log/httpd".
(2)使用cd指令返回用户的宿主目录.
在命令行中输入下面的命令:[root@localhosthttpd]#cd#返回用户的宿主目录(说明:此命令没有任何输出信息.
(3)使用pwd指令显示当前所在目录.
在命令行中输入下面的命令:[root@localhost~]#pwd#显示当前工作目录输出信息如下:/root(说明:工作目录已经切换到了root用户的宿主目录.
【示例8】"-P"选项的用法.
Linux系统中使用符号连接实现类似快捷方式的功能,符号连接是一类特殊的文件,它保存了真实所指目录的路径信息.
使用cd指令的"-P"选项切换到符号连接指向的实际目录的功能.
具体步骤如下:(1)使用pwd指令显示当前工作目录.
在命令行中输入下面的命令:[root@localhost~]#pwd#显示当前工作目录输出信息如下:/root(2)使用ls指令的"-l"选项显示符号连接文件所指向的实际目录.
在命令行中输入下面的命令:[root@localhost~]#ls-letc#文件etc为符号连接,其指向的实际目录为/etc输出信息如下:lrwxrwxrwx1rootroot505-1309:03bin->/etc/(说明:上面的输出中可以看到,符号连接文件"etc"指向的实际目录为"/etc".
(3)使用cd指令的"-P"选项切换到符号连接"etc".
在命令行中输入下面的命令:[root@localhostroot]#cd-Petc#切换到etc所指向的目录/etc(4)使用pwd指令显示当前所在目录.
在命令行中输入下面的命令:[root@localhostetc]#pwd#显示当前工作目录输出信息如下:/etc(说明:用户的当前工作目录变成了"/etc".
从本例可以看出使用"-P"选项时,切换到的目录是符号连接所指向的实际目录"/etc",而不是符号连接所代表的目录"/root/etc".
【示例9】"-L"选项的用法.
cd指令的"-L"选项可以使当前工作目录切换到符号连接所代表的目录.
具体步骤如下:(1)使用pwd指令显示当前工作目录.
在命令行中输入下面的命令:[root@localhostroot]#pwd#显示当前工作目录输出信息如下:/root(说明:上面的输出中可以看到,当前所在路径为"/root".
(2)使用ls指令的"-l"选项显示符号连接.
在命令行中输入下面的命令:[root@localhostroot]#ls-letc#"etc"为符号连接,其指向的实际目录为/etc输出信息如下:lrwxrwxrwx1rootroot92月2700:43etc->/etc/(说明:上面的输出中可以看到,符号连接"etc"指向了"/etc"目录.
(3)使用cd指令的"-L"选项切换到"etc".
在命令行中输入下面的命令:[root@localhostroot]#cd-Letc#切换到"/root/etc"目录(说明:此命令没有任何输出信息.
(4)使用pwd指令显示当前工作目录.
在命令行中输入下面的命令:[root@localhostetc]#pwd#显示当前工作目录输出信息如下:/root/etc(说明:用户的当前工作目录变成了"/root/etc".
默认情况下,cd指令切换到符号连接时与"-L"选项的功能相同,所以通常可以省略"-L"选项.
【相关指令】pwd1.
3cp指令:复制文件或目录【语法】cp[选项][参数]【功能介绍】cp指令用来将一个或者多个源文件或者目录复制到指定的目的文件或目录.
它可以将单个源文件复制成一个指定文件名的具体的文件或一个已经存在的目录下.
cp指令还支持同时复制多个文件,当一次复制多个文件时,目标文件参数必须是一个已经存在的目录,否则将出现错误.
【选项说明】选项功能-a保持源文件的原有结构和属性,与选项"-dpR"的功能相同-d如果复制的源文件是符号连接,仅复制符号连接本身,而且保留符号连接所指向的目标文件或者目录-f强制覆盖已经存在的目标文件,而不提示用户进行确认.
为防止覆盖重要文件,通常不适用此选项-i在覆盖已存在的目标文件前提示用户进行确认.
使用此选项可以防止覆盖掉重要文件-l为源文件创建硬连接(与"ln"指令的功能相同).
此选项可以节省硬盘空间,但是要求源文件和目的文件必须在同一分区(或文件系统)上-p复制文件时保持源文件的所有者、权限信息和以及时间属性-R或-r对目录进行复制操作,此选项以递归的操作方式,将指定目录及其子目录中的所有文件复制到指定的目标目录-s不进行真正的复制操作,仅为源文件创建符号连接(与"ln-s"指令的功能相同)-u当目标文件不存在或者源文件比目标文件新时才进行复制操作,否则,不进行复制-S在备份文件时,用指定的后缀"SUFFIX"代替文件名的默认后缀-b覆盖已存在的目标文件前将目标文件备份-v详细显示指令执行的操作【参数说明】参数功能源文件指定源文件列表.
默认情况下,cp指令不能复制目录,如果要复制目录,则必须使用-R选项目标文件指定目标文件.
当"源文件"为多个文件时,要求"目标文件"为指定的目录【经验技巧】cp指令可以一次复制多个源文件,但是要求最后一个参数必须为目录.
通常,在使用cp指令时,当目标文件存在时,系统都会提示是否进行覆盖操作.
这是因为绝大多数Linux发行版都为cp指令指定了命令别名"aliascp='cp-i'",防止管理员的误操作.
在shell脚本编程中使用cp指令时,为了避免"-i"选项导致程序必须和用户进行交互,可以使用"-f"选项,以实现强制复制而不提示用户确认.
cp指令具备了ln指令的功能,使用cp指令的"-l"和"-s"选项为源文件创建硬连接或符号连接.
需要注意,当创建硬连接时,源文件和目标文件必须在同一个文件系统内(即同一个分区).
由于硬链接具有相同的索引节点号,所以使用"-l"选项创建硬连接时,源文件和目标文件必须在同一个文件系统下(即在同一个硬盘分区).
【示例10】复制单个文件.
当使用cp指令复制单个文件时,第一个参数表示源文件,第二个参数表示目标文件.
具体步骤如下:在命令行中输入下面的命令:[root@localhost~]#cp-v/etc/fstab/root/fstab.
bak#复制单个文件输出信息如下:"/etc/fstab"->"/root/fstab.
bak"(说明:上例中为了便于说明,使用了"-v"选项来显示cp指令执行的详细过程,通常可以省略"-v"选项.
上例中将"/etc/fstab"文件备份为"/root/fstab.
bak"文件.
【示例11】复制多个文件.
当使用cp指令复制多个文件时,最后一个参数必须是一个已经存在的目录.
具体步骤如下:在命令行中输入下面的命令:[root@localhost~]#cp-vfile1file2file3Desktop/复制多个源文件输出信息如下:`file1'->`Desktop/file1'`file2'->`Desktop/file2'`file3'->`Desktop/file3'【示例12】使用通配符简化文件名的输入.
上例中的源文件名有一定的规律,所以可以借助于shell中的通配符来简化命令的输入.
具体步骤如下:在命令行中输入下面的命令:[root@localhost~]#cp-vfile[1-3]Desktop/#用通配符复制多个源文件输出信息如下:`file1'->`Desktop/file1'`file2'->`Desktop/file2'`file3'->`Desktop/file3'(说明:可以看到使用通配符达到了简化命令行中的指令输入的效果.
【示例13】复制目录.
在默认情况下,cp指令只能复制普通文件.
如果要进行目录的复制操作,则必须借助于"-R"或者"-r"选项,否则将忽略复制目录.
具体步骤如下:(1)在命令行中输入下面的命令.
[root@localhost~]#cp/etc//root/#复制目录,将出现错误输出信息如下:cp:omittingdirectory`/etc/'(说明:由于源文件"/etc"是一个目录,所以cp指令默认情况下忽略了复制操作.
(2)使用"-R"选项后则可以正常复制.
在命令行中输入下面的命令:[root@localhost~]#cp-R/etc//root/#将/etc/目录复制到"/root"目录(说明:上面的指令正常执行时将没有任何输出信息.
【示例14】创建符号连接.
cp指令在复制文件时,如果指定了"-s"选项,则会为源文件建立一个符号连接文件,而不进行实际的复制操作.
具体步骤如下:(1)在命令行中输入下面的命令:[root@localhost~]#ln-v-s/etc/fstab/root/myfstab#为源文件创建符号连接输出信息如下:createsymboliclink`/root/myfstab'to`/etc/fstab'(2)使用ls指令显示复制后的目标文件.
在命令行中输入下面的命令:[root@localhost~]#ls-l/root/myfstab#显示目标文件的详细信息输出信息如下:lrwxrwxrwx1rootroot10May1423:53/root/myfstab->/etc/fstab(说明:可以看到,目标文件是源文件的一个符号连接.
【示例15】创建硬连接.
cp指令的选项"-l"可以为源文件创建一个硬连接.
具体步骤如下:(1)在命令行中输入下面的命令:[root@localhost~]#cp-linstall.
logmy_install.
log#为源文件创建硬连接(2)使用ls指令查看源文件和目标文件的索引节点号.
在命令行中输入下面的命令:[root@localhost~]#ls-iinstall.
logmy_install.
log#显示文件的索引节点号输出信息如下:4415042install.
log4415042my_install.
log(说明:从上面的输出信息可以看出,源文件和目标文件的索引节点号都是"4415042",表明它们是硬连接.
【示例16】提高复制操作的安全性.
默认情况下在使用cp指令复制文件时,如果目标文件已存在,则cp指令会自动覆盖掉目标文件,而且不给出任何提示信息.
这种情况很容易导致错误的覆盖掉重要文件.
为了提高安全性,通常在使用cp指令时都加上"-i"选项,以在覆盖目标前进行提示确认.
具体步骤如下:在命令行中输入下面的命令:[root@localhost~]#cp-i/etc/fstab/root/fstab#安全使用cp指令输出信息如下:cp:overwrite`/root/fstab'y#确认覆盖掉目标文件(说明:上面的输出信息中,"y"是用户输入的确认字符,表示覆盖目标文件,当不希望覆盖目标文件时可以输入"n".
在多数Linux系统中为cp指令设置的命令别名中已经包含了"-i"选项,所以在shell中使用cp指令时可以将其省略,也同样能够达到防止误操作的目的.
【相关指令】dd,ln1.
4mv指令:移动文件或改名【语法】mv[选项][参数]【功能介绍】mv指令可以移动文件或为文件改名.
【选项说明】选项功能--backup=指定目标文件存在时,如何进行备份操作.
支持的备份模式如下:none和off关闭备份功能number和t为文件追加数字后缀的方式进行备份existing和nil如果使用数字后缀的备份文件已存在,则覆盖已存在备份文件simpe和never进行简单备份-b当目标文件存在时,覆盖前,为其创建一个备份-f在覆盖已存在的目标文件前不提示用户确认.
此选项具有一定的风险,可能导致覆盖重要文件-i在覆盖已存在的目标文件前提示用户确认,防止覆盖重要的文件--strip-trailing-slashes删除源文件中的斜杠"/"-S为备份文件指定后缀,而不使用默认的后缀--target-directory=指定源文件要移动到的目标目录-u当源文件比目标文件新或者目标文件不存在时,才执行移动操作【参数说明】参数功能源文件源文件列表目标文件如果"目标文件"是文件名则在移动文件的同时,将其改名为"目标文件";如果"目标文件"是目录名则将源文件移动到"目标目录"下【经验技巧】在同一文件系统(即同一硬盘分区)中,无论移动的文件有多大,速度都是非常快的.
但是,如果在两个不同的Linux硬盘分区间移动文件,速度将明显降低.
这是因为,在同一个分区移动文件时,仅仅需要修改文件对应的指针即可;但是,在不同间移动文件时,必选要执行复制的操作,所以执行导致速度明显降低.
BGP.TO目前针对日本和新加坡服务器进行促销,其中日本东京服务器6.5折,而新加坡服务器7.5折起。这是一家专门的独立服务器租售网站,提供包括中国香港、日本、新加坡和洛杉矶的服务器租用业务,基本上都是自有硬件、IP资源等,国内优化直连线路,机器自动化部署上架,并提供产品的基本管理功能(自助开关机重启重装等)。新加坡服务器 $93.75/月CPU:E3-1230v3内存:16GB硬盘:480GB ...
pacificrack官方在搞2021年七夕促销,两款便宜vps给的配置都是挺不错的,依旧是接入1Gbps带宽,KVM虚拟、纯SSD raid10阵列,支持包括Linux、Windows 7、10、server2003、2008、2012、2016、2019在内多种操作系统。本次促销的VPS请特别注意限制条件,见本文末尾!官方网站:https://pacificrack.com支持PayPal、支...
zji怎么样?zji是一家老牌国人主机商家,公司开办在香港,这个平台主要销售独立服务器业务,和hostkvm是同一样,两个平台销售的产品类别不一平,商家的技术非常不错,机器非常稳定。昨天收到商家的优惠推送,目前针对香港邦联四型推出了65折优惠BGP线路服务器,性价比非常不错,有需要香港独立服务器的朋友可以入手,非常适合做站。zji优惠码:月付/年付优惠码:zji 物理服务器/VDS/虚拟主机空间订...