Linux—目录和文件(总结)
目录
第三章 目录和文件
1.1 类Unix系统目录结构
ubuntu没有盘符这个概念,不和Windows中有C盘,D盘等盘一样,只有一个根目录/,所有文件都在它下面。
/ 根目录
bin //系统可执行程序,如命令
boot //内核和启动程序,所有和启动相关的文件都保存在这里
grub //引导器相关文件
dev //设备文件
etc //系统软件的启动和配置文件,系统在启动过程中需要读取的文件都在这个目录。如LILO参数、用户账户和密码。
home //用户的主目录。下面是自己定义的用户名的文件夹
lib //系统程序库文件,这个目录里存放着系统最基本的动态链接共享库,类似于Windows下的system32目录,几乎所有的应用程序都需要用到这些共享库。
media //挂载媒体设备,如光驱、U盘等
mnt //目录是让用户临时挂载别的文件系统,如挂载Windows下的某个分区,ubuntu默认还是挂载在/media目录。
opt //可选的应用软件包(很少使用)
proc //这个目录是系统内存的映射,我们可以直接访问这个目录来获取系统信息。也就是说,这个目录的内容不在硬盘上而是在内存里。
sbin //管理员系统程序
selinux
srv
sys //udev用到的设备目录树,/sys反映你机器当前所接的设备
tmp //临时文件夹
usr //这是个最庞大的目录,我们要用到的很多应用程序和文件几乎都存放在这个目录下。
bin // 应用程序
game //游戏程序
include
lib //应用程序的库文件
lib64
local //包含用户程序等
sbin //管理员应用程序
1.2 用户目录
位于/home/user,称之为用户工作目录或家目录,表示方式:
/home/user
~
1.2.1 相对路径和绝对路径
绝对路径
从/目录开始描述的路径为绝对路径,如:
cd /home
ls /usr
相对路径
从当前位置开始描述的路径为相对路径,如:
cd ../../(上一级目录的上一级目录)
ls abc/def(本目录下的abc目录下的def文件或目录)
.和..
每个目录下都有.和..
. 表示当前目录
.. 表示上一级目录,即父目录
根目录下的.和..都表示当前目录
1.3 ls
ls [OPTION]… [FILE]…
ls是英文单词list的简写,其功能为列出目录的内容。这是用户最常用的一个命令,因为用户需要不时地查看某个目录的内容。该命令类似于DOS下的dir命令。对于每个目录,该命令将列出其中的所有子目录与文件。对于每个文件,ls将输出其文件名以及所要求的其他信息。默认情况下,输出条目按字母顺序排序。当未给出目录名或是文件名时,就显示当前目录的信息。
主要的OPTION有:
-a 列出隐藏文件,文件中以“.”开头的均为隐藏文件,如:~/.bashrc
-l 列出文件的详细信息
-R 连同子目录中的内容一起列出
用ls -l命令显示的信息中,开头是由10个字符构成的字符串,其中第一个字符表示文件类型,它可以是下述类型之一:
- 普通文件
d 目录
l 符号链接(相当于Windows下的快捷方式)
b 块设备文件(简单理解相当于存储的U盘,磁盘等)
c 字符设备文件(我们的鼠标键盘都是字符设备)
s socket文件,网络套接字(网络通信文件)
p 管道
后面的9个字符表示文件的访问权限,分为3组,每组3位。第一组表示文件属主的权限,第二组表示同组用户的权限,第三组表示其他用户的权限。每一组的三个字符分别表示对文件的读、写和执行权限。各权限如下所示:
r 读
w 写
x 可执行。对于目录,表示进入权限。
s 当文件被执行时,把该文件的UID或GID赋予执行进程的UID(用户ID)或GID(组ID)。
t 设置标志位(sticky bit)。如果是有sticky bit的目录,在该目录下任何用户只要有适当的权限即可创建文件,但文件只能被超级用户、目录拥有者或文件属主删除。如果是有sticky bit的可执行文件,在该文件执行后,指向其正文段的指针仍留在内存。这样再次执行它时,系统就能更快地装入该文件。
- 没有相应位置的权限。
访问权限后面的数字表示与该文件共享inode的文件总数,即硬链接数(参见下面ln命令)。
一个目录默认大小是4096个字节,或者是4096的整数倍。
第1位表示文件类型;2,3,4位表示文件所有者的权限;5,6,7位表示文件所属组的用户的权限;8,9,10位表示其他用户的权限
文件的权限位—硬链接计数—文件所有者—文件所属组—文件大小—文件创建时间—文件名
硬链接计数:一个磁盘文件被引用的次数。
1.4 cd
change dir 改变当前所在路径
cd ~ 回到家目录:从当前目录回到此时用户的主目录下
cd dir1/dir2 到dir1下的dir2目录
注释:此方法只能在此时所在目录到此目录中所存在的目录里的目录,也就是假如你现在在a目录下,a目录里面包含一个b目录,b目录里面包含一个c目录,你只能写成cd b/c 不能写成 cd a/b 除非你所在的a目录下包含有一个a目录。
cd .. 回到上一级目录
1.5 which
查看指定命令所在路径
which ls 查看ls这个命令所在路径
注释:ls /bin/ls -l 意思是查看bin目录下的ls的详细信息,-l,在文件名前后都可以。
1.6 pwd
查看当前所在路径,此路径为绝对路径
pwd
1.7 mkdir
mkdir [OPTION] DIRECTORY…
创建目录DIRECTORY,可以一次创建多个。OPTION如果是-p,表示可以连同父目录一起创建。
如果想一步创建一个层级目录,比如就是创建一个x目录,在x目录下创建一个y目录,在y目录下创建一个z目录;想一步完成。命令如下所示:
mkdir -p x/y/z 创建层级目录
注释:1、必须在mkdir后面加一个-p不然无法创建层级目录。
2、创建的空目录里面只有.和.. ;也就是当前目录和上一目录;也就是说目录里只有.和..的目录是空目录。
3、命令tree功能是按显示目录和文件
1.8 rmdir
rmdir [OPTION]… DIRECTORY…
删除空目录,不是空目录无法删除。可以一次删除多个。OPTION如果是-p,表示可以连同空的父目录一起删除。mkdir和rmdir的用法举例:
$ mkdir a
$ mkdir a/b
$ ls a
b
$ rmdir a/b
$ ls a
$ rmdir a
$ mkdir a/b
mkdir: cannot create directory `a/b': No such file or directory
$ mkdir -p a/b
$ rmdir -p a/b
rmdir y/z 删除此目录下的y目录里的空目录z。
rmdir -p x/y/z 删除层级空目录,如果三个目录里只要有一个目录不是空目录就删除失败。
1.9 touch
touch [OPTION]… FILE…
* 如果文件不存在,则创建一个字节数为0的文件。
* 如果文件存在,将每个文件的访问及修改时间都更新为目前的时间。相当于此时你创建了一个同名文件,由原来的文件里的东西copy到你此时创建的新同名文件中,然后自动将旧文件删除了。也就是更新了文件的创建时间。
1.10 rm
删除文件:
rm file 删除文件file
删除目录:
rm -r XX 删除目录XX,-r在目录名前后都可以。
rm dir -rf r是递归的意思,f是force,强制、强行,不管目录dir存不存在,都执行删除操作,如果目录dir不存在,也会执行删除操作,不会报错提示目录dir不存在。-rf 在目录名前后都可以。
1.11 mv
重命名:
mv file1 file2 将文件file1重命名为文件file2
移动文件:
mv file1 ~/ 将文件file1移动到目录~下
mv file1 ../ 将文件file1移动到上一级目录
mv ../file1 ./ 将上一级文件file1移动到当前目录下
1.12 cp
拷贝文件:
cp file1 file2 将文件file1拷贝一份命名为file2
cp file1 dir/ 将文件file1拷贝到dir这个目录下,拷贝的文件名字还是叫file1
cp file1 ../ 将文件file1拷贝到上一级目录,名字不变。
拷贝目录:
cp dir1 dir2 -r 将目录dir1 里的内容拷贝到目录dir2中,递归拷贝。
cp dir1 ~/ -r 将目录dir1 里的内容拷贝到目录~中。
1.13 cat
查看文件里内容,输出到终端,如果cat时没跟文件名,则读标准输入,遇到\n后,输出到标准输出,终端下输入Ctrl-d表示结束。
1.14 more
more [OPTION] FILE…
查看文本文件的内容,屏幕显示完一屏就等待用户按下任意键再滚动到下一屏,按回车键按一次继续显示下一行,按一次显示一行;按空格会每次新显示一屏幕;按住shift键配合PgUp,PgDn上翻页,下翻页;如果中途不想继续看下去了,可以按q或Ctrl+C终止显示。
1.15 less
less [OPTION] FILE…
查看文本文件的内容,屏幕显示完一屏就等待用户按键,用户可以向上或向下查看,如果中途不想继续看下去了,可以按Ctrl+C或q终止显示。
1.16 head
head [OPTION]… FILE…
显示指定文件的前面几行。如果没有指定文件,将从标准输入(键盘)上读取。如果没有指定要显示的行数,则默认显示前10行。如果要显示文件的前5行:
$ head -5 file1 显示文件file1的前5行
1.17 tail
tail [OPTION]… FILE…
显示文件的最后几行。若没有指定显示的行或字符数,则默认显示末尾10行。如果要显示文件末5行:
$ tail -5 file1 显示文件file1的末5行
1.18 ln (比较重要)
创建链接,链接有两种,一种被称为硬链接(Hard Link),另一种被称为符号链接(Symbolic Link)(软链接)。建立硬链接时,链接文件和被链接文件必须位于同一个文件系统中,并且不能建立指向目录的硬链接。而对符号链接,则不存在这个问题。默认情况下,ln产生硬链接。如果给ln命令加上-s选项,则建立符号链接。举例如***意ls -l列出文件的硬链接数和字节数:
硬链接:
touch hello
ln hello word_h
软链接:
ln -s hello word_s
Linux中的符号链接相当于Windows中的快捷方式,如果把a删除了,Windows中就相当于把软件删除了,软件没了,那软件的快捷方式也就没有用了。所以Linux中删除了文件的节点信息,那关于该节点的符号链接就没用了。硬链接是为对应文件创建一个新的文件节点,删除原来的文件节点a,对于新创建的文件节点b和c不会有影响,文件也不会被删除。
注释:符号链接(软链接)的名字在Linux的Ubuntu中颜色是亮蓝色(水绿色),当符号链接对应的文件(如上图的a)被删除后,符号链接X就失效了,颜色就会变成红色,并且陪黑框包裹住;但b和c还是有用的,能够继续查看文件,磁盘文件没有被真正删除。
注释:只有当一个文件的硬链接计数变为零的时候,这个磁盘文件才会被认为被删除掉,空间才会被释放掉。
注释:权限位后面的数字意思为硬链接计数:一个磁盘文件被引用的次数。
一个磁盘文件的硬链接增加,硬链接计数就会增加,反之减少。
1.19 tree
Ubuntu默认没有安装这个命令,这个命令需要下载安装,ubuntu下命令为:
sudo apt-get install tree 安装命令tree
按结构树的形状显示目录和文件
1.20 wc
利用wc 指令我们可以计算文件的Byte 数、字数、或是列数,若不指定文件名称、或是所给予的文件名为“-”,则wc 指令会从标准输入设备读取数据。
wc -l ./*
-c 或–bytes 或–chars 只显示Bytes 数。
-l 或–lines 只显示列数。
-w 或–words 只显示字数。
从左到右分别表示43行,41个单词数,126个字符,所属文件为h.txt文件。看行数是看\n ,看单词数是看空格,看字符数是一个一个字符相加。
1.21 od
od -tcx file1
-t 指定数据的显示格式,主要的参数有:
c ASCII字符或反斜杠序列
d[SIZE] 有符号十进制数,每个整数SIZE字节。
f[SIZE] 浮点数,每个整数SIZE字节。
o[SIZE] 八进制(系统默认值为02),每个整数SIZE字节。
u[SIZE] 无符号十进制数,每个整数SIZE字节。
x[SIZE] 十六进制数,每个整数SIZE字节。
部分示例如下所示:
其他不常用参数
od –help 会显示关于od的其他参数及od的详细信息,示例如下所示:
1.22 du
查看某个目录的大小:
以M为单位(兆MB),当文件大小不够1MB时,向上取整,显示为1MB。
du -hm /home/xingwenpeng/test
以B为单位(字节)
du -hb ./*
以K为单位,4k的整数倍
du -hk ./*
1.23 df
df查看磁盘使用情况
df --block-size=GB 以GB的形式显示
df --block-size=MB 以MB的形式显示
df --block-size=KB 以KB的形式显示