Unix & Linux

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


3
l在ls清单中是什么意思?
当我ls -adl .*在其中一个目录中运行时,我得到一个包含以下内容的文件: lrwxrwxrwx 1 user group 43 Jul 3 16:25 .#filename.py -> person@computer.edu.4018:1372874769 文件名和看起来像URL的东西以红色突出显示。是什么l意思lrwxrwxrwx?这是什么文件?
18 ls  symlink 

4
创建实际上是命令的虚拟文件
有什么方法可以创建虚拟文件,从而从文件中读取实际上是从stdout命令的读取中;写入文件就是stdin通过命令写入? 到目前为止,我已经inotifywait在文件上加上了一个错误,当文件被修改时,该命令会调用命令,并从文件中获取输入并写回。 我不喜欢inotifywait但是必须不断重新启动(并且我必须确保它始终在运行)。我可能每周只使用一次此文件。
18 files  stdin 

3
tee + cat:多次使用输出,然后合并结果
例如,如果我调用某个命令,则echo可以在中使用该命令的结果在其他多个命令中tee。例: echo "Hello world!" | tee >(command1) >(command2) >(command3) 使用cat我可以收集几个命令的结果。例: cat <(command1) <(command2) <(command3) 我希望能够同时做这两种事情,这样我就可以tee在其他输出(例如,echo我编写的输出)上调用这些命令,然后使用以下命令将所有结果收集到一个输出中cat。 保持结果为了这一点很重要,这意味着输出的线路command1,command2并且command3不应该纠缠在一起,但订购的命令是(因为它与发生cat)。 可能有比cat和更好的选择,tee但是到目前为止,这些是我所知道的。 我想避免使用临时文件,因为输入和输出的大小可能很大。 我该怎么办? PD:另一个问题是这种情况是循环发生的,这使得处理临时文件更加困难。这是我目前拥有的代码,适用于小型测试用例,但是当以我不理解的方式从auxfile读取和写入时,它会创建无限循环。 somefunction() { if [ $1 -eq 1 ] then echo "Hello world!" else somefunction $(( $1 - 1 )) > auxfile cat <(command1 < auxfile) \ <(command2 < auxfile) \ …
18 pipe  cat  tee  concurrency 

1
什么是nvme命名空间?它们如何运作?
我最近开始支持使用内置nvme ssds安装在设备上的Linux。我注意到设备文件有一个额外的数字,除了标识驱动器号和分区号的数字。IDE / SATA / SCSI驱动器通常仅具有驱动器号和分区号。 例如:/ dev / nvme0n1p2 我想知道n1部分是什么,经过一番搜索后,它看起来像标识了一个nvme'命名空间'。它的定义有点模糊:“ NVMe命名空间是一定数量的非易失性存储器(NVM),可以将其格式化为逻辑块。” 那么,这是否像在硬件控制器级别定义的分区那样,而不是在MBR或GPT分区表中?名称空间可以跨多个物理nvme ssd吗?例如,您能否创建一个名称空间,将多个ssd的存储汇集到一个逻辑名称空间中,类似于RAID 0? 对于使用分区表或LVM或可以管理多个卷(例如ZFS,Btrfs等)的文件系统无法实现的NVME命名空间,您将如何处理? 此外,为什么命名空间编号似乎从1开始而不是0?这与NVME在较低级别上跟踪名称空间编号有关(例如,分区也从1开始,而不是0,因为这是设置分区号的标准的方式,因此Linux内核仅使用分区号)存储在磁盘上的是-我猜nvme的工作方式相同吗?)
18 linux  devices  nvme 

3
chrony vs. systemd-timesyncd –作为NTP客户端有什么区别和用例?
以某种方式但并非完全基于较旧的问题“ ntpd与systemd-timesyncd-如何实现可靠的NTP同步?” ,我想问一下NTP 客户端上 chrony和systemd-timesyncd之间的区别。 我知道systemd-timesyncd是一个或多或少的ntp客户端实现,而chrony是一个完整的NTP守护程序解决方案,恰好包含一个NTP客户端。 ubuntu Bionic Beaver发行说明指出以下内容: 为了实现简单的时间同步,基本系统已经附带了systemd-timesyncd。仅需要Chrony充当时间服务器,或者如果您想要播发的广告更加准确和高效地同步。 我喜欢使用最小的预安装工具来完成这项工作的想法,并且我很确定systemd-timesyncd会在我的用例中完成这项工作,但我仍然很好奇: 两者在准确性方面的真实世界有何不同? 效率有何不同? 什么是“非简单”时间同步又需要作为NTP客户端的chronase用例?
18 systemd  ntp  chrony 

1
在Heredoc中传递和设置变量
我有一个脚本,必须在许多不同的远程计算机上执行许多不同的事情。我以为Heredoc可以解决这个问题,但是我无法使用脚本中其他地方定义的变量和 Heredoc中定义的变量。 这是一些代码: #!/bin/sh FOO="foo" ssh some.remote.host << EOF BAR="bar" echo "FOO=$FOO" echo "BAR=$BAR" EOF 这只会打印以下内容: FOO = BAR =酒吧 但是,如果我这样引用EOF行: ssh some.remote.host << "EOF" 那么它仅显示以下内容: FOO = foo BAR = 关于如何在Heredoc中使用这两个变量的任何提示? 谢谢。

4
将_ sudo systemctl的默认编辑器更改为vim edit [unit-file] _
[在Xorg上使用gnome3和gdm的4.13.12-1-ARCH] 我已经将VISUAL和EDITOR env-vars设置为vim。同样,我确实尝试SYSTEMD_EDITOR="vim"; export SYSTEMD_EDITOR 了〜/ .bashrc,但没有成功。 通过以下方式在Arch(systemd)中修改单位文件时 $ sudo systemctl edit _unit_ 我发现自己凝视着nano。生命太短暂了,我一定要vim。我该怎么做呢 ?
18 systemd  vim  editors 

3
env,setenv,export和何时使用之间有什么区别?
最近,我注意到我们有3个设置环境变量的选项: export envVar1=1 setenv envVar2=2 env envVAr3=3 如果还有其他方法,请赐教。 我什么时候比另一个更喜欢?请提出准则。 至于外壳兼容性,哪一个是最广泛的(涵盖更多的外壳方言)? 我已经注意到了这个答案,但是我希望扩大使用范围env和使用偏好指南。

1
禁用systemd计时器单元的正确方法是哪种?
我已经成功地将一些cron作业迁移到了systemd。我遵循了一些指南,并采用了创建3个文件的标准方法: myjob.timer - systemd timer unit myjob.service - systemd service unit myjob.sh 您可能会猜到,在某个时间触发了myjob.timer,它运行myjob.service,而myjob.service依次执行myjob.sh。 我为所有计时器都设置了相同的设置,现在我看到一切正常,我想禁用myjob.timer,它只是一个测试器。 我只是做: systemctl --user disable myjob.timer 还是我还必须做: systemctl --user disable myjob.service 正确的做法是什么?我是systemd的新手,所以我想学习如何以正确的方式做事。我猜测禁用两个设备是正确的,以使系统免于多余的行李。

2
运行ssh命令时如何设置PATH?
假设用户具有/bin/bash作为shell的权限/etc/passwd。然后ssh user@host command使用Bash运行命令。但是,该外壳既不是登录名也不是交互式的,这意味着也~/.bash_profile没有~/.bashrc来源。在那种情况下,如何设置PATH环境变量,以便可以找到并执行可执行文件?是否建议在实际命令前加上前缀source ~/.bashrc?
18 bash  ssh 

2
ProxyCommand用于多跳和提示身份验证
我该如何重写以下命令ProxyCommand? ssh -l username1 -t jumphost1 \ ssh -l username2 -t jumphost2 \ ssh -l username3 -t jumphost3 \ ssh -l username4 server 这不行 ssh -o ProxyCommand="\ ssh -l username1 -t jumphost1 \ ssh -l username2 -t jumphost2 \ ssh -l username3 -t jumphost3" \ -l username4 server username1@jumphost1's password: …
18 ssh 

4
如何在源代码中的read -p提示符下将长字符串分成多行?
我正在编写将以方式运行的安装脚本/bin/sh。 有一行提示输入文件: read -p "goat can try change directory if cd fails to do so. Would you like to add this feature? [Y|n] " REPLY 我想把这条长行分成多行,以使它们都不超过80个字符。我说的是脚本源代码中的几行;与执行脚本时要在屏幕上实际打印的行无关! 我尝试过的 第一手方法: read -p "goat can try change directory if cd fails to do so. " \ "Would you like to add this feature? …

1
在Fedora中使用dnf在本地安装而不使用Internet连接
我正在尝试在rpm不使用互联网的情况下在本地安装软件包。我尝试了以下方法: sudo rpm -u kernel-devel-4.2.7-200.fc22.x86_64.rpm 我得到: error: kernel-devel-4.2.7-200.fc22.x86_64.rpm: hdr blob(2060952): BAD, read returned 0 error: kernel-devel-4.2.7-200.fc22.x86_64.rpm cannot be installed 我也尝试过: sudo dnf --disablerepo='*' install kernel-devel-4.2.7-200.fc22.x86_64.rpm 而且它似乎仍在使用互联网,因此我无法弄清楚它是否有效,因为互联网连接速度非常慢。 有没有办法来解决这个问题?
18 rpm  dnf 

5
如果未定义变量,请避免运行脚本
我有一个脚本看起来像: c=0 for f in */*; do cp -v "$f" "/myhome/CE$(printf '%0*d' 2 $BATCHNUM)-new-stuctures_extracted/test-$(printf '%0*d' 5 $c)" c=$((c=c+1)) done 但是,用户必须提供一个调用BATCHNUM的变量,否则我需要强制该脚本停止运行。如果我也可以强制停止调用此脚本的脚本(甚至是调用#2脚本的#1脚本也要停止),那会更好。

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.