Unix & Linux

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

1
如何在Systemd服务中设置环境变量
我正在使用ROS,它已经正确安装在Ubuntu上。 要运行ROS,我们必须先source /opt/ros/kinetic/setup.bash执行roscore。如果我roscore不执行source setup.bash该命令,roscore则找不到该命令。 现在,我想在系统启动时执行ROS。 我已阅读此链接:https : //askubuntu.com/questions/814/how-to-run-scripts-on-start-up 看来我只需要创建一个自定义服务文件并将其放入/etc/systemd/system/。但是我仍然不确定该怎么做,因为我需要source setup.bash在执行之前设置一些必要的环境变量roscore。 是否可以在服务文件中设置环境变量?为了我的需要,我不仅要为执行roscore系统设置这些环境变量,还要为整个系统设置这些环境变量。 我有另一个想法,那就是我设置了这些环境变量/etc/profile并仅为该命令编写了一个服务文件roscore,它将起作用吗?

1
如何在sudo中使用shell通配符?
我正在尝试取出folder1的所有内容,并将其放入folder1所在的images_temp文件夹中: jeatonhomes@jeatonhomes.com [~/images_temp]# sudo mv folder1/* . mv: cannot stat `folder1/*': No such file or directory 但是我在上面遇到了这个错误,我试图在这里查找答案,但是有些答案我认为不适用于我的情况。请帮忙。 jeatonhomes@jeatonhomes.com [~]# pwd && ls -l /home/jeatonhomes total 108 drwx--x--x 18 jeatonhomes jeatonhomes 4096 Apr 3 13:25 ./ drwx--x--x 106 root root 4096 Mar 30 16:19 ../ lrwxrwxrwx 1 jeatonhomes jeatonhomes 37 Dec …

3
Bash:通过管道将“查找”输出到“ readarray”
我正在尝试使用来搜索文件find,并将这些文件放入Bash数组中,以便可以对它们执行其他操作(例如ls,grep它们)。但是我不知道为什么readarray在将find输出通过管道传输时不读取输出。 假设我在当前目录中有两个文件,file1.txt并且file2.txt。因此find输出如下: $ find . -name "file*" ./file1.txt ./file2.txt 因此,我想将其传送到一个数组,该数组的两个元素是字符串"./file1.txt"和"./file2.txt"(显然没有引号)。 我已经尝试过了,其中包括: $ declare -a FILES $ find . -name "file*" | readarray FILES $ echo "${FILES[@]}"; echo "${#FILES[@]}" 0 从echo输出中可以看到,我的数组为空。 那我到底在做什么错?为什么readarray不将find的输出作为标准输入读取并将这些字符串放入数组?
14 bash  find 



1
新的分组驱动程序有哪些好处?
编译3.3内核时,我注意到在网络系统中添加了一个名为teaming的新驱动程序。根据相关的提交团队,绑定是用户空间驱动的替代方法。 有人在测试吗?它比旧的久经考验的绑定驱动程序快还是好?改变的好处是什么?
13 linux  bonding 

3
如何在OpenBSD中使用pf阻止滥用IP地址?
从nginx日志中我们可以看到,有一个IP地址正在处理令人讨厌的事情。 我们如何才能通过pf命令将其阻止,然后在以后永久使用/etc/pf.log?我们如何才能阻止x.x.x.x/24该IP?例如:1.2.3.4 更新:不,看起来OpenBSD在/ etc中没有允许/拒绝文件。而AFAIK最好的建议是使用pf来阻止滥用IP地址。 # cd /etc # ls -la|egrep -i 'deny|allow' # uname -a OpenBSD foo.com 5.4 GENERIC.MP#0 amd64 #
13 openbsd  pf 

1
是否有工具(!)列出用户分配的subuid和subgid值?
usermod -v(--add-sub-uids)和usermod -w(--add-sub-gids)可用于操纵用户帐户的subuid和subgid范围,但是似乎没有工具可以仅列出它们。有一个吗? 至少在我的Ubuntu 14.04机器上getent,似乎并没有准备好处理来自/etc/subuid和的信息/etc/subgid。 目前,我正在使用一个小的shell脚本,awk用于此目的。 以下是摘录usermod(8): -v, --add-sub-uids FIRST-LAST Add a range of subordinate uids to the users account. [...] -V, --del-sub-uids FIRST-LAST Remove a range of subordinate uids from the users account. [...] -w, --add-sub-gids FIRST-LAST Add a range of subordinate gids to the users account. [...] -W, …
13 linux  ubuntu  users  userns 

1
在xkb中重新映射Caps Lock和Shift + Caps Lock
我正在尝试配置xkb,以使Caps Lock映射到Compose键,而Shift + Caps Lock功能作为传统的Caps Lock。我将以下内容放入一个名为的新文件中/usr/share/X11/xkb/symbols/gdwatson: partial modifier keys xkb_symbols "compose" { key <CAPS> { type[Group1] = "TWO_LEVEL", symbols[Group1] = [ Multi_key, Caps_Lock ] }; }; 然后我跑了setxkbmap -symbols 'pc+us+gdwatson(compose)',成功完成了。Caps Lock用作Compose,但是Shift + Caps Lock用作Compose而不是Caps Lock。 xkbcomp :0.0显示以下内容: key <CAPS> { type= "TWO_LEVEL", symbols[Group1]= [ Multi_key, Multi_key ] }; 第二级符号映射由于某种原因正在复制第一级符号映射,而不是我尝试赋予它的单独值。有人有足够强大的xkb-fu来告诉我我做错了什么或如何解决吗?

1
在Debian上设置持久路由表
我已经通过删除一个规则并为第二个接口eth1添加两个新规则来修改了路由表: route del -net 10.1.2.0 netmask 255.255.255.0 route add -host 10.1.2.51 eth1 route add -host 10.1.2.52 eth1 我希望规则能够在重新启动后幸存下来。我可以编写一个简单的rc脚本来删除1条规则并插入2条new,但是我想知道是否有一种配置ifconfig的方法,而不是在启动接口时为接口(eth1)添加路由规则,或者甚至更好,指定应添加哪些规则。 什么是干净的方法?是否ifconfig可以指定路由自定义规则?


2
为什么需要<或>使用/ dev / tcp
尝试致电时/dev/tcp/www.google.com/80,输入 /dev/tcp/www.google.com/80 巴什说no such file or directory。在线查看其他人的代码时,他们使用以下语法: 3&lt;&gt;/dev/tcp/www.google.com/80 我注意到这也有效: &lt;/dev/tcp/www.google.com/80 为什么要使用bash调用某些内容,需要使用这些符号?

4
如果我开始过多的后台工作会怎样?
我需要使用Expect脚本在700个网络设备上进行一些工作。我可以按顺序完成它,但是到目前为止,运行时间约为24小时。这主要是由于建立连接所花费的时间以及这些设备(旧设备)的输出延迟。我可以建立两个连接并使它们并行运行,但是我可以推多远呢? 我不认为我可以一次完成所有700个操作,但肯定会有一些限制。我的VM可以管理的telnet连接数量。 如果我确实尝试过像这样的循环来启动其中的700个: for node in `ls ~/sagLogs/`; do foo &amp; done 用 CPU 12个CPU x Intel(R)Xeon(R)CPU E5649 @ 2.53GHz 内存47.94 GB 我的问题是: 所有700个实例能否同时运行? 在服务器达到极限之前,我能走多远? 当达到该限制时,它会只是等待下一次迭代开始foo还是盒子崩溃? 不幸的是,我在公司生产环境中运行,所以我不能完全尝试看看会发生什么。

1
一致的Linux设备枚举
在我们的Linux框中,我们有USB-&gt;串行设备,该设备始终标识为 /dev/ttyACM0。因此,我编写了一个应用程序,直到昨天,一切正常。但是突然之间(是的,在远程演示中...),该设备停止了工作。经过快速研究,我发现连接更改为/dev/ttyACM1。有点不合时宜,但是现在我遇到了一个问题-如何明确识别我的设备?例如,尽管/dev/sd**已更改,但可以使用UUID初始化存储驱动器。有什么方法可以对串行设备执行此操作? 现在,我使用一个愚蠢的解决方法: for(int i = 0; i &lt; 10; i ++) { m_port = std::string("/dev/ttyACM") + (char)('0' + i); m_fd = open(m_port.c_str(), O_RDWR | O_NOCTTY | O_NDELAY); } 指向我们使用的设备的链接。
13 linux  usb-device 


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.