小编Seb*_*ian的帖子

是否有用于输出制表符分隔列的简单命令?

例如,我有一个文件(用 生成echo -e "var1\tvar2\t\var3\tvar4" > foo)输出为:

$ cat foo
case    elems   meshing nlsys
uniform 2350    0.076662        2.78
non-conformal   348     0.013332        0.55
scale   318     0.013333        0.44
smarter 504     0.016666        0.64
submodel        360     .009999 0.40
unstruct-quad   640     0.019999        0.80
unstruct-tri    1484    0.01    0.88
Run Code Online (Sandbox Code Playgroud)

我更喜欢这样的输出(这里我使用vim:set tabstop=14):

case          elems         meshing       nlsys
uniform       2350          0.076662      2.78
non-conformal 348           0.013332      0.55
scale         318           0.013333      0.44
smarter       504           0.016666      0.64
submodel      360           .009999       0.40
unstruct-quad 640           0.019999      0.80
unstruct-tri  1484          0.01 …
Run Code Online (Sandbox Code Playgroud)

command-line shell cat columns

84
推荐指数
4
解决办法
9万
查看次数

处理 sshfs 挂载的服务器断开连接的更好方法是什么?

我有几个通过sshfs挂载的目录。我有时会与服务器断开连接(我无法配置)。我通常像这样挂载目录

sshfs user@server.example.com:/home/user /mnt/example
Run Code Online (Sandbox Code Playgroud)

当服务器断开连接时,sshfs 子系统不会卸载/释放目录,而是将其锁定为不可访问。键入时,安装仍然可见mount。当我打字

ls /mnt/example
Run Code Online (Sandbox Code Playgroud)

进程被锁定(Ctrl+c也无济于事)。我因此做

sudo umount -l /mnt/example
# find pid of corresponding process:
ps aux | grep example.com
kill -9 <pid of locked sshfs process>
Run Code Online (Sandbox Code Playgroud)

有没有更好的方法来处理这个问题?显然sshfs应该执行卸载和清理......理想情况下它会自动重新连接。

ssh mount sshfs

71
推荐指数
3
解决办法
5万
查看次数

为什么 Arch Linux 中没有 -dev 包?

我知道像GentooSlackware这样的基于源代码的发行不需要*-dev程序版本。它们包括源代码以及用于在本地编译所有内容的头文件。

但是我从未*-devArch Linux 中看到过包,尽管它是基于包的。我*-dev在其他发行版中遇到了很多包。

compiling source arch-linux package-management

34
推荐指数
2
解决办法
2万
查看次数

为什么“ls *”比“ls”花费的时间长?

我在一个目录中有几个文件:

$ ls | wc -l
9376
Run Code Online (Sandbox Code Playgroud)

任何人都可以解释为什么使用ls *and有这么大的时差ls

$ time ls > /dev/null
real    0m0.118s
user    0m0.106s
sys     0m0.011s
Run Code Online (Sandbox Code Playgroud)

$ time ls * > /dev/null
real    1m32.602s
user    0m0.233s
sys     0m0.438s
Run Code Online (Sandbox Code Playgroud)

好吧,这是一个极端的例子,可能会有所增强,因为该目录位于通用并行文件系统 (GPFS) 上。但我也可以看到本地文件系统的显着放缓。

编辑:

$ time ls -l > /dev/null
real    0m58.772s
user    0m0.113s
sys     0m0.452s
$ time ls -l * > /dev/null
real    1m19.538s
user    0m0.252s
sys     0m0.461s
Run Code Online (Sandbox Code Playgroud)

我应该补充一点,在我的例子中没有子目录:

$ diff <(ls) <(ls *)
$
Run Code Online (Sandbox Code Playgroud)

ls performance filesystems time

28
推荐指数
1
解决办法
3366
查看次数

Git 寻呼机较少,但是是什么导致输出着色?

less根据这个线程,它本身不能进行语法高亮显示。

但是,git diff在它的默认寻呼机 less 中很好地显示了彩色输出。当我将 的输出重定向git diff到文件中时,看不到颜色转义序列。

是否git diff知道它被发送到哪里,并相应地格式化输出?那怎么办呢?


我只是注意到 git 为diff输出着色(例如git diff),但是,它通常不知道如何语法突出显示。例如

git show 415fec6:log.tex
Run Code Online (Sandbox Code Playgroud)

不启用任何类似 TeX 的语法。


阅读git资料,我发现以下提示

diff.h

int use_color;
Run Code Online (Sandbox Code Playgroud)

我以前指的是语法高亮,但那是不正确的。我的意思是输出着色,参见例如

示例颜色输出

colors pager diff git colordiff

18
推荐指数
2
解决办法
5725
查看次数

下载完成后,Firefox 会发送什么样的通知?

我正在使用suckless (dwm)的动态窗口管理器。我注意到它firefox能够在下载完成后发送很好的通知。看两个图

没有通知

当我使用不同的标签时,我会1在完成下载时收到这种通知(反向标签)。

通知

我想将这种通知用于我的其他uxterms. 例如,如果一个长时间的工作已经完成,它应该像上面一样亮起来。充其量,这也适用于GNU screen我正在使用的会话。

我不确定这是Xorg一个dwm功能还是一个功能。有任何想法吗?

编辑: @scai 的回答非常中肯,但缺乏与GNU screen. 如果有人仍然可以改进这一点,我们将不胜感激。

window-manager xterm notifications dwm

8
推荐指数
1
解决办法
441
查看次数

更改 /proc 中文件的 UID

这个关于更改UID用户的问题的后续行动中,建议更改系统上所有文件的所有权(此答案

find / -uid 1000 -exec chown 5000 '{}' \+
Run Code Online (Sandbox Code Playgroud)

这里1000是旧的UID5000是新的。我刚刚列出了所有文件(外部/home/sebUID=1000,发现大多数都在/proc目录中。

find / -uid 1000 \! -wholename '/home/seb/*'
Run Code Online (Sandbox Code Playgroud)

执行建议的更改是否需要保存有必要UID?我不熟悉这些/proc文件的用途,但我认为当我使用新用户登录时,它们会根据需要创建。

注意:也有一些/dev属于 的文件UID=1000,但这些只是用户打开的终端(例如/dev/pts/23

users setuid su proc

6
推荐指数
1
解决办法
3974
查看次数

在过时的生产机器上安装最新软件的有效方法是什么?

我的公司使用一个过时的小型集群(CentOS 5.4)来进行数字运算(更具体地说是有限元计算)。他们使用的是商业软件包,对 Linux 一无所知。只要机器运行,他们就不想改变机器上的任何东西,我认为这是一个时间有效的策略。我没有管理权限。

我可以让他们安装较小的包,但不能将例如 python 版本从 2.4 更改为 2.6+,所以我决定编译当前版本 ( ./configure --prefix=/home/mysuser/root2) 并遇到了一些依赖项问题(例如 readline、zlib、curses 的错误版本, bz2 ... 或未找到软件包)。我还需要更新抱怨缺少GMP,MPFRMPC.

这样做的原因是我想编译其他测试软件来在这些机器上运行。我该怎么做才能有效地安装我需要的软件包以编译我需要使用的软件?我在其他地方使用archlinux并且会发现能够按照这些方式做一些事情非常方便

pacman --root /home/myuser/root2 -S <package>
Run Code Online (Sandbox Code Playgroud)

但我不知道这是否可能或聪明。

其他相关的 SE 问题:gentoo-prefixpkgsrc似乎并不那么容易(不过我可能错了)。

compiling upgrade not-root-user

6
推荐指数
1
解决办法
428
查看次数

如何确保一次只有一个实例访问文件夹中的文件?

我有一个 shell 脚本,它将由多个实例执行,如果一个实例访问一个文件并执行一些操作,我如何确保其他实例没有访问同一个文件并破坏数据?

我的问题不是关于控制并行执行,而是处理文件锁定或标记机制。

请求一些建议以继续。

linux shell-script lock open-files files

6
推荐指数
1
解决办法
1267
查看次数

如何强制 bash 取消分配没有名称的大括号扩展变量?

对于基准测试,我运行了以下命令:

for i in {1..100000000}; do 
  echo "$i" line >> file
done
Run Code Online (Sandbox Code Playgroud)

Bash扩展了大括号并将列表存储1 2 3 4 5 6 ... 100000000在内存中。

我认为这会以某种方式解除分配。毕竟,它是一个临时变量。几天过去了,该bash进程仍然占用 17.9GB 的内存。

我可以强制 bash 清除这些临时变量吗?我不能使用unset,因为我不知道变量名。(显然unset i没有帮助)

当然,一种解决方法是关闭外壳并打开一个新的外壳。

我还在 bash 邮件列表中询问了这个问题,并得到了Chet Ramsey的有用回复:

那不是内存泄漏。Malloc 实现不需要将内存释放回内核;bash malloc(和其他人)只在有限的情况下这样做。使用 mmap 或 sbrk 从内核获取并由 malloc 实现保存在缓存中的内存不构成泄漏。泄漏是应用程序或 ma​​lloc 本身不再有句柄的内存。

malloc() 基本上是应用程序和内核之间的缓存。它可以决定何时以及如何将内存返还给内核。

shell bash memory brace-expansion

5
推荐指数
1
解决办法
881
查看次数