零、引言伊甸园中有两棵树,一棵是生命树,另一棵是智慧树(知识书)。Linux系统的文件树目录,无疑是人类历史上结满最多果子,最多智慧的树。这是一棵神奇的树,根Root植于天上,枝叶Branch散于地下,一棵倒置的树。 一、文件目录树概述我们先查看根目录下的24个子目录,进行初步筛选和分析。 $ sudo du -sh /* 2> /dev/null |sort -hr |nl 1 77G /home 2 11G /usr 3 3.3G /var 4 3.3G /root 5 1.2G /opt 6 563M /snap 7 202M /boot 8 12M /etc 9 1.5M /run 10 208K /tmp 11 16K /lost+found 12 8.0K /media 13 8.0K /dev 14 4.0K /srv 15 4.0K /mnt 16 4.0K /cdrom 17 0 /sys 18 0 /sbin 19 0 /proc 20 0 /libx32 21 0 /lib64 22 0 /lib32 23 0 /lib 24 0 /bin 通过观察,我们合并同类项,并用排除法做初步筛选处理。
经过初步处理,我们将4个lib目录合并同类项成一个,排除掉另外三个目录;从24个目录中减去6个目录,剩下18个需要我们记住并认真研读。
按照Linux的上电启动顺序,对上述18个目录作如下分类: 五类18个目录 分类的简要逻辑: 第一类,Linux从boot目录启动之后便开始boom宇宙大爆炸,所有生成的进程保存在/proc/目录下,而系统进程的变量数据写入/run/,最后系统的手伸向了外接设备,相关信息在/sys目录; 第二类动态程序是第一类中的活的进程的出处,按照权限和优先级分别为:sbin,bin,lib,opt; 第三类是第二类的后勤保障部队,设置运行程序的参数和监控其运行状态; 第四类静态文件与第二类的动态程序相呼应; 第五类设备是Linux系统触手的最末端。 下面我们将逐一详尽阐述: 第一类:Boot启动计算机的程序第一类囊括四个子目录/boot, /proc, /run, /sys 1.0 /boot/ 我们在前文详细阐述了BIOS/MBR模式启动过程,第一股电流流遍主板之后首先到达BIOS所在的芯片,BIOS硬盘自检完毕后将权限交给Grub,再由Grub加载linux内核。 Linux中一切皆为文件,上述启动过程并非只是想象的抽象,它们都有肉身的实体文件。 $ tree -L 1 -s -h /boot/boot├── [230K] config-5.3.0-42-generic├── [4.0K] efi├── [4.0K] grub├── [ 27] initrd.img -> initrd.img-5.3.0-42-generic├── [ 77M] initrd.img-5.3.0-42-generic├── [178K] memtest86+.bin├── [4.5M] System.map-5.3.0-42-generic├── [ 24] vmlinuz -> vmlinuz-5.3.0-42-generic├── [ 11M] vmlinuz-5.3.0-42-generic 1.1 /boot/efi 上图中有文件 efi,可以将其简单理解为 BIOS 的升级版,全称为 Extensible Firmware Interface;深入查看其结构:
1.2 /boot/grub $ sudo tree -L 1 -s -h /boot/grub/boot/grub├── [4.0K] fonts├── [ 712] gfxblacklist.txt├── [9.6K] grub.cfg├── [1.0K] grubenv├── [2.3M] unicode.pf2└── [ 12K] x86_64-efi 1.3 /boot/vmlinuz 加载的内核也是在/boot/目录下
这个只有11M的文件就是如雷贯耳的Linux内核,操作系统最核心的部分竟然只有区区11M,忍不住要高声赞美。 我们可以double-check Linux内核的版本: $ uname -r5.3.0-42-generic /boot小结: Linux的启动过程的三个阶段: BIOS自检 —> Grub引导程序 —> 加载内核, 都在/boot/目录之下。而启动之后的过程犹如宇宙大爆炸。 2./proc/ proc是一个虚拟的神奇目录,它读取内存的数据。换言之,在Linux系统中,不仅磁盘,就算是内存,我们都可以伸手触摸到。 计算机boot起来,从init这个原点出发,开启了宇宙大爆炸的进程。子目录/proc/ 记录了爆炸过程中生成的所有星系的实时数据与状态。 每个进程都有一个独一无二的,以进程的ID命名的子目录。 以我当前正在使用的的进程Emacs编辑器为例:
该进程id为2750,我们可以从/proc目录中一睹其真容: /proc/2750/cwd -> /home/spiritme 为指向当前工作目录 /proc/2750/exe -> /usr/bin/emacs-gtk 是指向emacs程序的软连接 /proc/2750/task 保存当前进程中所每一个现成的相关信息。 $ ls -l /proc/2750/tasktotal 0dr-xr-xr-x 7 spiritme spiritme 0 Jun 10 18:23 2750dr-xr-xr-x 7 spiritme spiritme 0 Jun 10 18:23 2760dr-xr-xr-x 7 spiritme spiritme 0 Jun 10 18:23 2766dr-xr-xr-x 7 spiritme spiritme 0 Jun 10 18:23 2773dr-xr-xr-x 7 spiritme spiritme 0 Jun 10 18:23 2774dr-xr-xr-x 7 spiritme spiritme 0 Jun 10 18:41 4299dr-xr-xr-x 7 spiritme spiritme 0 Jun 10 18:41 4300dr-xr-xr-x 7 spiritme spiritme 0 Jun 10 18:23 7764 当我们查看当下程序的树状依赖关系的时候,pstree正是从/proc/目录读取数据。
结果中我们看到了emacs所运行的所有的线程的信息,就是从/proc/2750/task中读取的。 另外我们注意第一行 systemd,1 splash,从 systemd 这个一号程序 开始爆炸向外飞溅(splash)。 进程的信息之外,/proc/ 目录下还有其他有意思的内容: $ ls /proc |grep infobuddyinfocpuinfomeminfopagetypeinfoslabinfovmallocinfozoneinfo 从中,我们可查看cpu信息和内存信息:
3./run/ /run 一个临时文件系统,存储系统启动以来,系统进程的变量数据,比如文件锁、进程ID或者套接字等等。既然是临时文件,系统重启之后,所有数据都会删除。 查看守护进程mysqld的信息: $ ls -l /run/mysqldtotal 8srwxrwxrwx 1 mysql mysql 0 Jun 10 14:44 mysqld.sock-rw------- 1 mysql mysql 5 Jun 10 14:44 mysqld.sock.locksrwxrwxrwx 1 mysql mysql 0 Jun 10 14:44 mysqlx.sock-rw------- 1 mysql mysql 6 Jun 10 14:44 mysqlx.sock.lock 预告一句第三类目录下的/var/run是指向该目录的软连接。 4./sys/ /sys/ 与 /proc/ 相同,是一个虚拟目录,包含连接到计算机的设备,驱动,以及某些内核功能。
第一类小结 计算机从 /boot 目录的 efi,grub,kernel 按顺序启动;启动后从/proc目录记录生成的程序的实时运行状态数据,而系统程序的变量数据存放在 /run中,此时Linux开始向外伸出手,通过驱动管理外部设备的数据写入 /sys目录。 第二类:动态的程序 Dynamic Procedures计算机从/boot目录启动之后,/boot/proc记录了所有运行程序的状态与信息,那么程序是从哪里来的呢?他们主要来自于四个目录,分别是/sbin, /bin, /lib,/ lib和/opt 先用Tree命令查看: $ tree -L 1 / |grep -e 'lib' -e 'bin'├── bin -> usr/bin├── lib -> usr/lib├── lib32 -> usr/lib32├── lib64 -> usr/lib64├── libx32 -> usr/libx32├── sbin -> usr/sbin 观察输出结果,很容易发现根目录下的程序文件都是指向 /usr/ 的软连接 因此这一类中包括五大目录,分别为 /usr,/usr/sbin, /usr/bin, /usr/lib 和 /opt。 1./sbin --> /usr/sbin sbin 顾名思义 superuser-binary。目录下的程序必须使用 sudo 获取 root 权限才能使用。目录下有磁盘格式化(mkfs)、磁盘分区(fdisk)和网络配置(ifconfig)等命令。 如果使用不当,会造成难以挽回的致命故障。 尤为关键的是,内核文件加载以后,系统开始运行的第一个程序(一号程序)就在该目录下,即 /sbin/init。
我们看到,如今绝大多数Linux版本的一号程序是 systemd。 2./bin --> /usr/bin /bin/ 目录是最基础也是我们最熟悉的目录。Gnu/Coreutils和linux-utils的程序大部分都在这里。 $ tree -h /bin/ |grep -e mv$ -e rm$ -e touch -e echo -e find$ -e ^du -e tree$├── [10.0K] colrm├── [ 38K] echo├── [309K] find├── [ 21] frm -> /etc/alternatives/frm├── [ 34K] ipcrm├── [ 42K] ippfind├── [ 14K] kcm-touchpad-list-devices├── [ 10K] lessecho├── [ 14K] lprm├── [ 30K] mkzftree├── [146K] mv├── [ 7] pgmnorm -> pnmnorm├── [9.9K] pnmnorm├── [ 7] ppmnorm -> pnmnorm├── [ 31K] pstree├── [ 6] pstree.x11 -> pstree├── [ 70K] rm├── [ 46K] setterm├── [ 18K] smbtree├── [ 38K] testparm├── [ 98K] touch├── [ 14K] transform├── [ 84K] tree /bin 目录下的程序是全球开源项目的起点,即Richard Stallman开创的GNU项目。 3./lib -->/usr/lib lib即libraries,目录中存储的是/bin和/sbin中二进制文件(应用程序)需要的库文件。他们之间是一一对应的关系。
/4.opt/ opt即optional pacakages。用户自己安装的程序在该目录下。 比如我安装的百度网盘和google-chrome浏览器 $ tree -h /opt |grep -e google -e baidu├── [4.0K] baidunetdisk│ ├── [110M] baidunetdisk├── [4.0K] google│ │ └── [ 15K] google-chrome│ ├── [1.8K] google-chrome 5./usr/include 最后介绍一个不直接在根目录下,但却极为重要的目录 /usr/include。C/C++头文件都在这里。
小结 根目录下的动态程序仅仅是软连接,实际指向的是/usr目录。从重要性和权限的视角,我们依次介绍了 /sbin /bin 以及二者的支持库 /lib,接着介绍了存放第三方软件的 /opt目录,最后以 /usr/include这个存放C/C++头文件的目录收尾。 总计有 /usr /sbin /bin /lib /opt 五个根子目录外加/usr/include。 第三类:程序调参与实时数据第三类目录是第二类动态程序目录的后勤保障部队。程序的运行不能如脱缰野马,也不能如断线的风筝,自顾自的运行,不受控制。就如维护一架机器的运转,我们需要时时调整参数,常常查看其运行状态和故障报告 。 该类有两个子目录:/etc和/var 1./etc/ etc 这三个字母代表的原初含义是 'et cetera',真让人看得一头雾水。好在当今,我们可以将其简单的理解为 'edit to config' 的缩写。换言之,我们在此目录下编辑和修改配置。 操作系统和应用程序的配置文件通常都统一存储在此处。 比如最著名的ssh的配置,数据库的配置,bash的配置,cron的配置,X11的配置等等 $ tree -h -L 1 /etc |grep -e ssh -e sql -e bash -e cron -e init -e X11 -e systemd├── [ 401] anacrontab├── [2.3K] bash.bashrc├── [ 45] bash_completion├── [4.0K] bash_completion.d├── [4.0K] cron.d├── [4.0K] cron.daily├── [4.0K] cron.hourly├── [4.0K] cron.monthly├── [1.0K] crontab├── [4.0K] cron.weekly├── [4.0K] cryptsetup-initramfs├── [4.0K] init├── [4.0K] init.d├── [4.0K] initramfs-tools├── [4.0K] mysql├── [4.0K] postgresql├── [4.0K] postgresql-common├── [ 39] resolv.conf -> ../run/systemd/resolve/stub-resolv.conf├── [4.0K] ssh├── [4.0K] systemd├── [4.0K] X11 我们扫一眼ssh的目录结构:
再次强调/etc 这三个字母是 edit to config 的缩写。 2./var/ 从/etc目录,我们调整机器的运行参数;而从 /var/ 目录我们实时掌握机器的运行状态报告。也就是说,此处存放程序的数据和日志。 $ tree -L 1 -h --sort=size /var/var├── [4.0K] backups├── [4.0K] cache├── [4.0K] crash├── [4.0K] lib├── [4.0K] local├── [4.0K] log├── [4.0K] mail├── [4.0K] metrics├── [4.0K] opt├── [4.0K] snap├── [4.0K] spool├── [4.0K] tmp├── [ 9] lock -> /run/lock└── [ 4] run -> /run 上图中的最后一行,我们看到 run 指向了 /run 目录,程序的运行数据在逻辑上归类到此处。同时也看到了log,mail等记录运行状态的日志文件。 详细查看log的目录结构
当我们dmesg查看内核运行状况的时候, dmesg -H 就是从 kern.log 读取日志
/var/ 将会是我们日后工作打交道最多的目录。有种说法,程序员读log水平最能衡量其编程的水平。 小结 第三类中的两个目录 /etc/ 构建程序的运行环境,调整参数和配置;/var/ 监控程序的实时运行状态。 第四类:静态文件 Static Files该分类与第二类动态程序遥相呼应,包含/root, /home, /tmp, /srv四个子目录。 1./root /root为管理员的主目录,即root用户的Home目录。 $ sudo ls -al /roottotal 44drwx------ 7 root root 4096 Jan 29 08:16 .drwxr-xr-x 20 root root 4096 Nov 22 2019 ..drwxr-xr-x 26 root root 4096 Oct 20 2019 anaconda3-rw------- 1 root root 24 Jan 23 06:12 .bash_history-rw-r--r-- 1 root root 3557 Oct 20 2019 .bashrcdrwxr-xr-x 5 root root 4096 Jan 29 08:22 .cachedrwxr-xr-x 2 root root 4096 Oct 20 2019 .condadrwx------ 4 root root 4096 May 10 12:24 .configdrwx------ 3 root root 4096 Nov 13 2019 .local-rw------- 1 root root 842 Dec 4 2019 .mysql_history-rw-r--r-- 1 root root 148 Aug 28 2019 .profile 2./home /home 为用户的主目录,linux是多用户操作系统,因此每个用户都对应一个以其账户名命名的主目录。本目录我们最为熟知,不再赘述。 3./tmp /tmp/ 目录用存储临时文件。这些文件关机重启后会自动删除。 比如当我们在ipython的交互界面中,键入%edit调出编辑器,就会自动生成一个python临时文件。 4./srv /srv 即service,该目录存放一些服务器启动之后需要提取的数据。当linux作为服务器时,网站的HTML文件存放在 /srv/http(或 /srv/www);运行 FTP 服务器,相关文件放在 /srv/ftp。 小结 与第二类的动态程序相呼应,第四类的四个目录 /root,/home,/tmp,srv 归类为静态文件,用作存储数据与资料。 第五类:设备 DeviceDevice分类包含dev, media, mnt三个子目录。 1&2 /media 和 /mnt /media 目录下为系统自动识别挂载的设备(比如优盘或者外接硬盘等),与之相对应的是 /mnt 目录下是用户手动挂载设备到该目录下面,作为临时挂载点。 当然这只是我们应当遵循的惯例。 3./dev/ dev即 device。这是一个神奇的目录,存放的是外接设备。在linux中,一切都是文件,因此访问文件的方式与访问设备的方式是相同的。 可以看到外接磁盘
可以看到总线和CPU $ ls -lh |grep -e bus -e cpudrwxr-xr-x 3 root root 60 Jun 10 05:21 busdrwxr-xr-x 2 root root 60 Jun 10 05:21 cpucrw------- 1 root root 10, 59 Jun 10 05:22 cpu_dma_latency 可以看到系统的文件I/O接口
还可以看到终端(Terminal)等 $ ls -l |grep tty | headcrw--w---- 1 root tty 5, 1 Jun 10 05:22 consolecrw-rw-rw- 1 root tty 5, 2 Jun 10 11:27 ptmxcrw-rw-rw- 1 root tty 5, 0 Jun 10 05:22 ttycrw--w---- 1 root tty 4, 0 Jun 10 05:22 tty0crw--w---- 1 root tty 4, 1 Jun 10 05:22 tty1crw--w---- 1 root tty 4, 10 Jun 10 05:22 tty10crw--w---- 1 root tty 4, 11 Jun 10 05:22 tty11crw--w---- 1 root tty 4, 12 Jun 10 05:22 tty12crw--w---- 1 root tty 4, 13 Jun 10 05:22 tty13crw--w---- 1 root tty 4, 14 Jun 10 05:22 tty14 同时,dev还有一些有意思的目录,比如 /dev/null /dev/random 等
收尾总结本文的写作初衷一方面简要介绍Linux的树状目录结构,同时也颇具野心,希望你读罢此文,就能永久性记住Linux文件系统的一级目录的全部18个文件,不必再读第二遍。 我们按照Linux系统启动的顺序,分18个子目录为五类。 第一类,Linux从boot下启动读取EFI, Grub并加载内核,之后便开始boom宇宙大爆炸,所有生成的进程保存在/proc/目录下,而系统进程的变量数据写入/run/,最后系统的手伸向了外接设备,相关信息在/sys目录; 第二类动态程序是第一类中的活的进程的家乡,按照权限和优先级分别为:sbin,bin,lib,opt; 第三类是第二类的后勤保障部队,/etc 调整运行程序的参数和/var监控其运行状态; 第四类静态文件与第二类的动态程序相呼应; 第五类设备是Linux系统触手的最末端。 总结表格如下: 今日分享防火墙的技术简介 一、为什么需要防火墙?互联网在加速全球信息化进程的同时,也对世界范围内的信息安全提出了严峻的挑战。互联网的开放性与自由性给人类获取与发布信息带来了巨大便利,可这同时也是互联网信息易被污染、入侵与破坏的主要原因,这些损害主要来自于以下多个方面: ❶ 互联网信任所有的接入主机 互联网的开放性允许全球任何一台网络设备访问互联网而不会去检测该设备的可靠性,也就是说如果接入互联网的所有主机中存在一台安全性、可靠性薄弱的设备,只要攻破这台主机,那么任何有危害的数据或病毒都可以通过该主机进入互联网,殃及更多的互联网设备,可以给全球企业和个人带来无法估量的损失,造成不可预料的灾难。 ❷ 不完善的各种协议服务 当今互联网中使用的所有服务,如Telnet服务、DNS服务、FTP服务、Web服务、ActiveX等都是存在安全漏洞的,我们经常为计算机打的补丁就包含修复这些服务的功能。这些服务的任何漏洞都是可以成为互联网主机被攻击、破坏的突破口! ❸ TCP/IP协议的安全隐患 TCP/IP协议是Internet中任意两台主机进行通信时必须遵循的国际通用信息规范,但由于TCP/IP协议是完全公开的,并不是一套安全性完善的信息规则,进而成为了不法分子实施网络攻击的重点目标之一。TCP/IP协议的安全性问题主要有以下几点:
互联网本身就有漏洞 由于所有的应用层计算机程序都是通过TCP连接进行数据传输的,只要TCP的安全漏洞被利用,攻击者直接可以远程操控目标主机,达到污染/盗取数据,截获密码、破坏计算机等目的,所以TCP/IP协议并不能保证网络的绝对安全。 在遇到上述这些问题时,追查根源是非常困难的,因为互联网信任接入的每一台设备,该设备可以来自任何可接入因特网的地方,而且可以使用任何一种服务的漏洞或者TCP/IP协议的漏洞。 难觅攻击源主机 既然如此,想要通过源头来解决目标主机被破坏的问题几乎没有可能,因为要防止所有类型的互联网攻击其工作量是做不到的,但反过来,只控制进入目标主机的互联网数据是可行的,这就要求有一种网络安全解决方案,能够对安全网络环境与不安全网络环境之间的数据访问进行控制,而要达到此目的,最基本的方案就是防火墙技术! 二、防火墙的功能——是防火吗?防火墙一词与一汽车部件同名,在汽车中防火墙的功能是将乘客与发动机引擎进行隔离,防止汽车引擎着火波及乘客。除汽车防火墙外,现实建筑物中也有防火墙的概念,在建筑领域防火墙的作用是阻隔火源,阻止火情蔓延。 由上述内容可以断定防火墙的功能的确就是防火,只不过在计算机领域,防火墙防的是另一种“火”——互联网上的所有不安全因素,阻断的是这种“火”在企业、机构或组织内部网络中的蔓延! 计算机防火墙也是“防火” 防火墙作为一套网络安全管理机制,可以将需要保护的网络与开放性的互联网或者其他不可信任的网络环境进行隔离,使得被保护的网络成为完全可控的、可信任的安全网络,这就是防火墙的主要功能! 三、防火墙的真面目——真的是墙吗?我们已经介绍了引入防火墙的原因:为了解决前文中提到的多种网络安全漏洞!那么,防火墙的真面目到底是什么样子呢?它真的是一堵墙吗?防火墙具体是怎么实现的呢?本节为您揭晓! 揭开防火墙的真面目
从定义来看,防火墙是一个可以控制网络数据进出内外网的“东西”,不仅能够检查网络数据,而且具有保障内网不受外部不安全因素破坏的能力,所以防火墙在功能上,是一个集隔离、审查于一体的器件;在实现上,防火墙是由一组位于特殊网络位置上的硬件设备(路由器、主机等)组成的主机或路由器系统。 防火墙=特定功能的主机/路由器 四、理想的防火墙结构在介绍防火墙结构之前,我们首先要清楚三个概念:
★ 理想的防火墙结构如下: 理想防火墙结构 根据上图可以看出,理想型防火墙将一个主机的多种服务功能(WWW/FTP/MAIL等)分散至多个单独的从主机进行分开管理。在理想型防火墙中一共有三道安全防线,第一道防线就是过滤路由器,能够进行IP分组数据包的过滤;第二道防线就是分散在边界网络中的单服务主机(图中为代理服务器),由于只提供一种服务,一方面使得边界网络中的主机更易于配置,另一方面增加了内网被攻破的难度;第三道防线就是内部路由器,内网最后的安全防护手段。 其实,当今的商用防火墙已经将上述功能全部集成为单件产品,只需要进行配置就能够实现上述理想结构中的相似功能,如华为的一款防火墙产品: 华为的一款防火墙产品 五、如何使用window防火墙阻断软件联网?——几步设置即可我们在使用计算机进行学习、工作的过程中经常会遇到这样一个问题:因各种原因想要禁止某个软件联网,却不知怎么办:
遇到上述问题时,我们就可以使用window系统自带的防火墙来禁止这些软件联网进而避免各种问题的发生。具体操作我们直接通过截图的形式为读者展示: window防火墙禁止软件联网流程 总结本文通过通俗易懂的语言结合图文深入浅出的对计算机术语“防火墙”进行了详细的说明与介绍。 |
|
来自: imnobody2001 > 《Linux》