Unix & Linux

Linux,FreeBSD和其他类似Un * x的操作系统用户的问答




4
为什么`[`是shell内置的,而`[[`是shell的关键字?
据我所知,[[是的增强版本[,但是当我看到它[[作为关键字并[显示为内置函数时,我感到困惑。 [root@server ~]# type [ [ is a shell builtin [root@server ~]# type [[ [[ is a shell keyword TLDP说 内建函数可能是同名系统命令的同义词,但是Bash在内部重新实现它。例如,Bash echo命令与/ bin / echo不同,尽管它们的行为几乎相同。 和 关键字是保留字,令牌或运算符。关键字对shell具有特殊的含义,并且确实是shell语法的组成部分。举例来说,for和while都做!是关键字。类似于内置命令,关键字被硬编码到Bash中,但是与内置命令不同,关键字本身不是命令,而是命令构造的子单元。[2] 那不是既可以作为关键字[又可以[[作为关键字吗?我在这里想念什么吗?同样,此链接再次确认[和[[应该属于同一种类。

14
记住ln参数顺序的提示
我已经ln写符号链接多年了,但是我仍然错误地获得了参数的顺序。 这通常让我写: ln -s a b 然后查看输出以提醒自己。 我总是想像a -> b当我读到它时实际上却相反b -> a。这感觉是违反直觉的,所以我发现我总是在猜测自己。 有人有任何提示可帮助我记住正确的顺序吗?
64 symlink  ln 

14
mount.nfs:在Ubuntu机器上挂载时服务器拒绝访问?
我有三台机器正在生产- machineA 10.66.136.129 machineB 10.66.138.181 machineC 10.66.138.183 所有这些机器都安装了Ubuntu 12.04,并且我具有对这三台机器的root访问权。 现在我应该在上面的机器中做下面的事情- Create mount point /opt/exhibitor/conf Mount the directory in all servers. sudo mount <NFS-SERVER>:/opt/exhibitor/conf /opt/exhibitor/conf/ /opt/exhibitor/conf如上所述,我已经在所有这三台计算机上创建了目录。 现在,我试图创建一个挂载点。所以我遵循以下过程- 在以上三台机器上安装NFS支持文件和NFS内核服务器 $ sudo apt-get install nfs-common nfs-kernel-server 在以上三台机器上创建共享目录 $ mkdir /opt/exhibitor/conf/ 编辑了,/etc/exports并在上述所有三台机器中添加了这样的条目- # /etc/exports: the access control list for filesystems which may be exported …
64 linux  ubuntu  mount  nfs 

4
如何使用-EXEC复制FIND的结果并仍然输出到文件?
更好地解释例子。 我可以: find . -name "*.py" -type f > output.txt 但是我如何将输出存储到相同的文件中以: find . -name "*.py" -type f -exec grep "something" {} \ 我不能只是做 find . -name "*.py" -type f -exec grep "something" {} \ > output.txt
64 find 



1
在最近的公司计算机上启动期间崩溃
经过一些最近的更新后,我的计算机不再启动!这是我可以确定的: 这是公司IT向我提供的最新计算机。它具有最新的Intel CPU(Skylake一代)。 该计算机运行Ubuntu 16.04。 上一次在三月份的某个时间正确启动了计算机。该问题可能是由于软件更新或硬件错误引起的。 我有一台运行16.04的计算机,安装了几乎相同的软件(我使用过apt-clone),并且工作正常。它具有不同的硬件(也为amd64,但具有不同的CPU,不同的GPU等)。 内核确实启动,initrd正常工作。在图形模式下使用启动屏幕启动时,系统提示输入dm-crypt卷的密码,最后我看到的是它已成功安装。 挂起发生在我得到登录提示之前。当计算机挂起时,这很困难。甚至Alt+ SysRq都没有回应。由于风扇完全爆炸,因此CPU显然固定在100%。 重新启动之前,我仍然有运行中的内核。当我在Grub菜单中选择此内核时,我得到了相同的锁定。因此,这似乎是一个预先存在的内核错误,该错误由其他原因触发-但是呢? 如果我关闭了启动画面(splash从linuxGrub中的命令行删除),则看到许多服务正在启动,然后它将锁定。 我可以通过添加得到一个root shell init=/bin/sh到linux在GRUB命令行。我什至可以通过添加进一步 systemd.unit=basic.target systemd.shell 这将启动许多服务,并在tty9上运行根shell。 如果我systemctl start multi-user.target从该根外壳运行,则计算机将锁定。因此,大概是这些服务之一触发了问题。 我跑去systemctl list-dependencies multi-user.target看什么服务开始。我一一手动启动了列出的依赖项,一切开始正常。 因此,这看起来像是由某些软件触发的硬件错误(因为它发生在一台计算机上,而不是另一台计算机上)。但是什么软件?由于计算机锁定非常困难,因此无法获取任何日志。我什至无法获得任何有用的控制台输出。 有用的调试技术: Alt+ SysRq:魔术SysRq键,可让您执行紧急重启之类的操作。它以非常低的级别访问内核,因此除了最严重的崩溃外,它都能正常工作。就我而言,Alt+ SysRq不会响应,这表明崩溃的程度。 要修改启动参数,请Shift在打开电源后按住几秒钟。在BIOS初始化键盘之后,但在操作系统引导之前,您需要按一下它。这将使Grub菜单出现。 在Grub菜单上,按e编辑菜单项的命令行。要更改Linux引导参数,请导航至以开头的行linux。在现代Ubuntu上,您会在“ Ubuntu的高级选项”下找到旧内核。对命令行进行所需的更改后,请按Ctrl+ x引导。您在此处所做的任何更改仅用于此引导,它们不会保存到磁盘。 linux命令行上一些有用的选项: quiet nosplash隐藏几乎所有引导消息。删除它们以在启动期间在控制台上获取消息,这对于诊断问题是必须的。 recovery为您提供了几乎没有服务的root shell。您需要知道root密码。“恢复模式”菜单项使用此选项。 init=/bin/sh为您提供了根本没有服务的root shell。要恢复正常引导,请运行exec init。您可以在此时传递systemd选项,例如exec init --unit=basic.target,启动init和一些服务(请注意,这不会以任何方式启动登录,因此最好在另一个控制台上运行shell)。注意,根文件系统是只读安装的;运行mount -o remount,rw /以能够对其进行写入。 systemd.unit=basic.target启动一组非常基本的服务。请注意,这不包括任何登录方式!您可以通过systemctl set-default basic.target在根目录提示符下运行将其设置为默认值。要恢复原始的默认目标,请运行systemctl set-default …


2
“ sh兼容”是什么意思?
我已经看到了通常在引用shell时使用的“ shcompatible”一词。我不确定它是否也适用于可能在Shell中运行的程序。 Shell或其他程序“与sh兼容”是什么意思?“ sh不兼容”是什么意思? 编辑:这个问题问bash和sh之间的区别非常相关: sh和bash之间的区别 我仍然想直接回答“与Windows兼容”的含义。一个合理的期望可能是“ sh兼容”的意思是“实现Shell命令语言”,但是为什么会有那么多的“ sh兼容” shell,又为什么又不同呢?

2
SSH:SSH服务器上没有外壳的隧道
我必须在两台主机之间建立一条隧道。 为此,我ssh以这种方式使用: ssh -L MY_LOCAL_PORT:FOREIGN_ADDRESS:FOREIGN_PORT MYUSER@SSH_SERVER 之后,我登录到SSH_SERVER。 如何避免使用此功能?我只需要建立一条隧道。我不必登录到SSH_SERVER ... 我尝试了-N选项,但它使我的shell忙。

6
如何将grep搜索的结果传递到新的vi文件中
我grep -e Peugeot -e PeuGeot carlist.txt用来搜索carlist.txt并提取一些项目,我grep -e Peugeot -e PeuGeot carlist.txt | vi想这会通过管道传递给我,但这就是我得到的: Vim: Warning: Input is not from a terminal Vim: Error reading input, exiting... Vim: preserving files... Vim: Finished.
63 grep  vi 

3
同时压缩和压缩,无中间保存
规范的方法是: scp 文件到远程位置 压缩传输中的文件(是否压缩tar单个文件或整个文件夹,7za或什至更高效的文件) 执行上述操作而不保存中间文件 我对这样的外壳管道很熟悉: tar cf - MyBackups | 7za a -si -mx=9 -ms=on MyBackups.tar.7z 实质上: 将整个文件夹滚动到一个文件夹中 tar 将数据传递stdout到stdin压缩程序 应用积极的压缩 通过ssh链接将文件放置在远程文件系统上的最佳方法是什么? 我不喜欢sshfs坐骑。 这不起作用: scp <(tar cvf - MyBackups | 7za a -si -mx=9 -so) localhost:/tmp/tmp.tar.7z 因为: /dev/fd/63: not a regular file
63 ssh  tar  scp  7z 

By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.