我经常在 bash 中键入这些命令:
mkdir something
cd something
Run Code Online (Sandbox Code Playgroud)
我几乎从不这样做:
mkdir something
ls # something in the current directory, not ./something/
Run Code Online (Sandbox Code Playgroud)
从来没有这个:
mkdir something something2
Run Code Online (Sandbox Code Playgroud)
我怎样才能mkdir cd进入新创建的目录?我的意思是,如果 I mkdir something,则命令cd something在之后立即执行。
例子:
$ pwd
/home/me
$ mkdir something
$ pwd
/home/me/something
Run Code Online (Sandbox Code Playgroud) 有时访问具有文件夹名称的目录很烦人。假设我有一个名为a b c d. 除了使用 之外Tab,还有什么方法可以在不输入目录名称的情况下访问该文件夹?
我知道 Linux 每个特定文件都有一个唯一标识符。我可以用它来访问文件夹吗?我不知道这是否可以真正做到或如何做到。
我认为当 Linux 实现一个文件系统时,它会比较两个目录名称的唯一性。所以每个目录在一个空间中必须是唯一的。但我认为它就像数据库系统中的主键。主键是目录的名称还是有其他一些唯一标识符(也许是一些存储在“引擎盖下”的数字)?
试着把这想象成一个过程。如果ps在终端上执行该命令,它会输出一个进程列表,其中包含每个进程的名称和编号。您必须使用进程号调用该进程。同样,目录是否有号码,以便您可以用号码呼叫目录而不是用名称呼叫?
在进一步调查中,我发现每个目录都有一个唯一的inode. 但是,到目前为止,我还没有找到任何内置命令来通过其inode.
从 ubuntu 17.10 开始,我的脚本不再像以前那样工作:
cd a*
Run Code Online (Sandbox Code Playgroud)
将目录更改为以a.开头的第一个目录。现在,我收到此错误:
bash: cd: too many arguments
Run Code Online (Sandbox Code Playgroud)
我想它现在检测到多个参数,因为多个目录以 开头a并抛出错误。我怎么能改变cd旧方式的行为?
我尝试使用命令cd..并cd.在终端中从我当前的文件夹移动到前一个文件夹,它向我显示一条消息,该命令不存在...
可能是什么问题?我正在使用 Ubuntu 18.04 LTS。
当我尝试使用 cd 命令导航目录时,需要很长时间。终端建议创建一个配置文件来增加超时时间。一旦我的终端挂起,我的意思是当我尝试执行命令时,光标不断闪烁,但没有任何反应,甚至 ctrl+c 也没有效果,我不得不重新启动。但缓慢的终端仍然存在。我发现这个延迟问题仅发生在 cd 命令中。
\n~ on \xe2\x98\x81\xef\xb8\x8f (us-east-2) \n\xe2\x9d\xaf cd Cloud/\n[WARN] - (starship::utils): Executing command "/usr/bin/git" timed out.\n[WARN] - (starship::utils): You can set command_timeout in your config to a higher value to allow longer-running commands to keep executing.\n\nCloud on \xee\x82\xa0 main on \xe2\x98\x81\xef\xb8\x8f (us-east-2) \n\xe2\x9d\xaf \nRun Code Online (Sandbox Code Playgroud)\n 我gmail.rb在以下目录中有一个文件:
root@ubuntu:~# find / -name gmail.rb|more
/media/aruprakshit/FA686DE4686DA05D/Rubyscript/gmail.rb
Run Code Online (Sandbox Code Playgroud)
但是当我试图达到Rubyscript使用cd获取错误时:
$ cd Rubyscript
bash: cd: Rubyscript: No such file or directory
Run Code Online (Sandbox Code Playgroud)
任何人都可以通过说我做错了什么来帮助我吗?
这两个命令是什么意思?
cd ../
Run Code Online (Sandbox Code Playgroud)
cd /..Run Code Online (Sandbox Code Playgroud)
我在第一个命令的树和第二个命令的根目录中结束了两个目录。为什么会这样?
我想进入由ls命令重新调整的每个目录并执行脚本。
我试过这个(和许多其他的东西),但它就是行不通
ls | awk '{print $1" && pwd"}' | xargs cd
Run Code Online (Sandbox Code Playgroud)
没有for循环怎么办?
可能的解决方案可能是:
开始交互式会话。
sudo -s <<< "cd dir ; command"
Run Code Online (Sandbox Code Playgroud)
或者
sudo /bin/bash -c "cd dir ; command"
Run Code Online (Sandbox Code Playgroud)
但我没有 /bin/bash /bin/sh /bin/su 或其他 sudoer 权限
在 sudo 完成之前更改目录。
cd dir ; sudo command
Run Code Online (Sandbox Code Playgroud)
但我无权进入目录。
我需要一个一般情况下的密码集(如 Popen cwd),所以下面不是我可以使用的答案:
sudo command /path/to/file
Run Code Online (Sandbox Code Playgroud)我正在尝试编写的是带有 sudo=True/False 选项的 python Popen 包装器,目前我正试图以某种方式让 cwd 参数起作用。
每当我cd folder_name/在任何目录上尝试bash 时,它都会出现此错误:
-bash: cd: folder_name/: Permission denied
执行权限授予所有文件夹,因此这似乎不是问题。例如在Desktop/输出上运行 stat :
File: 'Desktop/'
Size: 4096 Blocks: 8 IO Block: 4096 directory
Device: 807h/2055d Inode: 13107232 Links: 2
Access: (0755/drwxr-xr-x) Uid: ( 1000/caffeine) Gid: ( 1000/caffeine)
Access: 2017-12-07 14:39:42.715820915 +0500
Modify: 2017-12-06 01:16:13.985722935 +0500
Change: 2017-12-06 01:16:13.985722935 +0500
Birth: -
Run Code Online (Sandbox Code Playgroud)
其他一些可能相关的信息:
mkdir正常执行,但我无法cd进入新文件夹。rmdir 正常执行。那么谁能说出问题是什么?
提前致谢。
编辑:
type -a cd显示以下输出:
cd is a function
cd ()
{
echo "-bash: …Run Code Online (Sandbox Code Playgroud) cd-command ×10
bash ×7
command-line ×4
directory ×3
coreutils ×1
files ×1
filesystem ×1
ls ×1
mkdir ×1
permissions ×1
ruby ×1
sudo ×1