Unix & Linux

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

1
为什么我的防火墙(iptables)会干扰我的网桥(brctl)?
我设置了一个br0“附加”到两个接口的桥: eth0,我的物理接口已连接到真实的局域网, vnet0,KVM虚拟接口(连接到Windows VM)。 我在前向链中有一条防火墙规则: iptables -A FORWARD -j REJECT 现在,唯一有效的ping是从VM到主机。 该br0接口拥有我的主机的IP地址。eth0而vnet0没有“拥有”任何IP,从主机点。Windows VM具有静态IP配置。 如果将我的iptables规则更改为ACCEPT(甚至使用更具限制性的iptables -A FORWARD -o br0 -j ACCEPT),一切都将正常工作!(即,我可以从VM ping任何LAN计算机,反之亦然)。 所有IP转发内核选项均被禁用(如net.ipv4.ip_forward = 0)。 那么,netfilter防火墙如何阻止甚至没有启用的功能? 此外,VM-LAN流量仅应包含eth0和vnet0。但是,似乎允许-o br0“作品” 进行正向流量(尽管我并未非常仔细地检查)。

3
一次替换多个字符串
我正在寻找一种使用通用Unix工具(bash,sed,awk或perl)用具体值替换模板文件中占位符字符串的方法。重要的是,一次更换即可完成更换,也就是说,对于另一次更换,不得考虑已经扫描/更换的物品。例如,这两次尝试均失败: echo "AB" | awk '{gsub("A","B");gsub("B","A");print}' >> AA echo "AB" | sed 's/A/B/g;s/B/A/g' >> AA 在这种情况下,正确的结果当然是BA。 通常,该解决方案应等效于从左至右扫描输入,以与给定替换字符串之一进行最长匹​​配,并且对于每个匹配,执行替换并从输入中的该点继续进行操作(无已读取的输入,也不应考虑执行替换操作以进行匹配)。实际上,细节并不重要,只是替换的结果从不考虑全部或部分替换。 注意我只是在寻找正确的通用解决方案。请不要提出某些输入(输入文件,搜索和替换对)失败的解决方案,但是看起来不太可能。
11 bash  sed  awk  string  replace 

3
重击的历史
Bash的“ globbing”和正则表达式为何不相同,是否有历史原因?例如,我相信Bash中的[1-2]*匹配项以1或2开头,后跟其他任何内容,而正则表达式[1-2]*仅匹配1和2的序列。我的Bash脚本和REGEX foo都非常薄弱,我经常遇到与这些差异相关的问题,这让我很好奇为什么它们不同。

2
在ssh -t上的stderr
这会将输出发送到STDERR,但不会传播Ctrl+ C(即Ctrl+ C将杀死ssh但不会杀死remote sleep): $ ssh localhost 'sleep 100;echo foo ">&2"' 这会传播Ctrl+ C(即Ctrl+ C将杀死ssh并远程sleep发送),但会将STDERR发送到STDOUT: $ ssh -tt localhost 'sleep 100;echo foo ">&2"' 在仍然传播Ctrl+的同时,如何强制第二个将STDERR输出发送到STDERR C? 背景 GNU Parallel使用'ssh -tt'来传播Ctrl+ C。这样可以杀死远程运行的作业。但是发送到STDERR的数据应在接收端继续发送到STDERR。

2
在Linux中不使用网络命令行的情况下,如何知道打开端口的列表以及拥有它们的进程?
我想知道嵌入式Linux中哪些进程使用了​​哪些端口。由于它是简单的嵌入式Linux,因此没有网络命令行,如netstat,lsof。(仅存在基本命令行,例如cat,cp,echo等)。 部分解决方案似乎是使用“ cat / proc / net / tcp”和“ cat / proc / net / udp”命令行。但是,我不确定这些命令行的打印列表是否显示了所有正在使用的端口,并且该列表没有显示哪个进程绑定到了特定端口。 任何意见,将不胜感激。

5
如何将文件从多个服务器复制到本地系统?
我们在诸如app00,app01等服务器上部署了一个应用程序。我需要将所有这些服务器中的单个日志文件复制到本地Mac上,以便执行一些grepping和cuting。 我使用csshX来查看此文件,但找不到与scp等效的文件。我基本上想要两件事: 能够连接n个此类服务器并复制文件 通过在日志文件前添加服务器主机名,可以避免在本地命名冲突 我该怎么做呢?
11 scp  file-copy 

2
评估$ BASH_COMMAND是否安全?
我正在研究一个shell脚本,该脚本从变量构造一个复杂的命令,例如像这样(使用我从Bash FAQ中学到的技术): #!/bin/bash SOME_ARG="abc" ANOTHER_ARG="def" some_complex_command \ ${SOME_ARG:+--do-something "$SOME_ARG"} \ ${ANOTHER_ARG:+--with "$ANOTHER_ARG"} 该脚本动态添加的参数--do-something "$SOME_ARG",并--with "$ANOTHER_ARG"以some_complex_command如果这些变量的定义。到目前为止,一切正常。 但是现在我还希望能够在运行命令时(例如,在调试模式下运行脚本时)打印或记录命令。因此,当我的脚本运行时some_complex_command --do-something abc --with def,我也希望将此命令包含在变量中,以便例如将其记录到syslog中。 Bash FAQ演示了一种用于此目的的DEBUG陷阱和$BASH_COMMAND变量(例如用于调试目的)的技术。我已经尝试使用以下代码: #!/bin/bash ARG="test string" trap 'COMMAND="$BASH_COMMAND"; trap - DEBUG' DEBUG echo "$ARG" echo "Command was: ${COMMAND}" 这可行,但是不会在命令中扩展变量: host ~ # ./test.sh test string Command was: echo "$ARG" 我想我必须使用eval扩大echo "$ARG"到echo …
11 bash 


2
如何防止Linux内核从睡眠中唤醒辅助HDD
有没有一种方法可以指示(Linux)内核在系统睡眠/唤醒周期后不唤醒辅助硬盘?我之所以问是因为,在我的笔记本电脑中,我有一个SSD作为主驱动器,其中包含系统根目录和一个辅助HDD,其中保留着备用系统和我偶尔会访问的文件。由于笔记本电脑通常会经历许多天的每天睡眠/唤醒周期(我的意思是挂到RAM,而不是休眠),所以我想手动使辅助HDD进入睡眠状态,并指示内核在整个系统睡眠期间使其保持睡眠状态。 /唤醒周期。

1
iptables中的addrtype的定义是什么?
我热衷于addrtype在-src我的过滤器链之一中结合使用,例如,这样可以丢弃一些Bogon ip: -A INPUT -p tcp --dport 80 -m addrtype --src-type UNICAST ! -s 127.0.0.0/8 -j WEB 手册页显示以下内容 addrtype 此模块根据数据包的地址类型匹配数据包。地址类型用于内核网络堆栈中,并将地址分为各种组。该组的确切定义取决于特定的第三层协议。 以下地址类型是可能的: UNSPEC一个未指定的地址(即0.0.0.0) UNICAST单播地址 本地地址 广播广播地址 ANYCAST任播数据包 多播多播地址 黑洞黑洞地址 无法访问的地址 禁止使用禁止的地址 扔固定 NAT修复程序 XRESOLVE 目前尚不清楚确切的定义是什么,它是否取决于特定的第3层协议。我是这样认为的: UNICAST(!广播,!MULTICAST,!ANYCAST) 当地(127.0.0.0/8) 广播(*.*.*.255) ANYCAST(*.*.*.*) 多播(224.0.0.0/4) 是否有人清楚这意味着什么以及如何通过iptables实现它(例如,它如何知道黑洞在哪里)?
11 iptables 

4
是否总是会有一对相同的UID和GID?
我必须使用来更改文件/目录的所有权chmod。我只知道所有者的用户名,但想同时更改默认组名。在此阶段,群组名称尚未确定,因此我要输入用户名 chown -R username:username path_to_dir 命令可能会针对不同的系统/用户运行,所以我担心的是,Linux总是会有一对username(user):username(group)或在某些时候此默认的group_name可能会出错。 虽然我已经开始从用户所属的位置查找GID id username | tr '(=)' ':' | awk -F: '{print $3} 但是对于知识我想知道。到目前为止,/etc/passwd /etc/groups除少数用户(例如“ shutdown,halt,sync,opeartor”)外,所有用户都已在组中列出了analysys 。 编辑1:id -gn用户名也是不错的选择
11 linux  chown  passwd 

2
是否可以使用“。” 在Ubuntu和OS X中的.bashrc中运行文件而不是源文件?
好的,因此source可以分别在当前外壳中运行该脚本.,例如,在运行脚本中使用“。”和“ source”进行了详细说明,但是,具体地说,在我的.bashrc文件中,我具有: [ -f ~/.bash_aliases ] && source ~/.bash_aliases [ -f ~/.git-completion.bash ] && source ~/.git-completion.bash [ -s ~/.autojump/etc/profile.d/autojump.sh ] && source ~/.autojump/etc/profile.d/autojump.sh 我可以将其替换为: [ -f ~/.bash_aliases ] && . ~/.bash_aliases [ -f ~/.git-completion.bash ] && . ~/.git-completion.bash [ -s ~/.autojump/etc/profile.d/autojump.sh ] && . ~/.autojump/etc/profile.d/autojump.sh 可以在OS X上使用-是“ POSIX”问题吗? 我尝试了一下,以上内容似乎仍然可以在Ubuntu上使用(因此它们实际上与sourceand都可以使用.,也就是说,它们在外壳程序中为我提供了所需的功能)。我应该选择一个,还是错过了什么? FWIW,在OS …
11 osx  bashrc  posix 

2
如何记录我的自定义bash函数和别名?
问题: 我有多个bash函数和别名。我不记得所有的人把我的头顶部,所以我通常最终会打开我.bash_functions和.bash_aliases档案找到我所需要的。 问题: 如何列出bash提示中的可用功能/别名? 我可以使用注释(如PHPDoc之类的)来记录bash函数/别名吗? 我只是想要一种简单/不错的方式来输出可用的内容而不必打开文件。运行命令并吐出我的函数/别名的动态列表会很酷(使用示例会是一个加号)。:)

2
Docker / LXC中的AppArmor配置文件
我有一个运行MySQL的Docker容器(LXC)。由于Docker的思想通常是“每个容器运行一个进程”,因此,如果我定义针对MySQL二进制文件的AppArmor配置文件,是否将其实施?我有办法测试吗?
11 lxc  apparmor  docker 

2
如何定义我可以在每个目录中使用的符号链接
是否可以设置符号链接,以便我可以project用来指向目录home/me/project,例如?这应该独立于文件系统中的位置。 我想使用诸如之类的命令cd project,nano project/file1.tex等等。 我必须写一个指向所有目录的符号链接吗?
11 bash  symlink 

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.