6 ubuntu symlink apache-httpd phpmyadmin
我使用 Ubuntu 15.10,我对 Linux 非常陌生。在维基百科阅读什么是一般的符号链接,并在 Ubuntu Unix-bash 终端中执行符号链接创建命令后,我应该更好地理解我在创建(和“销毁”)时多次使用的符号链接的结构Ubuntu 学习环境。
每次安装 PHPmyadmin (PMA) 服务时,我都会运行一个简短的语法。如果不运行它,该服务就无法运行。根据我收集的信息,以下语法创建了一个符号链接,将 Apache 连接到包含 conf 方向的某个 PMA 文件。
这是我每次运行的语法:
cd /etc/apache2/conf-enabled/
sudo ln -s /etc/phpmyadmin/apache.conf phpmyadmin.conf
service apache2 restart
Run Code Online (Sandbox Code Playgroud)
我想更好地了解这里实际做了什么,例如:
为什么甚至需要 cd 导航?我们不能从根(计算机)文件夹中指定我们要处理哪些文件,仅此而已吗?
为什么 -s 在 ln 之后?
我在 ln 命令中导航到两个目录,但在其中任何一个目录中都找不到 phpmyadmin.conf - 那么,系统如何知道它在哪里(假设没有系统范围的搜索)。
符号链接实际上是一个由内核特别处理的文本文件,其内容是另一个文件/目录的路径。
您可以使用 读取符号链接文件的内容readlink
,如果您标准打开符号链接文件,系统将打开符号链接内容引用的文件/目录。
如果您熟悉 C/C++,那么在大多数上下文中,符号链接的行为有点像 C++ 引用或自动解引用指针(并非全部:例如,rm
或mv
直接在符号链接上工作,而不是在目标上工作)。区别在于真正的 C++ 引用绑定到内存地址,而符号链接绑定到文件系统地址。
符号链接的内容不必是有效的文件路径引用--> 那么您就有了一个悬空符号链接(如 danglig 指针或悬空引用)。
如果符号链接中的文件路径不是绝对路径(以 开头/
),则相对文件路径相对于符号链接的位置进行解析(在非符号链接上下文中,相对路径相对于 进行解析$PWD
)。
该-s
标志用于“创建s ymlinks”。ln
还可以创建硬链接。硬链接在另一个级别上运行,它更接近于文件系统的实现(因此,您不能跨不同的文件系统创建硬链接)。
Unix 文件系统分别存储文件名(/目录名)和文件内容(目录内容),名称只是指向其内容的自动解引用引用计数指针。硬链接为相同的内容创建另一个名称,同时增加引用计数。
$ echo 'the contents' > f1
$ ls -l f1
* 1 * #the 2nd column is the reference count
$ ln f1 f2 #create another name for the contents of f1
$ ls -l f1
* 2 * #the contents of f1 has two named references to it
$ rm f1 #the contents of f1 lives on (in f2) #
# because rm only removes the reference to the data block
#and this isn't the only reference
#(rm ivokes a system call literally named `unlink`)
Run Code Online (Sandbox Code Playgroud)
您不能创建目录硬链接,但.
和..
是为您隐式创建的目录硬链接。因此,一个目录的硬链接数反映了它有多少个子目录(每个子目录都带有一个..
到父目录的硬链接)。
echo 'file data' > fileName
ln fileName fileName2 #hardlink
ln -s "$PWD/fileName" absoluteSymlinkTofileName
ln -s fileName relativeSymlinkTofileName
Run Code Online (Sandbox Code Playgroud)
在同一个物理文件系统上,ln
为file data
(ln
将在文件系统中失败)创建另一个名称。您可以删除fileName
或fileName2
并且只要至少保留一个名称,就会继续file data
存在。
absoluteSymlikTofileName
是对fileName
名称的自动解引用引用。只要该路径解析为某些内容,符号链接就有效。如果删除目标,符号链接将悬垂。这是一个绝对符号链接,因此您可以将其移动到其他位置而不会改变其有效性。
relativeSymlinkToFileName
指fileName
在与relativeSymlinkToFileName
. 如果您将其移动到另一个目录,该目录也有一个名为 的文件(或目录)fileName
,那么它将指向该目录。
ln
如果未指定目录,该命令将在当前目录中创建符号链接。因此,phpmyadmin.conf
被放入/etc/apache2/conf-enabled/
。你也可以做到
ln -s /etc/phpmyadmin/apache.conf /etc/apache2/conf-enabled/phpmyadmin.conf
Run Code Online (Sandbox Code Playgroud)
这是几乎所有 Unix 命令的标准行为。
该-s
选项指定您正在创建软链接而不是硬链接。在这里阅读更多。
我不太明白这个问题(“系统怎么知道它在哪里?”)。phpmyadmin.conf
在当前目录中创建(在本例中为/etc/apache2/conf-enabled/
)。
归档时间: |
|
查看次数: |
10482 次 |
最近记录: |