Unix & Linux

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

4
bash:如何在流程替换中传播错误?
我希望我的Shell脚本每执行一个命令失败就会失败。 通常,我这样做的方法是: set -e set -o pipefail (通常我set -u也添加) 关键是上述方法都不能用于流程替换。这段代码显示“ ok”,并以返回代码= 0退出,但我希望它失败: #!/bin/bash -e set -o pipefail cat <(false) <(echo ok) 除了流程替代之外,还有什么等同于“ pipefail”的东西?还有其他方法可以将命令的输出作为文件传递给命令,但是每当这些程序出现故障时都会引发错误? 穷人的解决方案是检测那些命令是否写入stderr(但在成功的情况下某些命令写入stderr)。 另一个与posix兼容的解决方案将使用命名管道,但是我需要放宽这些命令的使用过程,因为oneliners是由编译后的代码动态构建的,而创建命名管道会使事情复杂化(额外的命令,捕获错误,删除它们,等等)

2
将忙碌的磁盘重新安装为只读模式
我想强制磁盘分区为只读模式,并将其保持只读状态超过30分钟。 我尝试过的 mount -o remount,ro (partition-identifier) (mount-point) -t (filesystem) 问题:由于某些进程正在使用该分区,这给设备带来了繁忙错误。我不想杀死使用磁盘的进程。我想模拟磁盘在进程仍在使用时突然变为只读状态。 使用了魔术sysrq密钥,如下所示 echo u > /proc/sysrq-trigger 问题:这将使所有磁盘分区为只读(尽管设备正忙)。但是20到30分钟后,机器将自行重启。一旦执行此命令,某些计算机将立即重新引导。不知道是什么原因导致此重新启动。我不希望计算机自行重启,需要将磁盘保持在只读模式30分钟以上。 问题:是否有更好的方法可以强制单个磁盘分区为只读并在该状态下维持半小时,然后将其恢复为读写模式,而不会导致进程重新启动?

2
路由表按哪个顺序分析?
在我的电脑上,我必须遵循以下路由表: Destination Gateway Genmask Flags MSS Window irtt Iface 0.0.0.0 192.168.1.1 0.0.0.0 UG 0 0 0 wlan0 192.168.1.0 0.0.0.0 255.255.255.0 U 0 0 0 wlan0 我不明白是如何分析的,我是指是自上而下还是自下而上? 如果从上到下进行分析,那么即使ip目标为192.168.1.15,也将始终将所有内容发送到我家中的路由器。但是我知道(错误吗?)是,如果一台PC位于同一局域网内,那么一旦我通过广播消息恢复了MAC目标,那么我的PC便可以将消息直接发送至该目标。
19 route  table 

2
如何将已安装的软件包选择从一个Debian系统复制到另一个?(Debian Wheezy)
我正在尝试在VM中设置暂存环境,以便在将更新应用到主系统之前对其进行测试。 为此,我已经在VM中完成了Debian Wheezy的基本安装(与主系统上相同),然后以root身份从VM中运行: # dpkg --clear-selections # dpkg --add-architecture i386 # apt-get update # ssh me@main-system 'dpkg --get-selections | grep -v deinstall' | \ dpkg --set-selections 在我的情况下,不幸的是需要i386架构。该系统是amd64本机。 问题是dpkg --set-selections在VM中运行。我确实有一些需要特殊处理的软件包(实际上,这是我首先要提供暂存环境的主要原因),但是当我运行上面的最后一条命令时,得到的输出行如数以百万计: dpkg: warning: package not in database at line NNN: package-name 用于基本系统中确实应该可用的软件包。实例包括xterm,yelp和zip。 现在我的问题是: 将软件包选择列表从一个Debian系统转移到另一个系统(假设在Wheezy中为相同的Debian发行级别),然后随后应用这些更改的具体过程是什么?目的是使两者都具有相同的已安装软件包列表,理想情况下,这样diff会使两者的输出dpkg --get-selections或dpkg --list在两者的输出之间进行“ a”操作,从而显示出没有差异。 该grep -v deinstall部分是从Ask 软件包中dpkg --set-selections借用的Prevent软件包中删除的。 …

1
为什么笔记本电脑的屏幕称为eDP1?
在我使用Xorg i915和intelXorg驱动程序的新笔记本电脑中,笔记本电脑屏幕在Randr中称为eDP1 $ xrandr eDP1 connected 1024x768+0+0 (normal left inverted right x axis y axis) 277mm x 156mm 1366x768 60.14 + 40.09 1360x768 59.80 59.96 1024x768 60.00* 800x600 60.32 56.25 640x480 59.94 为什么叫它eDP1?“ e” eDP1代表什么?
19 xorg  laptop  monitors  xrandr 

8
调用多个bash脚本并并行运行,而不是依次运行
假设我有三个(或更多)的bash脚本:script1.sh,script2.sh,和script3.sh。我想调用所有这三个脚本并并行运行它们。一种方法是仅执行以下命令: nohup bash script1.sh & nohup bash script2.sh & nohup bash script3.sh & (通常,脚本可能需要几个小时或几天才能完成,所以我想使用nohup它们,以便即使我的控制台关闭也可以继续运行。) 但是,有什么方法可以通过一次调用并行执行这三个命令? 我在想类似 nohup bash script{1..3}.sh & 但这似乎是按顺序执行script1.sh,script2.sh而script3.sh不是并行执行。

1
使用gzip压缩目录中已存在的.gz文件以外的文件
我有一个日志目录,我想设置一个使用gzip压缩的作业。问题是我不想重新压缩已经压缩的日志。 我尝试使用ls | grep -v gz | gzip,但这似乎不起作用。 有没有办法做到这一点?基本上,我想gzip目录中未以.gz结尾的每个文件。
19 gzip 

3
使用自定义IP发送CURL请求
不可能吗?假设我不需要响应,我只想发送一个请求。我们不是应该能够更改tcp / ip标头,因为我们的计算机会发送它吗?我可能会错过一些东西,只是真的很好奇,我正在大学里学习它。
19 curl 

3
有没有办法从命令行展平.pdf图像?
在GIMP中,我可以导入.pdf,然后使用GUI通过在“图像”(Image)下拉菜单中选择“平面图像”(Flatten Image)将其展平(如果它是由多层构成的)。然后,我可以使用新文件名导出.pdf。 我想使它自动化。有什么办法可以通过终端吗?

1
键盘硬重映射键?
我试图找到一种方法来强制重新映射键盘键。 我尝试使用xmodmap和setxkbmap,但它们不适用于一个特定的应用程序。这样的命令适用于X tho上的其他普通窗口/应用程序。 我认为应用程序可能正在读取键盘原始数据,而忽略了X输入? 那么,如何在不使用xmodmap和setxkbmap的情况下重新映射键?如果有可能使用某些软件来完成。 我还尝试了xkeycaps,xkbcomp,但是没有尝试使用loadkeys,因为它在X上运行。 我在这里发现可以尝试setkeycodes,“因为在分配内核密钥代码后,该按钮应该可以在xorg中使用”,但是我还发现“您不能在USB键盘上使用'setkeycodes'”,这就是我的情况(我对这种情况很感兴趣有人让它在ps2上工作,因为我认为我可以使用适配器)。 这似乎很有希望,“将扫描码映射为键码”,但是经过一些测试后没有任何变化,它们是: 我在vt1处找到了键码“ 36”(“ j”键),在下面showkey 找到了扫描码“ 7e”(键盘“。”)。 vt1与showkey --scancodes $cat >/etc/udev/hwdb.d/90-custom-keyboard.hwdb keyboard:usb:v*p* keyboard:dmi:bvn*:bvr*:bd*:svn*:pn*:pvr* KEYBOARD_KEY_7e=36 $udevadm hwdb --update #updates file: /lib/udev/hwdb.bin $udevadm trigger #should apply the changes but nothing happened $cat /lib/udev/hwdb.bin |egrep "KEYBOARD_KEY_7e.{10}" -ao KEYBOARD_KEY_7eleftmeta $#that cat on hwdb.bin did not change after the …

1
我应该将我的语言环境设置为什么,这样做的含义是什么?
提出这个问题是因为Chromium浏览器不允许为“打印到文件”设置默认纸张尺寸,以及在聊天时与@Gilles进行交谈而激发了这个问题 。正如@don_crissti指出的那样,并由我证实,更改语言环境(至少是LC_PAPER)会影响所选纸张尺寸的差异。 我从来没有考虑过要选择什么,并且一直选择en_US.UTF-8它,因为这似乎是一个合理的默认选择。 但是,按照@Gilles聊天(请参阅从http://chat.stackexchange.com/transcript/message/17017095#17017095开始的对话)。提取物: Gilles:LC_PAPER默认为$ LANG 吉尔斯:您必须具有LANG = en_US.UTF-8。那是个坏主意:它设置LC_COLLATE几乎总是一件坏事 Gilles:LC_COLLATE没有描述正确的排序规则,它的限制太严格(逐字符处理),请删除LANG并设置LC_CTYPE和LC_PAPER 吉尔:如果您想要用英语以外的其他语言发送消息,请加上LC_MESSAGES 显然,这里有一些我不知道的问题,并且我相信还有很多其他问题。因此,设置语言环境时应考虑哪些问题,以及如何设置它们?我一直只是dpkg-reconfigure locales在Debian中运行,对此没有三思。 具体问题:我应该将语言环境设置为en_IN.UTF-8吗?这样做有什么弊端吗? 另请参阅:LC_COLLATE是否(应)影响字符范围?
19 locale 

2
如何以其他用户身份运行?
这是应运行的bash代码。因此,首先它将用户替换为openproject,然后运行所有代码 su openproject -c "bash -l" cd ~/openproject git checkout Gemfile.lock git pull bundle install RAILS_ENV="production" bundle exec rake db:migrate RAILS_ENV="production" bundle exec rake db:seed RAILS_ENV="production" bundle exec rake assets:precompile 我尝试将上面的脚本修改为: su - openproject -c "cd ~openproject/openproject" su - openproject -c "git checkout stable" su - openproject -c "git checkout …
19 bash  debian  sudo  su 

4
为什么有些命令不从标准输入中读取?
我想知道什么时候应该使用管道,什么时候不应该使用管道。 举例来说,要终止处理pdf文件的某些进程,使用管道将无法执行以下操作: ps aux | grep pdf | awk '{print $2}'|kill 相反,我们只能通过以下方式做到这一点: kill $(ps aux| grep pdf| awk '{print $2}') 要么 ps aux | grep pdf | awk '{print $2}'| xargs kill 根据man bash(版本4.1.2): The standard output of command is connected via a pipe to the standard input of command2. …
19 shell  pipe  arguments  stdin 

1
您何时会在switch_root上使用ivot_root?
我想更好地了解Linux初始化过程,以便通过ceph而不是nfs网络引导系统。 在此过程中,我遇到了两种切换根的形式。一个称为switch_root,另一个称为pivot_root。这些脚本是通过使用pxe引导过程通过tftp获取的内存文件系统(initramfs)运行的。 您什么时候可以使用另一个?我已经看到两者都用在放置在根目录下的一些init脚本中。

2
(-)的niceness值是什么意思?
根据手册页和维基百科;nice范围从-20到20。 但是,当我运行以下命令时,我发现某些进程具有非数字值,例如(-)。请参阅左侧第六栏,标题为“ NI”。 (-)的优美表示什么? ps axl F UID PID PPID PRI NI VSZ RSS WCHAN STAT TTY TIME COMMAND 4 0 1 0 20 0 19356 1548 poll_s Ss ? 0:00 /sbin/init 1 0 2 0 20 0 0 0 kthrea S ? 0:00 [kthreadd] 1 0 3 2 -100 …

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.