三、Linux常用命令之文件目录篇(ls、cd、pwd、mkdir、touch、cp、mv、rm、rmdir)

时间:2021-12-12 10:39:44

转载请注明出处:http://blog.csdn.net/yiliumu/article/details/20405505

(一)Linux文件及目录

1、Linux中,除了"/"以外,其他的所有符号都可以用来做文件的命名。。。
主要是因为:/ 在Linux中表示根目录(即Linux文件系统结构是一个倒树状结构,在*有个目录,就是根目录,其他所有目录都是在这个根目录下衍生出来),而且在Linux中,目录的分隔符也是使用/来分隔的,所以/是不能用来命名文件的

2、有一些符号也是建议不要使用,比如、空格符,制表符,退格符,‘@’,‘#’,'$','&','(',')','-'等等。。。('-'在Linux下是用来连接选项的)
空格:在windows下是可以的,比如:Program Files 就是一个目录名称 ,但是,之所以在Linux下不建议使用空格,是因为Linux真正操作的都是在命令行下操作的,其中,命令和选项和参数都是用空格隔开的。所以如果你现在要操作一个有空格的文件,又要使用的选项,这样Linux系统就不认得了。。。所以在命名文件的时候,我们最好不要使用以上的一些符号

3、在windows下,文件命名遵循8.3规则,名称可以在8位以内,后缀名可以在3位以内,但是在Linux下,文件可以不使用后缀名,文件名的长度也可以非常的长

4、在Linux中,我们必须避免使用”.“作为普通文件名的第一个字符,因为在Linux系统下,用"."开头的文件表示”隐藏文件“,不是普通文件。。。在Windows下,我们可以使用右键将文件改成隐藏文件,但是在Linux,我们使用命令行操作,就没有这种操作了,比如我们要将文件abc隐藏,此时就必须将文件名abc在命令行下:改为.abc,将文件隐藏,所以以”.“开头的文件不是普通文件,而是隐藏文件

5、Linux操作系统是大小写敏感的,Linux源自Unix系统,而Unix系统是丹斯里奇用C语言把内核代码绝大部分进行重写的,而C语言是严格区分大小写的,所以Linux继承了这样的一个特征,在Liunx中,文件名,命令,选项,参数等等都是严格区分大小写的,在windows没有这种特征,所以在今后我们在敲一文件名,选项,参数,都是要严格区分大小写的

(二)文件处理命令:
命令格式:命令 -选项 参数 (选项和参数都是可选的,可以只有选项,也可以只有参数,也可以都有) 
ls /只有参数 ls -a只有选项
例如:ls -la /etc 
命令:是命令本身,
选项:是我们在使用这个命令的时候,我们需要操作这个命令的不同显示效果,就可以使用选项来调节,选项可以同时有多个,可以连着写在一起,例如:上面的例子中-la就是两个不同的选项,使用"-"后面连接选项,l是一个选项,a是一个选项。但是我们也可以将选项使用空格分开,即:-l a 这样也可以表示两个选项,但是我们为了省事,都是连着一起写
参数:是我们命令操作的对象,一个命令可以对文件操作,可以对目录操作,可以对用户,用户组,进程等等操作,这些我们用命令来操作的对象,我们称之为参数,比如:上面的例子中,参数为/etc,也就是我们要操作的对象就是/etc这个目录

1、文件处理命令:ls(在windows下使用dir来显示目录文件,表示directory)
命令名称ls
英文愿意:list
命令所在路径:/bin/ls (在Linux下,命令存放的位置的不同,决定了该命令的执行权限的不同)
执行权限:所有用户
功能:显示目录或文件
语法:ls 选项[-ald][文件或目录(参数)]
-a(all)显示所有文件,包括隐藏文件,如果只是ls,就看不到隐藏文件 
-l(long)详细信息显示
-d(directory)查看单独一个目录的详细信息

-d的使用,因为我们在使用ls -l的时候,就查看这个目录下的所有文件及其子目录的信息,如果我们要查看某一个目录的详细信息时,我们就可以在l后面加上d,比如:
ls -ld / 表示查看根目录的详细信息(属性),注意不是根目录下的所有文件及其子目录的属性
此时就会显示:
drwxr-xr-x 24 root root 4096 12-01 21:30 /

ls -l testfile ls如果是查看文件的详细信息,则可以使用-l [文件名],就不会像查看目录那样,将该目录的所有文件及其子目录文件都显示出来,因为我们已经指定了哪个文件了,所以只会显示该文件的详细信息
ls 就能将当前目录的所有文件显示出来 list
ls /就能将根目录下的所有文件显示出来
在windows下,我们可以通过图标,很方便的知道这个文件就什么格式的文件,但是在Linux下则不可以,因为都是在命令行下操作的,但是Linux用不同颜色来标记不同格式的文件,最常见的文件类型有两种,一个是二进制文件(黑色标记),一个是目录(蓝色标记),但是这并不是很重要,以为内很多的Linux版本都是没有用颜色来标记的,也就是都是黑色来标记文件
使用ls -l / 即,查看根目录下所有文件的详细信息:
drwxr-xr-x 2 root root 4096 12-01 20.52 bin
----------------------drwxr-xr-x:(永远都是10个字符,不够得用-表示)
第一个字符:d是文件类型,常见的文件类型有三种,
d 表示目录
- 表示“二进制文件”-rw-r-r,上面讲过,Linux下所有不是目录和特殊文件的,都可以称为二进制文件
l 表示软链接文件 link
(还有s开头的,等等,这些是特殊文件,我们以后再学)

以后的9个字符rwxr-xr-x,表示权限,
r:read 读权限
w: write 写权限
x:execute 执行权限(windows下的.exe文件就是这个意思,表示可以执行文件)
我们可以将其每三个拆为一组:rwx r-x r-x 
每一组对应一种用户,
第一组:文件拥有者u user或onwer 比如张三创建了这个文件,这个文件的所有者就是张三,当然所有者是可以转让的,
第二组:所属组g(group) 组内(文件也可以放在组内)用户所具备对该文件的操作权限
第三组:其他人o(others)

--------------2

表示硬链接数,不是很重要。。。。

--------------root root
两个root,第一个表示这个目录的所有者是谁,第二个root表示该目录的所属组

--------------4096
表示目录(文件)大小,这个目录的大小并不是说:将bin目录下的所有文件加在一起的大小,只是标记这个目录本身,或其子目录所占用的大小,所以这不是准确的数值,所以我们很少使用ls -l来统计目录的大小,而且又没有显示单位,不同的Linux版本稍有不同,windows下要么KB,要么MB,但是在Linux下,使用数据块表示:block 存储单位为512字节,可以理解为数据块就是最小的存储空间
比如,一个教室可以放40张椅子,每个椅子只能坐一个人,现在换成沙发,只能放20张,每一张也是坐一个人,所以数据块就相当于椅子,沙发一样,
我们在划分文件系统时,我们可以自己定义自己的数据块大小,可以大到是沙发,可以小到是椅子,当默认就512字节。接下来存放数据的时候,一个文件至少占用一个数据块,比如,一个12字节的文件,还是要占用一个数据块,就好比一个瘦人也要坐一张椅子,但是如果是一个1000字节的文件,此时就要将其划分成两部分,分别分配给两个数据块了。。。当然,系统数据块是可以调整大小的。比如,我们是一个视频网站,每个视频都是1, 2M,所以此时我们就必须调整数据块大小,而不是将每个视频都划分成若*分,这样就会是存取速度非常的慢

-------------12-01 20:52
文件创建的时间或者是文件最后修改时间

--------------bin
表示文件目录的名称或者文件名

2、文件处理命令:cd
命令原意:change directory
命令所在路径:shell内置命令
执行权限:所有用户
语法:cd [目录] 中间有空格
功能:切换目录
例:$cd / 切换到根目录 $cd ..回到上一级目录

3、文件处理命令:pwd
命令原意: print working directory
功能:查看当前所在的目录

4、文件处理命令:mkdir
原意:make directories
所在路径:/bin/mkdir
执行权限:所有用户
语法:mkdir [目录名]
功能:创建一个目录
例:mkdir /test
mkdir -p /test/parent/son -p表示如果没有父目录,则帮忙创建父目录,

5、文件处理命令:touch
命令所在路径:/bin/touch
执行权限:所有用户
语法:touch [文件名]
功能:创建一个空文件
例:touch newfile

6、文件处理命令:cp
英文愿意:copy
命令所在路径:/bin/cp
执行权限:所有用户
语法:cp -rp[源文件或目录][目的目录] 源文件可以同时是多个,即同时复制到多个文件
-r 复制目录
-p保留文件属性,比如文件创建时间等等,此时和创建硬链接有点相似,但是不能实时更新
-f强制打开文件即使文件不能打开,也要强制打开

功能:复制文件或目录
例:cp /etc/inittab /etc/services /test/ 表示同时将etc/inittab文件和etc/下的services复制到/test目录下,**********目标可以不指定其文件名称
注意:如果只是复制文件,只要直接写上cp即可,但是复制目录的时候,一定要加上-r这个选项。比如
cp -r /etc /test 表示将/etc目录复制到/test目录下,即test目录下有一个etc目录
(注意:etc目录下存放的都是一些配置文件,所以大多数都要将etc目录备份一下,最简单的备份方式就是copy到其他位置了,可以是分区,可以是硬盘)

7、文件处理命令:mv
英文原意:move
命令所在路径:/bin/mv
执行权限:所有用户
语法:mv [源文件或目录] [目录目录]
功能:移动文件目录(即剪切),也可以重命名目录或文件, *****************Linux没有rename这个命令
例:mv file1 file3
将当前目录下文件file1更名为file3
mv file2 dir2
将文件file2移动到目录dir2下
比如:mv services service将当前目录下的services更名为service ******如果移动后不改变名称,则可以不写目标文件名称,直接写目录,和
mv /test/inittab /tmp/ copy一样,也可以同时移动多个文件 
将test/inittab文件移动到/tmp/目录下

8、文件处理命令:rm
原意:remove
所在路径:/bin/rm
执行权限:所有用户
语法:rm [文件或目录]
-r(选项) 递归删除目录(递归即深度到所有的子目录下) 如果要删除一个文件,则不需加任何的选项 
功能:删除文件 在用这种方式删除一个文件时,系统会提示是否确认删除,此时需要敲入y,(实际上rm命令在Unit下,是直接删除文件的,但是Linux下,有别名机制,也就是rm也捆绑了一个选项,即-i,它会有一个询问过程)但是我们可以使用rm -f file3 直接将文件删除,而不需要系统提示确认删除例:rm file3 删除文件file3
rm -r dir1 删除目录dir1 rm -r test 删除目录test 在使用这种方式删除一个目录的时候,系统会提示你是否进入该目录,然后再帮你一个一个删除,如果目录里有很多文件时,这种方式也不可取的,所以如果你非常确定要删除该目录,可以使用 rm -rf test 强制删除(f 表示never prompt,从不询问),而cp -rf /etc /test/etc.back 表示复制目录/etc,并且如果目录里的文件无法打开,则强制打开,并复制

9、文件处理命令:rmdir
表示删除“空目录”。注意,是空目录,这个命令用得很少,因为他是用来删除空目录的

PS: (在Linux下,命令存放的位置的不同,决定了改命令的执行权限的不同),命令执行的权限有两种,只有root(管理员)执行权限的命令都存放在:/sbin 和/usr/sbin
而all users(所有用户)都可以执行的命令都存放在:/bin 和/usr/bin
其中bin 表示binary (在之前提过,Linux所有的东西都是文件)所以,命令自然也是一个文件,而且是一个二进制文件,所以叫binary,在Linux下,二进制文件是一个广泛的范畴,比如一个视频文件,一个图片,一个网页文件,一个压缩包,都是一个二进制文件
usr 表示user
sbin 表示super binary
但是,不一定所有的命令都是一定存放在这些目录里边的,比如,如果你安装了一个第三方软件,这个软件的命令肯定就有他自己的存放目录,所以记住:
(1)只要命令是存放在/bin目录下,就是所有用户都可以执行的命令
(2)只要命令是存放在/sbin目录下,就是只有管理员才可以执行的命令
(3)当我们想要查看命令所在的目录来查看命令执行的权限时,可以使用:ls -l `which mkdir`

PS:
(1)当有多个选项时,可以写在一起。-ls 其中'-'是用来连接选项的,l是一个选项,s也是一个选项
(2)两个特殊目录"."和"..",分别代表当前目录和当前目录的上一级目录(即父目录)
注意一点:Linux在命令行操作中是十分严格的,比如:在Dos命令下,我们可以使用cd ..回到上一级目录,但是这个命令在Linux下就必须中间使用空格将cd和".."隔开,
cd ..才可以回到上一级目录,其中cd 是命令,..是参数,命令和选项和参数之间要使用空格隔开

(3)~表示用户的宿主目录,而/表示根目录,用户登录进去后,默认是进入自己的家目录的(即宿主目录)

本章节学习了Linux的文件目录相关命令,下一章节将学习Linux的文件操作命令。