Python测开28期-偕行-Linux文件目录结构

一、linux介绍

1、什么是linux

  • Linux 内核最初只是由芬兰人林纳斯·托瓦兹(Linus Torvalds)在赫尔辛基大学上学时出于个人爱好而编写的。
  • Linux 是一套免费使用和自由传播的类 Unix 操作系统。
  • Linux 能运行主要的 UNIX 工具软件、应用程序和网络协议。

2、linux发行版

  • Linux有上百种不同的发行版,Linux 的发行版说简单点就是将 Linux 内核与应用软件做一个打包
  • 目前市面上较知名的发行版有:Ubuntu、RedHat、CentOS、Debian、Fedora、SuSE、OpenSUSE、Arch Linux、SolusOS 等。
    image

3、linux系统文件目录结构

文件系统的是用来组织和排列文件存取的,所以她是可见的,在Linux中,我们可以通过ls等工具来查看其结构,在Linux系统中,我们见到的都是树形结构;比如操作系统安装在一个文件系统中,他表现为由/ 起始的树形结构。linux文件系统的最顶端是/,我们称/为Linux的root,也就是 Linux操作系统的文件系统。Linux的文件系统的入口就是/(根目录),所有的目录、文件、设备都在/之下,/就是Linux文件系统的组织者,也是最上级的领导者。


(1)根目录“/”与家目录“home”

  • 1、~ 代表是home目录,也就是家目录(用户个人文件目录), / 代表的是根目录(系统文件目录);

  • 2、用户登录后在家目录 ,可用pwd命令查看,普通用户为 /home/用户名,root用户为/

  • 3、使用cd ~切换到家目录,使用cd /切换到根目录;

  • 4、根目录是所有用户的都可以操作的,家目录用户才有权限操作(管理员可以分配权限);

  • 5、/home 用户主目录的基点,比如用户user的主目录就是/home/user;
    image

(2)根目录下各文件作用

目录 内容 FHS组织建议
/bin 二进制可执行命令。该目录下存放着普通用户的命令 系统有很多放置执行档的目录,但/bin比较特殊。因为/bin放置的是在单人维护模式下还能够被操作的指令。在/bin底下的指令可以被root与一般帐号所使用,主要有:cat,chmod(修改权限), chown, date, mv, mkdir, cp, bash等等常用的指令。
/boot 二进制可执行命令。该目录下存放着普通用户的命令 主要放置开机会使用到的档案,包括Linux核心档案以及开机选单与开机所需设定档等等。Linux kernel常用的档名为:vmlinuz ,如果使用的是grub这个开机管理程式,则还会存在/boot/grub/这个目录。
/dev 系统的设备文件,即设备的驱动程序 在Linux系统上,任何装置与周边设备都是以档案的型态存在于这个目录当中。 只要通过存取这个目录下的某个档案,就等于存取某个装置。比要重要的档案有/dev/null, /dev/zero, /dev/tty , /dev/lp*, / dev/hd*, /dev/sd*等等 ,类似于设备的驱动程序
/etc 系统所有的配置文件都在这个目录中 系统主要的设定档几乎都放置在这个目录内,例如人员的帐号密码档、各种服务的启始档等等。 一般来说,这个目录下的各档案属性是可以让一般使用者查阅的,但是只有root有权力修改。 FHS建议不要放置可执行档(binary)在这个目录中。 比较重要的档案有:/etc/inittab, /etc/init.d/, /etc/modprobe.conf, /etc/X11/, /etc/fstab, /etc/sysconfig/等等。 另外,其下重要的目录有:/etc/init.d/ :所有服务的预设启动script都是放在这里的,例如要启动或者关闭iptables的话: /etc/init.d/iptables start、/etc/init.d/ iptables stop;/etc/xinetd.d/ :这就是所谓的super daemon管理的各项服务的设定档目录。/etc/X11/ :与X Window有关的各种设定档都在这里,尤其是xorg.conf或XF86Config这两个X Server的设定档。
/home 用户主目录的基点 这是系统预设的使用者家目录(home directory)。 在你新增一个一般使用者帐号时,预设的使用者家目录都会规范到这里来。比较重要的是,家目录有两种代号:~ :代表当前使用者的家目录,而 ~guest:则代表用户名为guest的家目录。
/lib 存放着和系统运行相关的库文件 系统的函式库非常的多,而/lib放置的则是在开机时会用到的函式库,以及在/bin或/sbin底下的指令会呼叫的函式库而已 。 什么是函式库呢?妳可以将他想成是外挂,某些指令必须要有这些外挂才能够顺利完成程式的执行之意。 尤其重要的是/lib/modules/这个目录,因为该目录会放置核心相关的模组(驱动程式)。
/media 存放着可移除的设备,比如软盘,光盘 media是媒体的英文,顾名思义,这个/media底下放置的就是可移除的装置。 包括软碟、光碟、DVD等等装置都暂时挂载于此。 常见的档名有:/media/floppy, /media/cdrom等等。
/mnt 挂载目录,是系统管理员临时安装文件的系统安装点 如果妳想要暂时挂载某些额外的装置,一般建议妳可以放置到这个目录中。在古早时候,这个目录的用途与/media相同啦。 只是有了/media之后,这个目录就用来暂时挂载用了。
/opt (option : 自由选择)主要给源码安装软件时选择的安装目录位置 这个是给第三方协力软体放置的目录 。 什么是第三方协力软体啊?举例来说,KDE这个桌面管理系统是一个独立的计画,不过他可以安装到Linux系统中,因此KDE的软体就建议放置到此目录下了。 另外,如果妳想要自行安装额外的软体(非原本的distribution提供的),那么也能够将你的软体安装到这里来。 不过,以前的Linux系统中,我们还是习惯放置在/usr/local目录下。
/root 超级用户的目录 系统管理员(root)的家目录。 之所以放在这里,是因为如果进入单人维护模式而仅挂载根目录时,该目录就能够拥有root的家目录,所以我们会希望root的家目录与根目录放置在同一个分区中。
/sbin 系统的管理命令,这里存放的是系统管理员使用的程序 Linux有非常多指令是用来设定系统环境的,这些指令只有root才能够利用来设定系统,其他使用者最多只能用来查询而已。放在/sbin底下的为开机过程中所需要的,里面包括了开机、修复、还原系统所需要的指令。至于某些伺服器软体程式,一般则放置到/usr/sbin/当中。至于本机自行安装的软体所产生的系统执行档(system binary),则放置到/usr/local/sbin/当中了。常见的指令包括:fdisk, fsck, ifconfig, init, mkfs等等。
/srv 系统启动服务时可以访问的数据库目录 srv可以视为service的缩写,是一些网路服务启动之后,这些服务所需要取用的资料目录。 常见的服务例如WWW, FTP等等。 举例来说,WWW伺服器需要的网页资料就可以放置在/srv/www/里面。呵呵,看来平时我们编写的代码应该放到这里了。
/tmp 临时文件,重启后自动清空 这是让一般使用者或者是正在执行的程序暂时放置档案的地方。这个目录是任何人都能够存取的,所以你需要定期的清理一下。当然,重要资料不可放置在此目录啊。 因为FHS甚至建议在开机时,应该要将/tmp下的资料都删除。
/lost+found 这个目录平时是空的,当系统非正常关机而留下的“无家可归”的文件便会储存在这里 这个目录是使用标准的ext2/ext3档案系统格式才会产生的一个目录,目的在于当档案系统发生错误时,将一些遗失的片段放置到这个目录下。 这个目录通常会在分割槽的最顶层存在,例如你加装一个硬盘于/disk中,那在这个系统下就会自动产生一个这样的目录/disk/lost+found
/proc 存放着用户与内核的交互信息 这个目录本身是一个虚拟文件系统(virtual filesystem)喔。 他放置的资料都是在内存当中,例如系统核心、行程资讯(process)(是进程吗?)、周边装置的状态及网络状态等等。因为这个目录下的资料都是在记忆体(内存)当中,所以本身不占任何硬盘空间。比较重要的档案(目录)例如: /proc/cpuinfo, /proc/dma, /proc/interrupts, /proc/ioports, /proc/net/*等等。呵呵,是虚拟内存吗[guest]?
/sys 管理设备文件 这个目录其实跟/proc非常类似,也是一个虚拟的档案系统,主要也是记录与核心相关的资讯。 包括目前已载入的核心模组与核心侦测到的硬体装置资讯等等。 这个目录同样不占硬盘容量。
/data 用户用于存放日志等数据的目录
/misc 储存着一些特殊的字符的定义
/net 存放着和网络相关的一些文件
/usr 最大的目录,存放着应用程序和文件
/var 某些大文件的溢出区,比如各种服务的日志文件

(3)/proc进程目录下各目录及常用目录详情

image

常用目录及详情:

目录名 解析
cmdline 启动当前进程的完整命令,但僵尸进程目录中的此文件不包含任何信息
cmdline 启动当前进程的完整命令,但僵尸进程目录中的此文件不包含任何信息
environ 当前进程的环境变量列表,彼此间用空字符(NULL)隔开;变量用大写字母表示,其值用小写字母表示
exe 指向启动当前进程的可执行文件(完整路径)的符号链接,通过/proc/N/exe可以启动当前进程的一个拷贝
fd 这是个目录,包含当前进程打开的每一个文件的文件描述符(file descriptor),这些文件描述符是指向实际文件的一个符号链接
limits 当前进程所使用的每一个受限资源的软限制、硬限制和管理单元;此文件仅可由实际启动当前进程的UID用户读取(2.6.24以后的内核版本支持此功能)
maps 当前进程关联到的每个可执行文件和库文件在内存中的映射区域及其访问权限所组成的列表
mem 当前进程所占用的内存空间,由open、read和lseek等系统调用使用,不能被用户读取
root 指向当前进程运行根目录的符号链接;在Unix和Linux系统上,通常采用chroot命令使每个进程运行于独立的根目录
stat 当前进程的状态信息,包含一系统格式化后的数据列,可读性差,通常由ps命令使用
statm 当前进程占用内存的状态信息,通常以“页面”(page)表示
status 与stat所提供信息类似,但可读性较好,每行表示一个属性信息
task 目录文件,包含由当前进程所运行的每一个线程的相关信息,每个线程的相关信息文件均保存在一个由线程号(tid)命名的目录中,这类似于其内容类似于每个进程目录中的内容;(内核2.6版本以后支持此功能)

(4) /etc文件系统目录

/etc目录包含各种系统配置文件

目录名 解析
/etc/rc或/etc/rc.d或/etc/rc?.d 启动、或改变运行级时运行的脚本或脚本的目录。
/etc/passwd 用户数据库,其中的域给出了用户名、真实姓名、用户起始目录、加密口令和用户的其他信息。
/etc/shadow 在安装了影子( s h a d o w )口令软件的系统上的影子口令文件。影子口令文件将/ e t c / p a s s wd文件中的加密口令移动到/ e t c / s h a d o w中,而后者只对超级用户( r o o t)可读。这使破译口令更困难,以此增加系统的安全性。
/etc/group 类似/etc/passwd ,但说明的不是用户信息而是组的信息。包括组的各种数据。
/etc/fdprm 软盘参数表,用以说明不同的软盘格式。可用setfdprm 进行设置。更多的信息见s e t f d p r m的帮助页。
/etc/fstab 指定启动时需要自动安装的文件系统列表。也包括用swapon -a启用的s w a p区的信息。
/etc/inittab init 的配置文件。
/etc/issue 包括用户在登录提示符前的输出信息。通常包括系统的一段短说明或欢迎信息。具体内容由系统管理员确定。
/etc/magic “f i l e”的配置文件。包含不同文件格式的说明,“f i l e”基于它猜测文件类型。
/etc/motd m o t d是message of the day的缩写,用户成功登录后自动输出。内容由系统管理员确定。常用于通告信息,如计划关机时间的警告等。
/etc/mtab 当前安装的文件系统列表。由脚本( s c r i t p )初始化,并由mount 命令自动更新。当需要一个当前安装的文件系统的列表时使用(例如df 命令)。
/etc/login.defs login命令的配置文件。
/etc/printcap 类似/etc/termcap ,但针对打印机。语法不同。
/etc/profile 、/ etc /csh.login、/etc/csh.cshrc 登录或启动时b o u r n e或c shells执行的文件。这允许系统管理员为所有用户建立全局缺省环境。
/etc/securetty 确认安全终端,即哪个终端允许超级用户( r o o t )登录。一般只列出虚拟控制台,这样就不可能(至少很困难)通过调制解调器( m o d e m )或网络闯入系统并得到超级用户特权。
/etc/shells 列出可以使用的shell。chsh命令允许用户在本文件指定范围内改变登录的shell。提供一台机器f t p服务的服务进程ftpd 检查用户shell是否列在/etc/shells 文件中,如果不是,将不允许该用户登录。
/etc/termcap 终端性能数据库。说明不同的终端用什么“转义序列”控制。写程序时不直接输出转义序列(这样只能工作于特定品牌的终端),而是从/etc/termcap中查找要做的工作的正确序列。这样,多数的程序可以在多数终端上运行。

(5) /usr目录

/usr不是user的缩写,其实usr是Unix Software Resource的缩写, 也就是Unix操作系统软件资源所放置的目录,而不是用户的数据啦。这点要注意。 FHS建议所有软件开发者,应该将他们的数据合理的分别放置到这个目录下的次目录,而不要自行建立该软件自己独立的目录。

因为是所有系统默认的软件(distribution发布者提供的软件)都会放置到/usr底下,因此这个目录有点类似Windows 系统的C:\Windows\ + C:\Program files\这两个目录的综合体,系统刚安装完毕时,这个目录会占用最多的硬盘容量。
image

目录 解析
/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/目录下。

(6) /var目录

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

image

目录 解析
/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放置在这个目录下
/var/spool/ 这个目录通常放置一些队列数据,所谓的“队列”就是排队等待其他程序使用的数据。 这些数据被使用后通常都会被删除。举例来说,系统收到新信会放置到/var/spool/mail/中, 但使用者收下该信件后该封信原则上就会被删除。信件如果暂时寄不出去会被放到/var/spool/mqueue/中, 等到被送出后就被删除。如果是工作排程数据(crontab),就会被放置到/var/spool/cron/目录中。

4、linux中配置文件

(1) /etc/profile

  • 该配置文件中存储的是系统环境变量,它是针对所有的用户生效,此文件应用于所有用户每次登录系统时的环境变量定义。每次用户登录的时候,都会加载这个文件。

  • 可以直接进入到/etc/profile文件下修改环境变量,这样是对环境变量做永久修改,但是修改之后需要重新加载一下该文件(source /etc/profile)。

image

(2) HOME/.bash_profile

该文件配置的环境变量是只针对特定用户生效,$HOME为用户的家目录。当这个用户登录时,首先加载/etc/profile文件中的定义,再加载$HOME/.bash_profile文件中的定义。

image

(3) /etc/bashrc

设置系统bash shell相关的配置,注意它里面配置了PS1环境变量,即命令提示符;
可以在/etc/bashrc中永久修改命令提示符,如果想暂时修改可以在命令行中直接对PS1赋值就可以。
image

image

(4) ~/.bashrc

是对特定用户的bash shell进行的配置文件

(5) 网络环境配置

  • /etc/sysconfig/network-scripts/ifcfg-ens33

  • 此路径是针对windows使用VMWare安装虚拟机,默认是使用ens33网卡,而对于Mac使用Parallels Desktop安装的虚拟机使用的是eth0网卡,配置文件为:/etc/sysconfig/network-scripts/ifcfg-eth0(可以用ip addr或者ifconfig命令查看,不同的版本使用命令不同)

(6) /etc/hosts IP地址与主机映射配置文件

该文件存储的是ip地址与主机名映射关系的配置文件

(7) 关于用户与用户组的配置文件

/ect/passwd:该配置文件包含了用户的信息。

/etc/shadow :存储了用户密码的相关信息

/etc/group:存储着组的相关信息