Unix & Linux

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

8
在大文件中替换包含换行符的字符串
有谁知道基于非行的工具以某种内存有效的方式“二进制”搜索/替换字符串?也看到这个问题。 我有一个+ 2GB的文本文件,我想对其进行处理,类似于此操作: sed -e 's/>\n/>/g' 这意味着,我想删除a之后出现的所有换行符>,但不能在其他地方删除,以便排除tr -d。 此命令(我从类似问题的答案中得到)失败,并带有couldn't re-allocate memory: sed --unbuffered ':a;N;$!ba;s/>\n/>/g' 那么,还有其他方法不求助于C吗?我讨厌perl,但愿意在这种情况下例外:-) 我不确定数据中是否会出现任何字符,因此\n,如果可能的话,我想避免用另一个字符临时替换。 有什么好主意吗?

4
如何在Docker内部替换lsof(本机,不是基于LXC)
我有点困惑,因为在Docker容器lsof -i内没有任何输出。 示例(来自容器内部的所有命令/输出): [1] root@ec016481cf5f:/# lsof -i [1] root@ec016481cf5f:/# netstat -tulpn Active Internet connections (only servers) Proto Recv-Q Send-Q Local Address Foreign Address State PID/Program name tcp 0 0 0.0.0.0:22 0.0.0.0:* LISTEN - tcp6 0 0 :::22 :::* LISTEN - 另请注意,不会显示PID或程序名称netstat。fuser还给出了一些令人困惑的输出,并且也无法精确定位PID。 谁能对此有所启示? 我该如何替代lsof -i(也要查看进程名称!) 为什么产量netstat也会下降? 注意:容器运行"ExecDriver": "native-0.1",这是Docker自己的执行层,而不是LXC。 [1] root@ec016481cf5f:/# fuser …

4
比较不同文件的两列并打印是否匹配
我正在使用Solaris 10,因此涉及-f的grep选项不起作用。 我有两个管道分隔的文件: 文件1: abc|123|BNY|apple| cab|234|cyx|orange| def|kumar|pki|bird| 文件2: abc|123| kumar|pki| cab|234 我想将file2的前两列与file1进行比较(在前两列中搜索file1的全部内容),如果它们匹配,则打印出file1的匹配行。然后搜索文件2的第二行,依此类推。 预期产量: abc|123|BNY|apple| cab|234|cyx|orange| 我的文件很大,包含大约40万行,因此我想加快执行速度。

4
如果密钥已经在那里,请让ssh-add安静
我想放在ssh-add /path/to/special_key脚本的顶部。这可以正常工作,但始终提示您输入密码。这很奇怪,有点令人讨厌,因为即使ssh-add -l显示密钥已经被添加,它仍然要求输入密码。 有没有办法告诉它:“添加此密钥并询问密码是否还没有添加,否则什么也不做”?

2
是否可以在安装之前从终端查看软件包信息?
我想知道是否有可能在安装之前检查软件包的信息,而无需打开Web浏览器在其中查找。 例如,说我输入 ~$ asdf 然后我看到推荐的软件包: No command 'asdf' found, did you mean: Command 'asdfg' from package 'aoeui' (universe) Command 'sadf' from package 'sysstat' (main) Command 'sdf' from package 'sdf' (universe) asdf: command not found 说我想找出软件包“ sdf”的作用。我可以在终端中找到此信息,还是必须以慢速的方式在网上查找它?

1
是否可以从/ proc获取进程组ID?
在“ /programming/13038143/how-to-get-pids-in-one-process-group-in-linux-os ”中,我看到了所有提及的答案,ps而没有提及/proc。 “ ps”似乎不是很可移植(Android和Busybox版本期望使用不同的参数),我希望能够使用简单且可移植的工具列出带有pgid的pid。 在/proc/.../status中,我看到了Tgid:(线程组ID),Gid:(用于安全性而不是用于将进程分组在一起的组ID),但是没有PGid:... 还有什么(不使用ps)从pid获取pgid的方法?


1
$ PATH环境变量中的百分比
我的$ PATH看起来像这样: /home/torbjorr/deployed/vector/x86_64-GNU%2fLinux:/home/torbjorr/deployed/typewriter/x86_64-GNU%2fLinux:/home/torbjorr/deployed/mustudio/x86_64-GNU%2fLinux:/home/torbjorr/deployed/mathext/x86_64-GNU%2fLinux:/home/torbjorr/deployed/doxymax/x86_64-GNU%2fLinux:/home/torbjorr/deployed/c2tex/x86_64-GNU%2fLinux:/home/torbjorr/deployed/x86_64-GNU%2fLinux/wand:/home/torbjorr/deployed/x86_64-GNU%2fLinux/spellesc:/home/torbjorr/deployed/x86_64-GNU%2fLinux/projinit:/home/torbjorr/deployed/x86_64-GNU%2fLinux/herbs:/home/torbjorr/bin:/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin:/usr/games:/usr/local/games 在bash中,我可以毫无问题地调用位于 /home/torbjorr/deployed/x86_64-GNU%2fLinux/wand 喜欢 $ wand (i) Mål från "main.cpp" har registrerats (i) Skapar katalog "__wand_targets_dbg" (i) Kör g++ "main.cpp" -fpic -L"/home/torbjorr/deployed" -g -Wall -std=c++11 -I"/home/torbjorr/deployed" -o "__wand_targets_dbg/cb-template 但是,在bourne shell兼容模式下,找不到魔杖: $ wand sh: 2: wand: not found 看来问题出在这些路径中的%符号。该符号已通过URL编码添加,因此即使名称不是有效的文件名,也可以在目录名称中使用名称“ GNU / Linux”。是否可以在sh中使用该名称,或者使sh命令作为bash使用。也就是说,即使使用/ bin / sh命令调用了bash,make bash的行为也一样,该命令还是链接到bash。
16 shell  path  dash  ash 

4
我可以在ext4外部硬盘驱动器的计算机之间移植用户权限吗?
我有一个外部USB 3磁盘驱动器(2TB容量),很可能会在计算机之间移动。该磁盘具有一个GUID分区表和一个ext4分区。除非提升过程(sudo),否则我将无法写入磁盘。 到目前为止,我正在考虑尝试以下一种或两种方法,并且想知道每种方法的缺点- chmod 777 /mnt/externalDrive chown nobody:nogroup /mnt/externalDrive 如果我授予777权限,并且user1(UID:1005)写入了该权限,后来又将磁盘移到user7为UID:1005的另一台计算机上,会发生什么情况?user7成为该计算机上文件的所有者吗?在我看来,我将不得不定期chown -R nobody:nogroup /mnt/externalDrive在磁盘上运行。 我正在考虑的任何明显不良做法吗?该磁盘很可能包含视频,音乐和图片,它们不需要像某些财务数据一样受到保护。

2
bash中set -k选项的实际用法
我们什么时候set -k在bash中使用option? Bash参考手册说, 所有赋值语句形式的参数都放置在命令环境中,而不仅仅是命令名称之前的参数。 我了解该选项的作用,但是无法想象我们何时需要它。
16 bash  shell 

1
重击以逗号分隔的值
我想为逗号分隔的参数列表创建完成规则。例如,我有接收服务器名称列表的命令: myscript -s name1,name2,name3 现在,我已经完成以下工作: _myscript () { local cur prev opts _get_comp_words_by_ref cur prev opts='-s' servers='name1 name2 name3' if [[ ${cur} == -* ]] ; then COMPREPLY=( $(compgen -W "${opts}" -- ${cur}) ) else case "${prev}" in -s) if [[ "$cur" == *,* ]]; then local realcur prefix realcur=${cur##*,} …

6
SSH自动远程备份
我有两台机器,A和B。机器A可以装入B。A有很多可用空间。B的数据存在某种风险。 如何将所有B的数据A自动备份到。它不必非常频繁,但应免提。每次A启动都会足够频繁。我听说同步可以做到这一点。
16 ssh  backup 

5
有状态的bash功能
我想在Bash中实现一个函数,该函数在每次调用时都会增加(并返回)计数。不幸的是,这似乎很简单,因为我正在子外壳中调用该函数,因此它无法修改其父外壳的变量。 这是我的尝试: PS_COUNT=0 ps_count_inc() { let PS_COUNT=PS_COUNT+1 echo $PS_COUNT } ps_count_reset() { let PS_COUNT=0 } 这将按如下方式使用(因此需要从子shell调用函数): PS1='$(ps_count_reset)> ' PS2='$(ps_count_inc) ' 这样,我将获得一个编号的多行提示: > echo 'this 1 is 2 a 3 test' 可爱。但由于上述限制,因此无法使用。 不可行的解决方案是将计数写入文件而不是变量。但是,这会在多个同时运行的会话之间产生冲突。当然,我可以将Shell的进程ID附加到文件名中。但是我希望有一个更好的解决方案,它不会使我的系统中包含很多文件。


4
将当前目录中的每个pdf转换为png
我想编写一个bash脚本,将.pdf当前目录中的每个文件转换为一个.png文件。例如: $ls . a.pdf b.pdf $./pdf2png.sh Converting pdfs to pngs a.pdf -> a.png b.pdf -> b.png 这是我的最佳尝试: #!/bin/bash convert -verbose -density 500 -resize '800' a.pdf a.png convert -verbose -density 500 -resize '800' b.pdf b.png
16 bash  imagemagick 

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.