当我在没有指定可执行文件的完整路径的情况下执行程序时,Bash 必须搜索其中的目录$PATH才能找到二进制文件,似乎 Bash 会记住某种缓存中的路径。例如,我安装了从源代码到 的 Subversion 版本/usr/local,然后svnsync help在 Bash 提示符下键入。Bash 找到了/usr/local/bin/svnsync“svnsync”的二进制文件并执行了它。然后当我删除 Subversion 中的安装/usr/local并重新运行时svnsync help,Bash 响应:
bash: /usr/local/bin/svnsync: No such file or directory
Run Code Online (Sandbox Code Playgroud)
但是,当我启动一个新的 Bash 实例时,它会找到并执行/usr/bin/svnsync.
如何清除可执行文件路径的缓存?
今天,一位 Unix 培训师告诉我一个故事,其中 root 密码被泄露给了学生,其中一个家伙从/usr/bin/chmod自己身上删除了执行权限。chmod在这种情况下如何恢复并使其再次可执行?假设从外部来源获取它或重新编译它不是一个更好的选择,是否有一些可以chmod自行恢复的智能黑客?
请注意,这发生在很久以前,我不是在寻找当前问题的解决方案,只是好奇 Unix 为我们提供了哪些解决此类问题的方法。
我了解如何在链接/编译时定义包含共享对象。但是,我仍然想知道可执行文件*.so在执行时如何查找共享对象(库)。
例如,我的应用程序a.out调用lib.so库中定义的函数。编译后,我移动lib.so到我的$HOME.
我怎么知道a.out去那里找呢?
我正在学习 C#,所以我做了一个 C# 小程序,上面写着Hello, World!,然后用以下命令编译mono-csc并运行它mono:
$ mono-csc Hello.cs
$ mono Hello.exe
Hello, World!
Run Code Online (Sandbox Code Playgroud)
我注意到当我TAB输入bash,Hello.exe被标记为可执行文件。事实上,它只通过一个加载文件名的 shell 运行!
Hello.exe是不是有一个有趣的文件扩展名的ELF文件:
$ readelf -a Hello.exe
readelf: Error: Not an ELF file - it has the wrong magic bytes at the start
$ xxd Hello.exe | head -n1
00000000: 4d5a 9000 0300 0000 0400 0000 ffff 0000 MZ..............
Run Code Online (Sandbox Code Playgroud)
MZ意味着它是 Microsoft Windows 静态链接的可执行文件。把它放到一个 Windows 盒子上,它就会(应该)运行。
我已经wine安装了,但是wine,是用于的Windows应用程序的兼容层,需时约5倍,只要运行 …
我想找出运行时二进制加载的动态库列表(及其完整路径)。我正在使用 CentOS 6.0。这该怎么做?
我试图了解 Linux 上特殊文件的概念。然而,/dev根据我的知识,当它的功能可以通过 C 中的几行代码实现时,在其中包含一个特殊文件似乎很愚蠢。
此外,您可以以几乎相同的方式使用它,即通过管道进入null而不是重定向到/dev/null. 将其作为文件是否有特定原因?使它成为一个文件不会导致许多其他问题,例如太多程序访问同一文件吗?
在今天之前,我已经在有限的范围内使用终端来移入和移出目录以及使用touch命令更改文件的日期。在 Mac 上安装了一个有趣的脚本后,我意识到了终端的全部范围,并且必须在之后使用chmod 755该文件使其可执行。
不过我想知道是什么/usr/local/bin。/usr/,我假设,是计算机的用户。不过,我不确定为什么/local/会在那里。它显然代表本地计算机,但由于它在计算机(或服务器)上,真的有必要吗?不会好吗/usr/bin?
什么是/bin?为什么这个区域通常用于在终端上安装脚本?
为什么我们./filename在linux中使用执行文件?
为什么不像其他命令一样输入它gcc,ls等等...
这可能是一个愚蠢的问题,但我仍然问它。如果我已经宣布了一个shebang
#!/bin/bash
Run Code Online (Sandbox Code Playgroud)
在开始时my_shell_script.sh,我是否总是必须使用 bash 调用此脚本
[my@comp]$bash my_shell_script.sh
Run Code Online (Sandbox Code Playgroud)
或者我可以使用例如
[my@comp]$sh my_shell_script.sh
Run Code Online (Sandbox Code Playgroud)
我的脚本使用shebang确定正在运行的shell?难道同样的事情发生与ksh壳呢?我正在使用 AIX。
我有一个 perforce 版本控制客户端 ( p4)的可执行文件。我不能把它放进去,/opt/local因为我没有 root 权限。是否有一个标准位置需要放置在它下面$HOME?
文件系统层次结构是否有一个约定,说明需要将本地可执行文件/二进制文件放入$HOME/bin?
另外,如果确实有约定,我是否必须明确包含$HOME/bin目录的路径或目录的任何位置bin?
fhs executable software-installation directory-structure not-root-user