如果 ext4 分区中超过 40 亿个文件的限制,例如传输 50 亿个文件,会发生什么?
我运行 Arch 的树莓派 3 型号 B 遇到蓝牙问题。首先:
- 蓝牙以前可以完美运行
- AUR 的 pi-bluetooth 是最新的
- bluez 和 bluez-utils 是最新的
- 系统也是最新的(刚刚运行 pacman -Syu)
尽管如此,当我尝试使用蓝牙接口时,它还是不起作用。
bluetoothctl(以root身份),当我运行“扫描”时,告诉我
Failed to start discovery: org.bluez.Error.NotReady
wminput 找不到蓝牙接口:
No Bluetooth interface found
unable to connect
“systemctl status bluetooth”有以下输出:
● bluetooth.service - Bluetooth service
Loaded: loaded (/usr/lib/systemd/system/bluetooth.service; enabled; vendor preset: disabled)
Active: active (running) since Sat 2019-03-23 21:32:47 CET; 9min ago
Docs: man:bluetoothd(8)
Main PID: 2005 (bluetoothd)
Status: "Running"
Tasks: 1 (limit: 1404)
CGroup: /system.slice/bluetooth.service
└─2005 /usr/lib/bluetooth/bluetoothd
Mar 23 21:32:47 media.lan systemd[1]: Starting Bluetooth service...
Mar 23 21:32:47 media.lan bluetoothd[2005]: Bluetooth daemon 5.50
Mar 23 21:32:47 media.lan systemd[1]: Started Bluetooth service.
Mar 23 21:32:47 media.lan bluetoothd[2005]: Starting SDP server
Mar 23 21:32:47 media.lan bluetoothd[2005]: Bluetooth management interface 1.14 initialized
我在这里不知所措,一切似乎都很好,但没有任何效果。这里发生了什么?
我有两台运行 Ubuntu 18.04 的不同机器(家庭和工作)。昨晚vim
在家里冻僵了。我处于插入模式并输入并保存(esc :w
),但什么也没发生。状态栏仍显示-- INSERT --
,光标仍在原处闪烁。我卡住了。我找不到出路。我不能打字(我打字时什么也没发生),我不能四处走动(向上和向下箭头什么也没做)。它卡在插入模式中,光标在它所在的位置闪烁。
我肯定是在处理多项任务,并且可能在那里按下了其他一些键,但我不知道是什么键。不过已经很晚了,所以我关闭了终端窗口并再次尝试(我正在输入 git commit 消息)。它在我打字的中途再次git commit -m "don't need an editor for this"
发生,所以我改用了。然后我关闭了我的电脑并停止工作。
我想我只是累了,但是今天我在另一台笔记本电脑上工作时发生了这种情况。再次,我是多任务处理,不能发誓我没有输入任何奇怪的键序列,但如果我这样做是偶然的。并且同一终端中的其他选项卡不会被冻结。
visual
我习惯于在 vim 中陷入模式。这是我学到的一个技巧。但卡在插入模式?关于我可能做了什么以及如何摆脱它的任何想法?
根据我尝试查看的评论建议,.viminfo
但.viminfo
我看到的唯一内容是由我独家拥有的,root
并且似乎只显示我会编辑的内容sudo
:
# Input Line History (newest to oldest):
# Debug Line History (newest to oldest):
# Registers:
# File marks:
'0 1 0 /etc/neomuttrc
|4,48,1,0,1531789956,"/etc/neomuttrc"
'1 1 66 /etc/apt/sources.list.d/signal-bionic.list
|4,49,1,66,1530816565,"/etc/apt/sources.list.d/signal-bionic.list"
'2 51 0 /etc/apt/sources.list
|4,50,51,0,1530816531,"/etc/apt/sources.list"
# Jumplist (newest first):
-' 1 0 /etc/neomuttrc
|4,39,1,0,1531789956,"/etc/neomuttrc"
-' 1 66 /etc/apt/sources.list.d/signal-bionic.list
|4,39,1,66,1530816565,"/etc/apt/sources.list.d/signal-bionic.list"
-' 1 66 /etc/apt/sources.list.d/signal-bionic.list
|4,39,1,66,1530816565,"/etc/apt/sources.list.d/signal-bionic.list"
-' 51 0 /etc/apt/sources.list
|4,39,51,0,1530816531,"/etc/apt/sources.list"
-' 51 0 /etc/apt/sources.list
|4,39,51,0,1530816531,"/etc/apt/sources.list"
-' 51 0 /etc/apt/sources.list
|4,39,51,0,1530816531,"/etc/apt/sources.list"
-' 51 0 /etc/apt/sources.list
|4,39,51,0,1530816531,"/etc/apt/sources.list"
-' 1 0 /etc/apt/sources.list
|4,39,1,0,1530816447,"/etc/apt/sources.list"
-' 1 0 /etc/apt/sources.list
|4,39,1,0,1530816447,"/etc/apt/sources.list"
-' 1 0 /etc/apt/sources.list
|4,39,1,0,1530816447,"/etc/apt/sources.list"
-' 1 0 /etc/apt/sources.list
|4,39,1,0,1530816447,"/etc/apt/sources.list"
# History of marks within files (newest to oldest):
> /etc/neomuttrc
* 1531789952 0
" 1 0
> /etc/apt/sources.list.d/signal-bionic.list
* 1530816564 0
" 1 66
^ 1 67
. 1 66
+ 1 66
> /etc/apt/sources.list
* 1530816454 0
" 51 0
我没有一个非特权文件似乎很奇怪,.viminfo
但我做到了sudo udpatedb
,locate .viminfo
而且仍然没有超过一个根拥有的文件。
我找不到在 systemd 上执行某些本地脚本(或非常本地命令)的正确方法,我已经知道我不能为这种脚本创建服务(在 systemd 一个单元中)(或者我必须?)....
我发现的解决方法是创建 rc.local 并赋予它执行权限。
printf '#!/bin/bash \n\nexit 0' >/etc/rc.local
chmod +x /etc/rc.local
例如,如果我得到一个由你配置的简单 rc.local 的旧服务器,我会知道你做了什么以及在发行版上升级或安装新的东西会有多大的伤害,因为 rc.local 受到外部尊重包,但另一方面,如果我安装一个服务器并创建一个或两个或三个 systemd 单元(甚至是 sysvinit 服务),只是为了做一个简单的任务,这有时会让你的生活变得更艰难,而且比我的单元要多得多名称有一天可能会与发行版开发创建的新服务的名称发生冲突,并且可能会在升级时安装,从而给我的脚本带来麻烦!
我看到另一个问题询问rc.local 在哪里,答案是创建它并授予执行权限,我认为我的问题真的不是重复的,因为我不想知道它在哪里 - 相信我,我只是想要接受它已被弃用,但我找不到做这种事情的正确方法,我真的应该为一些简单的事情创建一个单元吗?
所以,我删除了我的主文件夹(或者更准确地说,我有写权限的所有文件)。发生的事情是我有
build="build"
...
rm -rf "${build}/"*
...
<do other things with $build>
在 bash 脚本中,并且在不再需要之后$build
,删除声明及其所有用法——但是rm
. Bash 愉快地扩展为rm -rf /*
. 是的。
我觉得自己很愚蠢,安装了备份,重新完成了我丢失的工作。试图摆脱耻辱。
现在,我想知道:编写 bash 脚本的技术是什么,这样就不会发生这种错误,或者至少不太可能发生这种错误?例如,我是否写过
FileUtils.rm_rf("#{build}/*")
在 Ruby 脚本中,解释器会抱怨build
没有被声明,所以语言保护了我。
我在 bash 中考虑的内容,除了 corraling rm
(正如相关问题中的许多答案所提到的,这并非没有问题):
rm -rf "./${build}/"*
那会杀死我当前的工作(一个 Git 存储库),但没有别的。rm
在当前目录之外操作时,它的变体/参数化需要交互。(找不到任何东西。)类似的效果。
是这样,还是有其他方法可以编写在这个意义上“健壮”的 bash 脚本?
正如你们大多数人多次做过的那样,使用以下命令查看长文本很方便less
:
some_command | less
现在它的标准输入连接到一个管道(FIFO)。它怎么还能读取像 up/down/quit 这样的命令?
在include/x86_64-linux-gnu/asm/unistd_64.h
,我看到一个名为的系统调用tuxcall
,
#define __NR_tuxcall 184
man tuxcall
除了说它是一个未实现的系统调用之外,没有什么关于它的。它做了什么?它从未实施过,还是在古代做了什么?
我正在尝试查找我的主目录和所有子目录中不存在的文件。
find ~/ -name "bogus"
几秒钟后给了我这个信息,但KDE 的dolphin
文件管理器需要将近 3 分钟才能做到这一点。这与我之前使用GNOMEbeagle
的经验一致。
find
当图形搜索(比命令行参数使用起来更直观)落后时,如何能够非常快速地做到这一点?
假设我sha1pass
用来在命令行上生成一些敏感密码的哈希值。我可以用它sha1pass mysecret
来生成一个哈希值,mysecret
但这具有mysecret
现在 bash 历史中的缺点。有没有办法完成这个命令的最终目标,同时避免mysecret
以纯文本形式显示,也许是通过使用passwd
-style 提示?
我也对将敏感数据传递给任何命令的通用方法感兴趣。当敏感数据作为参数(例如 in sha1pass
)或在 STDIN 上传递给某个命令时,该方法会发生变化。
有没有办法做到这一点?
编辑:这个问题引起了很多关注,下面提供了几个很好的答案。总结如下:
- 根据@Kusalananda 的回答,理想情况下,人们永远不必将密码或秘密作为命令行参数提供给实用程序。正如他所描述的,这在几个方面很容易受到攻击,应该使用设计更好的实用程序,该实用程序能够在 STDIN 上获取秘密输入
- @vfbsilva 的回答描述了如何防止将事物存储在 bash 历史记录中
- @Jonathan 的回答描述了一种非常好的方法来实现这一点,只要程序可以在 STDIN 上获取其秘密数据。因此,我决定接受这个答案。
sha1pass
在我的 OP 中只是一个例子,但讨论已经确定存在更好的工具来获取 STDIN 上的数据。 - 正如@R..在他的回答中指出的那样,对变量使用命令扩展是不安全的。
因此,总而言之,我接受了@Jonathan 的回答,因为它是最好的解决方案,因为您有一个设计良好且行为良好的程序可供使用。尽管将密码或机密作为命令行参数传递从根本上说是不安全的,但其他答案提供了减轻简单安全问题的方法。
我熟悉用于解析 json 的“jq”。
我使用一项产生 json 响应的服务,其中一个属性本身就是一个 json 字符串。如何将该引用值转换为有效的 json 字符串,以便我可以使用 jq 处理它?
例如,如果我只是从“jq.”查看简单的漂亮打印的 json,这里是输出的简短摘录:
"someJsonString": "{\"date\":\"2018-01-08\", ...
我可以使用 jq 来获取该属性的值,但我需要通过“取消转义”将引用的字符串转换为有效的 json。
我想我可以将它导入 sed,删除开始和结束双引号,并删除所有反斜杠(“ sed -e 's/^"//' -e 's/"$//' -e 's/\\//g'
”)。这似乎可行,但这似乎不是最强大的解决方案。
更新:
为了更清楚地了解我在做什么,这里有几个省略的示例显示了我尝试过的内容:
% curl -s -q -L 'http://.../1524.json' | jq '.results[0].someJsonString' | jq .
"{\"date\":\"2018-01-08\",...
% echo $(curl -s -q -L 'http:/.../1524.json' | jq '.results[0].someJsonString') | jq .
"{\"date\":\"2018-01-08\",...
更新:
这是一个完全独立的示例:
% cat stuff.json | jq .
{
"stuff": "{\"date\":\"2018-01-08\"}"
}
% cat stuff.json | jq '.stuff'
"{\"date\":\"2018-01-08\"}"
% cat stuff.json | jq '.stuff' | jq .
"{\"date\":\"2018-01-08\"}"
更新:
如果我尝试使用真正的 jq 表达式处理最后一个输出,它会执行以下操作:
% cat stuff.json | jq '.stuff' | jq '.date'
assertion "cb == jq_util_input_next_input_cb" failed: file "/usr/src/ports/jq/jq-1.5-3.x86_64/src/jq-1.5/util.c", line 371, function: jq_util_input_get_position
Aborted (core dumped)