linux 学习 文件与目录

Linux 系统目录概况

	在 Linux 或 Unix 操作系统中,所有的文件和目录都被组织成以一个根节点开始的倒置的树状结构。
	文件系统的最顶层是由根目录开始的,使用 / 来表示根目录。在根目录之下的既可以是目录,也可以是文件,而每一个目录中又可以包含子目录文件。
目录的含义解释:

在Linux文件系统中有两个特殊的目录,一个用户所在的工作目录,也叫当前目录,可以使用一个点 . 来表示;另一个是当前目录的上一级目录,也叫父目录,可以使用两个点 . .来表示

. :代表当前的目录,也可以使用 ./ 来表示;
. . :代表上一层目录,也可以 . ./ 来代表。

FHS(Filesystem Hierarchy Standard)规范每个特定的目录下应该要放置什么样子的数据,针对目录树架构仅定义出三层目录底下应该放置什么数据而已,分别是底下这三个目录的定义:
/ (root, 根目录):与开机系统有关;
/usr (unix software resource):与软件安装/执行有关;
/var (variable):与系统运作过程有关。


/根目录的内容:

如果一个目录或文件名以一个点 . 开始,表示这个目录或文件是一个隐藏目录或文件(如:.bashrc)。即以默认方式查找时,不显示该目录或文件
在这里插入图片描述
树状目录结构:
在这里插入图片描述

系统启动必须:

/boot:存放开机启动Linux 时使用的内核文件,包括Linux核心文件以及开机选单与开机所需配置文件,包括连接文件以及镜像文件等等。 Linux kernel常用的档名为:vmlinuz,如果使用的是grub这个开机管理程序, 则还会存在/boot/grub/这个目录
/etc:系统主要的配置文件几乎都放置在这个目录内,例如人员的账号密码文件、 各种服务的启始档等等。更改目录下的文件可能会导致系统不能启动。这个目录下的各文件是可以让一般使用者查阅的, 但只有root能修改。比较重要的文件有: /etc/inittab, /etc/init.d/, /etc/modprobe.conf, /etc/X11/, /etc/fstab, /etc/sysconfig/ 等等
/lib:存放基本代码库library(比如c++库),/lib放置的则是在开机时会用到的函式库, 以及在/bin或/sbin底下的指令会呼叫的函式库而已。其作用类似于Windows里的DLL文件。几乎所有的应用程序都需要用到这些共享库。
/sys: 这是linux2.6内核的一个很大的变化。该目录下安装了2.6内核中新出现的一个文件系统 sysfs 。sysfs文件系统集成了下面3种文件系统的信息:针对进程信息的proc文件系统、针对设备的devfs文件系统以及针对伪终端的devpts文件系统。该文件系统是内核设备树的一个直观反映。当一个内核对象被创建的时候,对应的文件和目录也在内核对象子系统中

指令集合:

/bin:binaries(二进制文件) 存放着最常用的程序和指令,bin放置的是在单人维护模式下还能够被操作的指令。 在/bin底下的指令可以被root与一般账号所使用,主要有:cat, chmod, chown, date, mv, mkdir, cp, bash等等常用的指令。
/sbin:super binaries(超级用户的二进制文件)只有系统管理员能使用的程序和指令。非常多指令是用来设定系统环境的,这些指令只有root才能够利用来『设定』系统,其他用户最多只能用来『查询』而已。 放在/sbin底下的为开机过程中所需要的,里面包括了开机、修复、还原系统所需要的指令。 至于某些服务器软件程序,一般则放置到/usr/sbin/当中。至于本机自行安装的软件所产生的系统执行文件(system binary), 则放置到/usr/local/sbin/当中了。常见的指令包括:fdisk, fsck, ifconfig, init, mkfs等等

外部文件管理:

/dev : 任何装置与接口设备都是以文件的型态存在于这个目录当中的。 你只要透过存取这个目录底下的某个文件,就等于存取某个装置啰~ 比要重要的文件有/dev/null, /dev/zero, /dev/tty, /dev/lp*, /dev/hd*, /dev/sd*等等注意:在Linux中访问设备和访问文件的方式是相同的。
/media:类windows的其他设备,例如U盘、光驱等等,识别后linux会把设备放到这个目录下。
/mnt:早时候,这个目录的用途与/media相同,只是有了/media之后,这个目录就用来临时挂载别的文件的,我们可以将光驱挂载在/mnt/上,然后进入该目录就可以查看光驱里的内容了。

临时文件:

/run:是一个临时文件系统,存储系统启动以来的信息。当系统重启时,这个目录下的文件应该被删掉或清除。如果你的系统上有/var/run 目录,应该让它指向 run。
/lost+found:一般情况下为空的,系统非法关机后,这里就存放一些文件。
/tmp:temporary(临时)这个目录是用来存放一些临时文件, 这个目录是任何人都能够存取的,所以你需要定期的清理一下。当然,重要数据不可放置在此目录

账户:

/root:系统管理员的用户主目录即家目录。当进入单人维护模式而仅挂载根目录时, 该目录就能够拥有root的家目录,所以我们会希望root的家目录与根目录放置在同一个分割槽中。
/home:用户的主目录,这个目录下都是以用户的账号命名的,如上图中的 alice、bob 和 eve。其中~:代表目前这个用户的家目录,而~bob:则代表bob 的家目录

运行过程中要用:

/var:variable(变量)存放经常修改的数据,比如程序运行的日志文件(/var/log 目录下)。
/proc:管理内存空间!虚拟的目录,是系统内存的映射,我们可以直接访问这个目录来,获取系统信息。这个目录的内容不在硬盘上而是在内存里,我们也可以直接修改里面的某些文件来做修改。

扩展用的:

/opt:给第三方协力软件放置的目录,默认是空的,我们安装额外软件可以放在这个里面。
/srv:srv可以视为『service』的缩写,存放服务启动后需要提取的数据(不用服务器就是空),是一些网络服务启动之后,这些服务所需要取用的数据目录。 常见的服务例如WWW, FTP等等

因为根目录与开机有关,开机过程中仅有根目录会被挂载, 其他分割槽则是在开机完成之后才会持续的进行挂载的行为。因此根目录下与开机过程有关的目录, 就不能够与根目录放到不同的分割槽去!有底下这些:
/etc:配置文件
/bin:重要执行档
/dev:所需要的装置文件
/lib:执行档所需的函式库与核心所需的模块
/sbin:重要的系统执行文件
这五个目录千万不可与根目录分开在不同的分割槽!


/usr的内容

依据FHS的基本定义,/usr里面放置的数据属于可分享的与不可变动的(shareable, static), 是所有系统默认的软件(distribution发布者提供的软件)都会放置到/usr底下。usr是Unix Software Resource的缩写, 也就是『Unix操作系统软件资源』所放置的目录,而不是用户的数据。如果你知道如何透过网络进行分割槽的挂载(例如NFS服务器),那么/usr确实可以分享给局域网络内的其他主机来使用

一般来说,/usr的次目录建议有底下这些:

/usr/X11R6/	为X Window System重要数据所放置的目录,之所以取名为X11R6是因为最后的X版本为第11版,且该版的第6次释出之意。
/usr/bin/	绝大部分的用户可使用指令都放在这里!请注意到他与/bin的不同之处。(是否与开机过程有关)
/usr/include/	c/c++等程序语言的档头(header)与包含档(include)放置处,当我们以tarball方式 (*.tar.gz 的方式安装软件)安装某些数据时,会使用到里头的许多包含档喔!
/usr/lib/	包含各应用软件的函式库、目标文件(object file),以及不被一般使用者惯用的执行档或脚本(script)。 某些软件会提供一些特殊的指令来进行服务器的设定,这些指令也不会经常被系统管理员操作, 那就会被摆放到这个目录下啦。要注意的是,如果你使用的是X86_64的Linux系统, 那可能会有/usr/lib64/目录产生喔!
/usr/local/	系统管理员在本机自行安装自己下载的软件(非distribution默认提供者),建议安装到此目录, 这样会比较便于管理。举例来说,你的distribution提供的软件较旧,你想安装较新的软件但又不想移除旧版, 此时你可以将新版软件安装于/usr/local/目录下,可与原先的旧版软件有分别啦! 你可以自行到/usr/local去看看,该目录下也是具有bin, etc, include, lib...的次目录喔!
/usr/sbin/	非系统正常运作所需要的系统指令。最常见的就是某些网络服务器软件的服务指令(daemon)啰!
/usr/share/	放置共享文件的地方,在这个目录下放置的数据几乎是不分硬件架构均可读取的数据, 因为几乎都是文本文件嘛!在此目录下常见的还有这些次目录:
/usr/share/man:联机帮助文件
/usr/share/doc:软件杂项的文件说明
/usr/share/zoneinfo:与时区有关的时区文件
/usr/src/	内核源代码默认的放置目录,src有source的意思。至于核心原始码则建议放置到/usr/src/linux/目录下。

/var 的内容:

var就是在系统运作后才会渐渐占用硬盘容量的目录。 因为/var目录主要针对常态性变动的文件,包括缓存(cache)、登录档(log file)以及某些软件运作所产生的文件, 包括程序文件(lock file, run file),或者例如MySQL数据库的文件等等。
常见的次目录有:

/var/cache/	应用程序本身运作过程中会产生的一些暂存档;
/var/lib/	程序本身执行的过程中,需要使用到的数据文件放置的目录。在此目录下各自的软件应该要有各自的目录。 举例来说,MySQL的数据库放置到/var/lib/mysql/而rpm的数据库则放到/var/lib/rpm去!
/var/lock/	某些装置或者是文件资源一次只能被一个应用程序所使用,如果同时有两个程序使用该装置时, 就可能产生一些错误的状况,因此就得要将该装置上锁(lock),以确保该装置只会给单一软件所使用。 举例来说,刻录机正在刻录一块光盘,你想一下,会不会有两个人同时在使用一个刻录机烧片? 如果两个人同时刻录,那片子写入的是谁的数据?所以当第一个人在刻录时该刻录机就会被上锁, 第二个人就得要该装置被解除锁定(就是前一个人用完了)才能够继续使用啰。
/var/log/	重要到不行!这是登录文件放置的目录!里面比较重要的文件如/var/log/messages, /var/log/wtmp(记录登入者的信息)等。
/var/mail/	放置个人电子邮件信箱的目录,不过这个目录也被放置到/var/spool/mail/目录中! 通常这两个目录是互为链接文件啦!
/var/run/	某些程序或者是服务启动后,会将他们的PID放置在这个目录下喔! 至于PID的意义我们会在后续章节提到的。
/var/spool/	这个目录通常放置一些队列数据,所谓的『队列』就是排队等待其他程序使用的数据啦! 这些数据被使用后通常都会被删除。举例来说,系统收到新信会放置到/var/spool/mail/中, 但使用者收下该信件后该封信原则上就会被删除。信件如果暂时寄不出去会被放到/var/spool/mqueue/中, 等到被送出后就被删除。如果是工作排程数据(crontab),就会被放置到/var/spool/cron/目录中

注意点
/bin是系统的一些指令,普通用户和超级用户都能使用。bin为binary的简写主要放置一些系统的必备执行档例如:cat、cp、chmod df、dmesg、gzip、kill、ls、mkdir、more、mount、rm、su、tar等
/sbin一般是指系统管理指令,超级用户才能使用。主要放置一些系统管理的必备程式例如:cfdisk、dhcpcd、dump、e2fsck、fdisk、halt、ifconfig、ifup、 ifdown、init、insmod、lilo、lsmod、mke2fs、modprobe、quotacheck、reboot、rmmod、 runlevel、shutdown等
/usr/bin是后期安装的一些普通用户可以使用的软件运行指令。主要放置一些应用软体工具的必备执行档例如c++、g++、gcc、chdrv、diff、dig、du、eject、elm、free、gnome*、 gzip、htpasswd、kfm、ktop、last、less、locale、m4、make、man、mcopy、ncftp、 newaliases、nslookup passwd、quota、smb*、wget等
/usr/sbin 放置一些超级用户才能使用的软件运行指令。例如:dhcpd、httpd、imap、in.*d、inetd、lpd、named、netconfig、nmbd、samba、sendmail、squid、swap、tcpd、tcpdump等

Linux文件基本属性

查看文件的属性及文件所属的用户和组,常常使用ls -l 或者ll
[root@www /]# ls -l
总用量 20
drwxr-xr-x 7 intelcamera intelcamera 4096 11月 18 14:49 9950
-rw-r--r-- 1 intelcamera intelcamera 8980  9月 16 20:09 examples.desktop

其中的第一个字符代表这个文件是目录、文件或链接文件等等。

当为 d 则是目录;
当为 - 则是文件;
若是 l 则表示为链接文档(link file);
若是 b 则表示为装置文件里面的可供储存的接口设备(可随机存取装置);
若是 c 则表示为装置文件里面的串行端口设备,例如键盘、鼠标(一次性读取装置)。

接下来的字符里以三个为一组,且均为 rwx 的三个参数的组合。其中, r 代表可读(read)【4】、 w 代表可写(write)【2】、 x 代表可执行(execute)【1】。 要注意的是,这三个权限的位置不会改变,如果没有权限,就会出现减号 - 而已
在这里插入图片描述

Linux 文件属主和属组

对于文件来说,它都有一个特定的所有者,也就是对该文件具有所有权的用户。
同时,在Linux系统中,用户是按组分类的,一个用户属于一个或多个组。
文件所有者以外的用户又可以分为文件所有者的同组用户和其他用户。
因此,Linux系统按文件所有者、文件所有者同组用户和其他用户来规定了不同的文件访问权限。

通常使用以下命令来修改文件或目录的所属用户与权限:
· chgrp (change group) : 修改文件属组。
· chown (change ownerp) : 修改所属用户与组。
· chmod (change mode) : 修改用户的权限。

chgrp [-R] 属组名 文件名

chown [–R] 属主名 文件名
chown [-R] 属主名:属组名 文件名

chmod [-R] xyz 文件或目录

参数选项 -R:递归更改文件属组,就是在更改某个目录文件的属组时,如果加上-R的参数,那么该目录下的所有文件的属组都会更改。
例子1:进入 /root 目录(~)将install.log的拥有者改为bin这个账号:

[root@www ~] cd ~
[root@www ~]# chown bin install.log
[root@www ~]# ls -l
-rw-r--r--  1 bin  users 68495 Jun 25 08:53 install.log

例子2:将install.log的拥有者与群组改回为root:

[root@www ~]# chown root:root install.log
[root@www ~]# ls -l
-rw-r--r--  1 root root 68495 Jun 25 08:53 install.log

例子3:将 .bashrc 这个文件所有的权限都设定启用,那么命令如下:

[root@www ~]# ls -al .bashrc				//查看权限
-rw-r--r--  1 root root 395 Jul  4 11:45 .bashrc
[root@www ~]# chmod 777 .bashrc				//修改权限
[root@www ~]# ls -al .bashrc			
-rwxrwxrwx  1 root root 395 Jul  4 11:45 .bashrc

例子4:将文件权限设置为 -rwxr-xr–

[root@www ~]# ls -al test1    				// 查看 test1 默认权限
-rw-r--r-- 1 root root 0 Nov 15 10:32 test1
[root@www ~]# chmod u=rwx,g=rx,o=r  test1    // 修改 test1 权限
[root@www ~]# ls -al te
  • 0
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值