我刚刚购买了全球定位系统(GPS)导航设备,仅经过几次使用,我就迷上了。 从点A到点B现在很容易。 不再需要MapQuest。 不用再猜测哪个方向是东方了。 没有更多的维修站要求澄清。 我只是跳上车,指定目的地,然后按照语音提示进行操作。 为什么,GPS使我看起来像本地人,给Buckaroo Banzai格言赋予了新的含义:“无论走到哪里,都在那里。”
让我们沉迷于这个月的旅行中,漫步在UNIX®文件系统上。 从/ bin到/ var,有很多有趣的景点可以看到-有些人被踩踏而另一些则晦涩难懂-很快,您就会像当地人一样知道自己的出行方式。
UNIX计算机上的文件是按层次结构组织的。 层次结构的最上层是/-通常称为“斜杠”或“根目录”。
如果将工作目录更改为/并运行ls ,则将看到几个带有神秘名称的子目录,例如etc,bin,var,home和tmp。 尽管UNIX现在支持长文件名,但是这些顶级目录的大多数名字早在UNIX诞生已有30年的历史了。 同样,按照相同的长期惯例,/中包含的每个目录都有特殊用途:
/ bin只是包含应用程序和实用程序的许多目录之一。 但是,/ bin通常包含系统操作必不可少的实用程序。 因此,shell,文件处理命令(例如cp和chmod ,压缩和解压缩以及诊断位于/ bin中。/ sbin还包含对系统操作和维护至关重要的实用程序。 但是,在/ sbin中找到的程序只能由超级用户(因此,“ superuser-bin”或/ sbin)执行。
/ dev集成了系统上安装的所有硬件,包括终端和USB设备(以及物理连接到计算机的其他外围设备),伪终端(用于与X终端窗口交互)和硬盘驱动器,等等。 / etc (通常称为“ etsee”)专用于系统配置。 / etc目录包含系统守护程序,启动脚本,系统参数等的配置文件。 / home包含用户的主目录。 例如,如果您的登录名是joe,则目录/ home / joe充当您的个人文件存储库。 / lib是基本系统库的保险箱。 在现代UNIX中,系统库通常是共享的,这意味着这些库没有链接并包含在每个二进制文件中(至少会浪费空间),而是在需要时按需加载并由许多应用程序立即共享。 因此,随UNIX安装的核心应用程序和实用程序需要/ lib中的库才能运行,并且您至少需要少数几个库才能从源代码创建新的可执行文件。 这里的所有文件都是至关重要的,甚至损坏或删除一个文件(无论是有意还是无意)都可能使系统失效。 / mnt是“挂载”的缩写,是挂载硬盘驱动器分区和其他设备的标准位置。 如果要查看当前已安装和可访问的设备,只需运行mount命令。 / tmp或“临时”是系统范围的便笺本。 您的Web服务器可能将会话数据文件存储在此处,其他实用程序使用/ tmp中的空间来缓存中间结果。 / tmp中的文件被认为是一次性的。 确实,您的系统管理员可能会每天晚上删除所有早于某个到期时间的文件。 / usr是大量文件的保护伞。 最终用户应用程序-从编辑器,游戏和界面到系统功能-以及手册页库以及更多内容都在这里。 如果该文件有用但对系统操作不是必需的,则可能会在/ usr中找到它。 / var (“变量”的缩写)是文件的存储库,这些文件的大小通常会随时间增长。 邮箱,日志文件,打印机队列和数据库可以在/ var中找到。 将网站保存在/ var中也很常见,因为随着时间的流逝,网站趋于自然地收集数据。上面的目录名称是最常用的,尽管UNIX的某些类型略有不同。 (例如,在基于FreeBSD®的Mac OS X上,包含用户主目录的目录名为/ Users而不是/ home。)
实际上,名称,bin,lib和man在UNIX文化中是如此根深蒂固,以至于传统上都用相同的名称来标记机器上其他地方找到的具有相同目的的目录。 例如,如果您查看专家的主目录,则可能会找到bin和lib目录,分别存储个人应用程序,脚本和个人库。
有关UNIX命名约定的更多信息,请参见附录A:选择标准,任何标准部分。
模仿佳能,/ usr / local经常有etc,bin,lib和man。 从历史上看,/ usr / local已用于存储源自或与您的站点密切相关的应用程序和数据。 / usr / local / bin目录存储标准系统实用程序在本地添加的新程序和本地修改的版本。 例如,您的系统管理员可能会在/ usr / local / bin / perl中提供最新和最好的Perl版本,同时使/ usr / bin / perl保持不变,以供参考,因为其他核心实用程序可能会依赖它。 / usr / local / lib目录是对/ usr / local / bin的补充。
/ usr / local目录甚至可能是一个完全独立的分区(甚至是从网络连接存储[NAS]设备通过网络文件系统安装的分区),这使得系统还原和复活更加简单。 如果系统发生问题,管理员可以覆盖操作系统的文件,而不必担心破坏本地数据。
甚至程序包也反映了根目录。 考虑MySQL:如果使用选项--prefix=/usr/local/mysql,它将在/ usr / local中创建自己的根目录,名为/ usr / local / mysql,并创建子目录/ usr / local / mysql / bin, / usr / local / mysql / lib,依此类推:
$ ls -1 /usr/local/mysql bin/ configure* data/ docs/ include/ lib/ man/ ...另外,如果要在/ usr / local / bin,/ usr / local / lib和其余目录中安装MySQL的代码,请使用--prefix=/usr/local 。
因为这是25美分的游览,所以让我们绕过其他几个景点。
/ etc目录是查找配置文件的地方,该文件通常以后缀.conf结尾。 较大的软件包可能有其自己的子目录来收集该软件包的所有配置文件。 一个典型的例子是Apache。 特别是,Apache V2.2重新组织了其配置文件,使其具有更高的模块化和更少的整体性。
另一个新颖之处包括/etc/init.d,它容纳了系统启动时运行的许多启动脚本。 如果要干净地重新启动守护程序,请说在更改其配置后,在/etc/init.d中查找同义脚本。 例如,要重新启动Postfix邮件传输代理(MTA),可以运行:
$ /etc/init.d/postfix restart/etc/init.d还包含脚本,这些脚本可降至单用户模式,重新启动和关闭计算机以及禁用登录。
如前所述,/ var保留文件大小随时间增长和缩小的趋势。 像/一样,/ var分为多个子目录,每个子目录都有自己的方案:
在/ var / spool / mail中,您可以找到您和其他用户的传入邮件。 您的邮箱只是一个平面文件(连续的,未编制索引的文件)(除非系统管理员使用maildir格式)。 传入邮件将附加到文件末尾。 您丢弃的邮件将从文件中删除; 当您阅读一条新消息时,该消息的状态字段将被更改并重写。 您可以读写自己的邮箱,但是权限会阻止您访问其他用户的邮箱。 (建议您不要直接编辑邮箱。) / var / log维护系统日志文件套件或记录系统活动的那些文件。 日志跟踪从邮件流量到失败登录尝试的所有事件。 每个守护程序通常都有其自己的日志文件,这使得在服务失败时轻松查找问题。 由于可以揭示系统活动,因此此处的日志通常受到限制,并且仅对超级用户可用。如果您的系统提供集中式传真服务,则/ var / spool也将这些请求排队。
UNIX系统的核心手册页位于/ usr / man中。 手册页的扩展集合也可以在/ usr / local / man和软件包的man目录中找到,例如/ usr / local / mysql5 / man。
因为手册页可以在可执行文件的许多地方找到,所以该手册程序支持MANPATH环境变量,该变量与PATH的作用相同。 要在一个页面中搜索多个位置,请将MANPATH定义为一系列手册页目录:
MANPATH="/usr/man" MANPATH="/usr/local/man:$MANPATH" MANPATH="/usr/local/mysql/man:$MANPATH MANPATH="$HOME/man:$MANPATH" export MANPATH在这里, 首先搜索$ HOME / man(它在最左边或最前面),然后是/ usr / local / mysql / man,依此类推。 顺便说一下,上面的前四个命令可以简化为以下语句:
MANPATH="/usr/man:/usr/local/man:\ /usr/local/mysql/man:$HOME/man"但是,将添加项分开放置可以使您快速重新排序条目并添加新目录,就像简单地一样。 而且,如果您有很多路径,则编辑后者的MANPATH(并且通过扩展,称为PATH)变量将变得很乏味。
包含文件 (或头文件)定义了常量,宏以及操作系统或特定库中使用的其他结构。 您无需重新定义特定的结构,只需将头文件“包括”在代码中(一种简单的代码重用形式),并按照头文件的规范进行编码。 (为此类说明而预留了man部分2和3;例如,尝试使用man 2 signal 。)
类似于bin和lib, include是公用目录名称。 如果软件包具有开发工具包,并且已将其安装在其自己的根目录中,请在头文件的include子目录中查找。
或者,如果您已将软件包安装到公用的/ usr / local / {bin,lib,include}目录中,请在以该软件包命名的/ usr / local / include子目录中查找软件包的头文件。 这是将所有内容存储在公共池中的例外。 为什么? 头文件的名称不是唯一的,因此将所有内容都安装在一个位置会导致冲突,其中一个包会覆盖另一个头文件。
如果您从源代码构建应用程序(在以后的部分中将进行深入探讨),并且头文件位于非标准位置,则可能需要在编译器命令中添加-I选项。 例如,如果您的ImageMagick头文件位于/ opt / include / magick中,则将-I/opt/include/magick到编译器的开关中。
今天的UNIX之旅到此结束。 现在,您可以更轻松地导航UNIX的小巷和后街。 如果您确实迷路了,只需说“家,家,家”(不要被Betelgeuse欺骗)或输入cd 。 请记住,您还可以使用find和locate来查找大多数内容,包括可执行文件,库和包含文件。
女士们,先生们,下午好。 下次游览将在30天内结束。
虽然UNIX操作系统附带的软件在文件系统中有适当的位置(例如,存储在/ bin或/ lib中),但是在许多位置都可以找到本地添加的软件。 一些系统管理员将本地软件放置在/ usr / local中,而其他系统管理员则使用/ opt或“可选”,因为运行该系统不需要该软件。 此外,一些管理员将所有可执行文件转储到/ usr / local / bin或/ opt / bin中,将所有库转储到/ usr / local / lib或/ opt / lib中,依此类推。
另一种方法(我更喜欢一种范例)是为每个本地添加的软件包创建一个根目录,尤其是在软件包很大的情况下。 例如,我将MySQL V5安装到/usr/local/mysql5.0,将Apache V2.2安装到/usr/local/apache2.2。 每个软件包安装程序都会在软件包根目录内创建自己的bin,lib和man目录。
这种方法的缺点是每个最终用户必须向他或她的PATH环境变量添加许多bin目录。 尽管该要求并不是特别繁重,但是可以通过扩展系统范围的Shell启动文件中设置的默认PATH来缓解。 例如,Bash系统范围的启动脚本/ etc / profile可能包含:
PATH="/bin:/usr/bin:/usr/local/bin" PATH="$PATH:/usr/local/mysql5.0/bin" PATH="$PATH:/usr/local/perl6/bin" PATH="$PATH:/usr/local/Zend/bin" export PATH但是,将包装存储在其自己的“容器”中是非常有利的:
很明显,哪个软件包提供了特定的应用程序。 按照此分类系统,您可以使用which命令找到包的名称: $ which mysql /usr/local/mysql5.0/bin/mysql 您可以并行保留同一软件包的多个版本。例如,如果要提供Perl V5.6和Perl V5.8,则将前者安装到/usr/local/perl5.6,然后将后者安装到/usr/local/perl5.8。 每个用户都可以通过更改PATH变量来选择Perl版本。
您可以并行保留多个版本,但是通过使用符号链接可以默认保留为特定版本。 只需创建一个指向要提供的软件包版本的符号链接即可。例如,假设您提供了上述两个版本的Perl。 如果希望将Perl V5.8设置为默认值,请在/usr/local/perl5.8中创建一个符号墨水并将其命名为perl :
$ ls -1 /usr/local/perl* perl5.6 perl5.8 $ sudo ln -s /usr/local/perl5.8 \ /usr/local/perl $ ls -1 -F /usr/local/perl* perl5.6/ perl5.8/ perl@最终用户现在可以将/usr/local/perl/bin到他或她的PATH变量中,以运行perl命令。 如果最终需要或想要切换到Perl的更高或更低版本,则只需删除符号链接并重新创建它以指向其他目录即可。
符号链接对于诸如此类的维护任务非常重要。 您可以维护变体,重新路由路径并构建集合以方便访问。 例如,您可以使用指向其他软件包中的命令的链接来填充传统的/ usr / local / bin目录,如ln -s /usr/local/perl/bin/perl /usr/local/bin/perl 。 (是的,您可以创建一个遍历另一个符号链接的符号链接。)
翻译自: https://www.ibm.com/developerworks/aix/library/au-speakingunix11/index.html
相关资源:微信小程序源码-合集6.rar