在/目录下有若干个文件夹,初始的时候比较头疼不知道干什么用的,有一本书专门介绍各个目录的作用,该书已经上传到附件。
1. /boot:系统启动相关的文件,内核以及grub(bootloader)、initrd
2. /dev:设备文件
块设备:随即访问
字符设备:线性访问,按照字符为单位
鼠标和显示器都是字符设备
ll显示/dev特殊设备的时候,不再显示大小,而是显示主设备号和次设备号,中间使用,隔开。
3. /etc/:配置文件
4. /home:用户的家目录
5. /root:root的家目录
6. /lib:库文件
(1). 库文件分类
库文件有两类:
动态库:windows上表现为.dll,在linux上表现为.so(shared Object)
静态库:Linux上表现为.a
(2). 动态库和静态库有什么区别?
动态库在内存中只有一份,如果多个模块都需要一个库文件,那么除了第一次加载该动态库之外,其他模块都直接在内存中调用该动态库即可。
静态库是直接链接为程序的一部分而存在
如果直接将一个程序移植到另外一个主机上,如果是静态库,则不需要考虑其他一定能够运行,但是如果是动态库,则必须保证该主机上有相应的库文件才行。
(3). .so文件类型
.so文件不是LSB executable类型的文件,而是LSB shared object类型的文件,使用file命令就能够直接看出来,.so类型的文件只能够被调用,不能够单独运行。
(4). /lib是存放库文件的,但是实际上其它目录也能够存放库文件
7. /media:挂载点目录,移动设备
8. /mnt:额外的临时文件,比如,额外的临时文件系统
9. /opt:第三方程序的安装目录,但是现在已经约定俗称的不将其安装到该目录下了,但是Oracle等特殊软件仍然会默认将软件安装到该目录下。
10. /proc:为文件系统,该目录本来是空的,但是系统启动起来之后就不是空的了。实际上是内核映像文件。
11. /sys:也是一种伪文件系统,他是和硬件设备相关的属性映射文件
12. /tmp:临时文件夹
13. /var:可变化的文件,随着系统的运行,该文件会越来越大。
/var/tmp也是一个临时文件
14. /bin:binary,存放的都是可执行文件,用户命令
15. /sbin:管理命令
17. /usr:universal shared readonly,全局的,共享的,只读的文件
/usr/bin
/usr/sbin
/usr/lib
/usr/local
/usr/local/bin
/usr/local/sbin
/usr/local/lib
mkdir -p #如果父目录不存在,则创建之 -v #打印创建的信息
示例:
kdyzm@kdyzm:~$ mkdir -pv /tmp/a/b/c/d mkdir: created directory ‘/tmp/a’ mkdir: created directory ‘/tmp/a/b’ mkdir: created directory ‘/tmp/a/b/c’ mkdir: created directory ‘/tmp/a/b/c/d’
可以使用命令行展开创建多个目录:
kdyzm@kdyzm:~$ mkdir -pv /tmp/a/{b,c}/d mkdir: created directory ‘/tmp/a’ mkdir: created directory ‘/tmp/a/b’ mkdir: created directory ‘/tmp/a/b/d’ mkdir: created directory ‘/tmp/a/c’ mkdir: created directory ‘/tmp/a/c/d’
Linux中"{}"称之为命令行展开,"~"称之为波浪线展开。
kdyzm@kdyzm:~/datastructure$ stat graph/ #查看某个文件的状态信息 File: ‘graph/’ Size: 4096 Blocks: 8 IO Block: 4096 directory Device: 809h/2057d Inode: 278398 Links: 6 Access: (0775/drwxrwxr-x) Uid: ( 1000/ kdyzm) Gid: ( 1000/ kdyzm) Access: 2016-01-25 13:26:21.862111974 +0800 Modify: 2016-01-23 13:53:49.997066495 +0800 Change: 2016-01-23 13:53:49.997066495 +0800 Birth: -
stat `ls` #查看当前目录下所有文件的状态信息
这里我们对三个时间戳信息比较感兴趣
Access: 2016-01-25 13:26:21.862111974 +0800 Modify: 2016-01-23 13:53:49.997066495 +0800 Change: 2016-01-23 13:53:49.997066495 +0800
从上到下依此是访问时间、修改时间、改变时间。
“修改时间”指的是内容改变的时间;“改变时间”则不仅仅包含“内容”的改变,而且还包含文件本身各个“属性”的改变,当然“修改时间”本身就是文件的一种属性,所以如果“修改时间”被改变,那么“改变时间”也会随着发生变化。
touch -a 只修改访问时间 -m 只修改“修改时间” -c 如果文件不存在,不创建文件 -t 设置时间戳信息,格式:[[CC]YY]MMDDhhmm[.ss]
示例:
kdyzm@kdyzm:~/datastructure$ stat graph/ File: ‘graph/’ Size: 4096 Blocks: 8 IO Block: 4096 directory Device: 809h/2057d Inode: 278398 Links: 6 Access: (0775/drwxrwxr-x) Uid: ( 1000/ kdyzm) Gid: ( 1000/ kdyzm) Access: 2016-01-25 13:26:21.862111974 +0800 Modify: 2016-01-23 13:53:49.997066495 +0800 Change: 2016-01-23 13:53:49.997066495 +0800 Birth: - kdyzm@kdyzm:~/datastructure$ touch -at 191909092359.59 graph/ kdyzm@kdyzm:~/datastructure$ stat graph/ File: ‘graph/’ Size: 4096 Blocks: 8 IO Block: 4096 directory Device: 809h/2057d Inode: 278398 Links: 6 Access: (0775/drwxrwxr-x) Uid: ( 1000/ kdyzm) Gid: ( 1000/ kdyzm) Access: 1919-09-09 23:59:59.000000000 +0800 Modify: 2016-01-23 13:53:49.997066495 +0800 Change: 2016-01-28 12:07:23.752351674 +0800 Birth: -
上述示例中,使用touch命令修改了graph文件夹的最后一次访问时间,为1919-09-9 23:59:59,但是可以发现change时间也改变了,改变成了当前时间,也就是说随着访问时间的改变,“改变时间”会更新到了最新的时间。
rmdir :删除空文件夹 rm :删除文件或者文件夹
使用rmdir只能删除空文件夹,使用rm能够删除文件和文件夹,所以rm命令要比mkdir更加常用。
rm -i #删除每个文件之前提示 -r #递归删除文件,通常用于删除文件夹中及其子文件夹中的所有文件和目录 -f #不提示直接删除,强制删除
示例删除:
kdyzm@kdyzm:~$ rm -ir /tmp/a rm: descend into directory ‘/tmp/a’? y rm: descend into directory ‘/tmp/a/c’? y rm: remove directory ‘/tmp/a/c/d’? y rm: remove directory ‘/tmp/a/c’? y rm: descend into directory ‘/tmp/a/b’? y rm: remove directory ‘/tmp/a/b/d’? y rm: remove directory ‘/tmp/a/b’? y rm: remove directory ‘/tmp/a’? y kdyzm@kdyzm:~$
cp #该命令用于复制文件和目录 ...source... destDir #复制多个源到一个目录 -t destDir ...source... #同上 -r/R #递归的复制目录 -a #保留文件的所有属性,长用于归档备份 -d #如果复制的是软链接,则还是软链接而不是源文件 -p #保留文件的属主和属组以及时间戳等信息
示例:
kdyzm@kdyzm:~$ mkdir -pv /tmp/a/{b,c}/{d,e}/f mkdir: created directory ‘/tmp/a’ mkdir: created directory ‘/tmp/a/b’ mkdir: created directory ‘/tmp/a/b/d’ mkdir: created directory ‘/tmp/a/b/d/f’ mkdir: created directory ‘/tmp/a/b/e’ mkdir: created directory ‘/tmp/a/b/e/f’ mkdir: created directory ‘/tmp/a/c’ mkdir: created directory ‘/tmp/a/c/d’ mkdir: created directory ‘/tmp/a/c/d/f’ mkdir: created directory ‘/tmp/a/c/e’ mkdir: created directory ‘/tmp/a/c/e/f’ kdyzm@kdyzm:~$ cp -r /tmp/a/ /tmp/newa kdyzm@kdyzm:~$ tree /tmp/newa /tmp/newa ├── b │ ├── d │ │ └── f │ └── e │ └── f └── c ├── d │ └── f └── e └── f
可见已经复制成功,但是文件夹被重命名了。
注意:复制时的规则如下
对于上述复制文件夹的例子来说,如果目标文件夹不存在,则直接复制该目录并将该目录重命名为指定文件夹名称;如果目标文件夹存在,则讲源文件夹复制到目标文件夹下
如果目标是文件,如果文件存在,则删除文件然后复制新文件;如果目标文件不存在,则直接复制文件。
通过whatis可以看出install命令的作用是复制文件并且设置属性的命令。
该命令的最大特色就是能够自定义复制文件之后的访问权限、文件属主、文件属组等信息,使用该命令只能复制文件二不能复制目录。
install -m #设置9个权限位,设置方法和chmod相同 -o #设置属主 -g #设置属组 -t #设置目标目录
示例:
kdyzm@kdyzm:~$ touch a.txt kdyzm@kdyzm:~$ ll ./a.txt -rw-rw-r-- 1 kdyzm kdyzm 0 1月 28 13:32 ./a.txt kdyzm@kdyzm:~$ install -m 777 -o root -g root a.txt b.txt install: cannot change ownership of ‘b.txt’: Operation not permitted kdyzm@kdyzm:~$ su root Password: root@kdyzm:/home/kdyzm# install -m 777 -o root -g root a.txt b.txt root@kdyzm:/home/kdyzm# ll b.txt -rwxrwxrwx 1 root root 0 1月 28 13:35 b.txt*
如果想要设置属主属组信息需要相应的权限