Unix & Linux

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

1
为什么此BSD grep结果与GNU grep不同?
我的计算机正在运行macOS 10.12.3,并且我使用的系统安装grep实用程序的版本为2.5.1-FreeBSD。 这些是我在测试各种正则表达式时得到的输出: 但是,如果我使用GNU grep(2.25版)运行这些程序,则会得到以下信息: GNU的grep在我看来是正确的,而BSD的grep是不正确的,不是吗?他们为什么不同?我不明白为什么当正则表达式指定它必须跟随行的开头时,BSD的grep为何匹配“ a”。

3
UNIX-意外将根目录下的所有内容移动到/ old-Solaris 10
正如标题所述,在Solaris 10计算机上,将根目录(/)下的所有重要的或几乎所有重要的根目录都移至/ old。所以现在尝试的典型故障时运行时,命令Cannot find /usr/lib/ld.so.1(改变$PATH,也试图改变$LD_LIBRARY_PATH,$LD_LIBRARY_PATH_64并$LD_RUN_PATH和出口,但他们没有,这似乎改变实际库路径)。昨天进行了很大的尝试,寻找了可能有帮助的东西,但没有发现任何东西可以改变Solaris 10的库路径,crle但也许自此之后就无法运行Cannot find /usr/lib/ld.so.1。 找到了很多针对Linux的root或/ usr / bin恢复技巧等,但是有关Solaris 10 / Unix的信息并不多且非常稀疏。 不能运行cp,ln,mkdir或mv自Cannot find /usr/lib/ld.so.1。既不能与其他会话一起登录到计算机。尽管仍可以使用一个会话,并且该窗口已被暂停while true; do date; echo hej 1234567; done。我们已经讨论了使用Solaris引导CD以及USB驱动器上的Linux发行版的解决方案。我们已经讨论了将硬盘驱动器磁盘切换到另一个机架的解决方案。 该/.../static/.../mv解决方案已经过测试,但是没有用。 仍然可以使用的命令(有可能是可以使用多个命令): ,echo,<,>,>>,|,。pwdcd 有没有一种方法可以创建目录或文件夹mkdir?有什么方法可以使用echoand >或echoand >>恢复/usr/lib/ld.so.1?我知道/usr/lib/ld.so.1为了使命令正常工作,可能还需要恢复更多内容。 非常感谢您的阅读,并祝您有美好的一天=)


2
为什么SSH -t不等待后台进程?
为什么ssh -t不等待后台作业完成? 例: ssh user@example 'sleep 2 &' 这可以按预期工作,因为ssh在2秒后返回,而 ssh user@example -t 'sleep 2 &' 不等待sleep完成并立即返回。 谁能解释这背后的原因?有没有办法让ssh -t所有后台进程完成后再返回? 我的用例是使用来启动一个脚本ssh -t,并且该脚本启动了一些后台作业,这些作业应在主脚本完成后仍然存在。随着ssh -t这是不可能的为止。

1
为什么我需要使用chroot
这个问题chroot-jail是什么以及我如何使用它指的是什么以及如何使用chroot。 我不明白的是为什么我需要使用chroot。我了解它的作用,但是鉴于它不是安全机制或沙箱,因此我想不出何时需要使用它的情况,答案指出“您不应该将其chroot用作安全性”措施以防止程序修改模拟文件系统外部的文件”。 具体来说,为什么某个进程需要将子目录映射为rootfilesystem?
13 chroot 


1
可以嵌套多少个目录?
我很好奇,可以嵌套多少个文件夹,为什么?有限制吗? 我的意思是嵌套是指文件夹处于以下结构中: folder |_ folder |_ folder |_ folder |_ ... 不是这样的: folder |_ folder |_ folder |_ folder |_ ... 如果有限制,是由操作系统设置还是由文件系统设置?

6
执行前验证命令二进制文件
有什么方法可以检查您从bash脚本实际执行的操作吗? 说你的bash脚本调用几个命令(例如:tar,mail,scp,mysqldump),你愿意以确保tar是真正的,真实的tar,这是由确定root用户是该文件的父目录的所有者,也是唯一一个具有写权限而不是/tmp/surprise/tar拥有者www-data或apache2拥有者。 当然,我知道PATH环境,我很想知道是否可以从正在运行的bash脚本中另外检查一下,如果可以的话,如何检查? 示例:(伪代码) tarfile=$(which tar) isroot=$(ls -l "$tarfile") | grep "root root" #and so on...

2
POSIX Shell中函数和变量的独立命名空间
在破折号中,函数和变量似乎位于单独的命名空间中: fn(){ fn="hello world" } fn; echo "The value is $fn!" #prints: The value is hello world! fn; echo "The value is $fn!" #prints: The value is hello world! #the fn variable doesn't conflict with the fn function 这是破折号专用功能还是POSIX保证?
13 shell  posix  dash 

8
通过单词反转变量的内容
所以如果我有一个变量 VAR='10 20 30 40 50 60 70 80 90 100' 并回声 echo "$VAR" 10 20 30 40 50 60 70 80 90 100 但是,在脚本的更下方,我需要反转此变量的顺序,以便显示为类似 echo "$VAR" | <code to reverse it> 100 90 80 70 60 50 40 30 20 10 我尝试使用rev,它实际上颠倒了一切,所以它作为 echo "$VAR" | rev 001 09 08 …
13 linux  bash  shell  variable 

2
在Wayland上为gnome设置环境变量,在虚拟终端(或ssh)上为bash设置环境变量
Gnome 3.22默认使用Wayland。Wayland上的Gnome无法读取~/.profile(或~/.bash_profile或/etc/profile)。见https://bugzilla.gnome.org/show_bug.cgi?id=736660。 我的初始化文件设置如下: .bash_profile什么也不做,但源.profile和.bashrc .profile只设置环境变量,例如PATH和LC_MESSAGES .bashrc为诸如less和的应用程序设置一些特定于bash的设置,别名和环境变量grep。 效果(在Wayland之前)如下: 当我以图形方式登录时.profile,会读取并设置PATH和LC_MESSAGES设置环境变量。当我在终端仿真器中打开bash时,会.bashrc被读取。 当我在虚拟终端下登录时.bash_profile,将读取.profile并依次读取和.bashrc。 当我使用ssh登录时,行为类似于虚拟终端。 在所有情况下.profile,.bashrc均已阅读并且设置了我的环境。 因此,现在gnome 3.22使用了Wayland,而Wayland无法读取.profile。如何设置初始化文件,以便再次获得如上所述的效果? 请注意,我不坚持.profile读取某些文件(如)。我想要以一种明智的方式来设置我的环境。这意味着我想将bash特定设置保留在bash初始化文件中,并将其他设置保留在其他初始化文件中。另外,我也不想在其他文件上复制设置。 我使用arch linux。欢迎所有发行版本的答案。当提出解决方法时,请同时描述副作用以及优缺点。 更新2017年11月:据我了解GNOME开发者都承认,人们期待他们的登录shell的配置文件(.profile并.bash_profile在bash的情况下)在登录后采购。无论是文本登录还是图形登录。因此,我上面概述的用例再次起作用。 gnome开发人员仍然希望远离启动登录shell。看来他们的发展方向是使用systemd环境的: https://in.waw.pl/~zbyszek/blog/environmentd.html 似乎需要一段时间才能使所有登录方法适应环境。

4
通过脚本在sftp连接中执行命令
这是一个非常基本的问题,对于bash来说我还是很陌生,无法弄清楚该怎么做。不幸的是,谷歌搜索没有带我到任何地方。 我的目标是使用sftp连接到服务器,上传文件,然后断开连接。 我有以下脚本: UpdateJar.sh #!/bin/bash sftp -oPort=23 kalenpw@184.155.136.254:/home/kalenpw/TestWorld/plugins #Change directory on server #cd /home/kalenpw/TestWorld/plugins #Upload file put /home/kalenpw/.m2/repository/com/Khalidor/TestPlugin/0.0.1-SNAPSHOT/TestPlugin-0.0.1-SNAPSHOT.jar exit 问题是,此脚本将建立sftp连接,然后什么也不做。一旦我在连接中手动键入exit,它就会尝试执行put命令,但是由于sftp会话已关闭,它只会显示put:命令未找到。 我如何才能使其正常工作? 谢谢

3
如何告诉Firefox使用其他ALSA设备?
我有一个板载声卡,也有一个连接的蓝牙耳机。我已在中配置了蓝牙设备/etc/asound.conf: # cat /etc/asound.conf pcm.bluetooth { type bluetooth device 12:34:56:78:9a:bc profile "auto" } ctl.bluetooth { type bluetooth } 默认情况下,板载卡用于所有声音(显然,默认板载卡甚至不需要在asound.conf中列出) 当我希望应用程序使用我的蓝牙alsa设备时,必须指定它,例如: mplayer -ao alsa:device=bluetooth file.mp3 对我来说很好。但是我需要一种方法来告诉我的浏览器也使用蓝牙alsa设备。 我找到了一种使用--alsa-output-device命令行选项启动铬的方法: chromium --alsa-output-device=bluetooth 我需要类似的方法来启动Firefox,但找不到任何方法。 我怎么能告诉Firefox中使用蓝牙ALSA设备,而无需修改/etc/asound.conf或~/.asoundrc每一次? 更新: 我遵循了@lgeorget的建议,/etc/asound.conf现在看起来像这样: pcm.!default { type plug slave.pcm { @func getenv vars [ ALSAPCM ] default "hw:0,0" } } pcm.bluetooth { …
13 audio  firefox  alsa  browser 

2
出现警告或错误时,我应该输出程序名称吗?
如果我正在编写脚本或程序,是否应该将其名称以及警告或错误消息输出到stderr?例如: ./script.sh: Warning! Variable "var" lowered down to 10. 要么: ./prog.py: Error! No such file: "file.cfg". 我了解通常这只是一个口味问题(尤其是您是否自己编写自己的东西),但是我想知道是否有任何常规做法?我相信大多数UNIX / Linux实用程序都会在发生某些情况时写下它们的名称,所以这似乎是一件好事,但是是否有任何准则或不为人知的规则如何做到这一点以及如何做到这一点呢? 例如,不建议将二进制文件安装/usr/bin/在/usr/local/bin/或下。关于输出到stderr是否有类似的规则?我应该在名字后面加上冒号吗?或只是“警告!” 和“错误!” 话?我什么也找不到,但也许有人可以指出我的位置。 这个问题是关于编程实践的,但是我认为在这里比在stackoverflow上更合适,因为它是关于UNIX / Linux的传统,而不是一般的编程。

2
调用此Bash脚本时,为什么文件参数必须使用引号?
我对Bash脚本非常陌生。我有一个“ testscript”,它用作更高级/有用的脚本的基础: #!/bin/bash files=$1 for a in $files do echo "$a" done 当我不带引号的情况下调用它时,它只会在目录中拾取一个文件: testscript *.txt 但是,当我用引号将其调用时,它可以正常工作并挑选出所有文本文件: testscript '*.txt' 这里发生了什么?

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.