假设我做了一件愚蠢的事情,例如使用“chsh”将 root 用户的 shell 更改为错误的文件路径。以后登录到 root 帐户将突然失败,引用 /bin/whatever 未找到,然后将您引导回登录屏幕。除非使用恢复模式或插入 LiveCD 来编辑 /etc/passwd,我有哪些选项可以恢复系统?我们还假设(为了好玩?)轮子中没有其他用户。想法?
我一直在摆弄让这个工作一段时间,所以我怀疑对管道如何工作的某种根本误解是我遇到麻烦的根本原因。
我的目标是通过netcat
并在文件系统上有两个命名管道启动到某个远程主机的 TCP 连接:一个进程可以从中读取以获取传入数据,另一个进程可以写入作为传出数据。我目前正在使用以下结构:
mkfifo in
mkfifo out
cat out | netcat foo.bar.org 4000 > in &
Run Code Online (Sandbox Code Playgroud)
从这里开始,我想允许其他进程从这个打开的 TCP 连接读取和写入。这应该“正常工作”,还是有这样的构造不能工作的原因?
什么似乎目前发生的是,我可以读取out
没有问题,但是当我写到in
我得到的输出提一个破碎的管道和所有后续通信似乎是死了。想法?
(相关:我最初使用的是:
netcat foo.bar.org 4000 < out > in &
Run Code Online (Sandbox Code Playgroud)
但发现它阻塞等待输入。我对此也很好奇,但最好在单独的问题中解决。)
我在 Linux 系统上运行 X11 时遇到的一个常见问题是,似乎没有任何 X11 范围的用于复制和粘贴的键盘快捷键。Ctrlc和Ctrlv做工精细在大多数基于GTK / Qt应用程序,但是,当复制和从终端仿真器粘贴到/,Ctrlc而Ctrlv不是可行的选择。
像 gnome-terminal 这样的术语使用CtrlShiftc/ 等快捷方式v,但这仍然会导致跨应用程序的复制+粘贴体验不一致。
例如,OSX 使用Super/Command键提供在所有 OSX(无 X11)应用程序中起作用的Ctrlc/v快捷方式,并且不会干扰终端模拟器。
有没有办法在 Linux 上的 X11 下获得类似的功能?
在像编辑vim
和emacs
,可以使用像热键C-p
(VIM)或M-/
(emacs)可使用换言之在相同缓冲液当前字执行自动完成功能。
是否可以在 shell 中实现相同的功能?如果我在上一个命令的输出中看到一些单词,并且我想在输入另一个命令时快速自动完成它。
为了清楚起见,举个例子:
$ ls
Desktop/ Mail/ music/ osx@ something_with_a_pretty_long_name
$ someth
Run Code Online (Sandbox Code Playgroud)
从这里开始,我希望能够点击一个热键并让它自动完成我正在输入的内容something_with_a_pretty_long_name
。
编辑:射击。使用文件名是我所追求的一个糟糕的例子。考虑以下第二个示例:
$ cat /var/log/something.log
[19:30] Service started
[19:35] Something else happened
$ happ
Run Code Online (Sandbox Code Playgroud)
仅仅因为它出现在我的终端缓冲区中,我就可以自动完成“happ”到“happened”。我希望这能澄清我所追求的。
直到最近,我的印象是 Unix-y 程序不知道它们的输出去哪里了,无论是标准输出,重定向到文件,还是进入管道。但是,本网站上一个不相关的 U&L 问题引起了我的注意以下示例:
% echo "hello world" > file
% grep --color=auto lo file
hello world
% grep --color=auto lo file | cat
hello world
Run Code Online (Sandbox Code Playgroud)
显然你在这里看不到它,但第一个命令显示“lo”突出显示,正如预期的那样。但是,通过管道的第二个调用没有显示颜色。这表明它grep
意识到其输出被定向到管道并避免输出颜色。这是怎么做的?