很长一段时间,我认为程序的默认行为sort是使用 ASCII 顺序。但是,当我在sort不带任何参数的情况下输入以下行时:
#
@
Run Code Online (Sandbox Code Playgroud)
我有:
@
#
Run Code Online (Sandbox Code Playgroud)
但是根据ASCII表,#是35,@是64。 另一个例子是:
A
a
Run Code Online (Sandbox Code Playgroud)
输出是:
a
A
Run Code Online (Sandbox Code Playgroud)
有人可以解释一下吗?顺便说一下,使用时什么是“字典顺序” sort -d?
我如何知道是本地 HDD 还是 USB 密钥?我更喜欢一种没有root权限的方法。/dev/sdX
好的,udevadm帮了大忙:
对于本地硬盘:
udevadm info --query=all --name=sdb | grep ID_BUS
E: ID_BUS=ata
Run Code Online (Sandbox Code Playgroud)
对于 USB 密钥:
udevadm info --query=all --name=sdc | grep ID_BUS
E: ID_BUS=usb
Run Code Online (Sandbox Code Playgroud) 为什么我仍然可以使用密码 ssh 进入我的 Ubuntu 机器?这是 /etc/ssh/sshd_config我的 Ubuntu 20.04 在 ovh 托管上的文件(为简洁起见,仅显示未注释的行):
Include /etc/ssh/sshd_config.d/*.conf\nPort xxx\nPermitRootLogin no\nAllowUsers user1 user2\nPubkeyAuthentication yes\nAuthorizedKeysFile .ssh/authorized_keys .ssh/authorized_keys2\nPasswordAuthentication no\nChallengeResponseAuthentication no\nUsePAM yes\nX11Forwarding yes\nPrintMotd no\nAcceptEnv LANG LC_*\nSubsystem sftp /usr/lib/openssh/sftp-server\nRun Code Online (Sandbox Code Playgroud)\n相关文件的权限看起来没问题:
\n$ stat -c %a /home/user1/.ssh/\n700\n\n$ stat -c %a /home/user1/.ssh/authorized_keys`\n600\nRun Code Online (Sandbox Code Playgroud)\n我已经跑了sudo service ssh restart并且sudo service sshd restart.
为什么我仍然可以通过 ssh 使用密码登录我的 Ubuntu 机器?我可以通过 ssh (PuTTY) 通过用户名和密码登录,它只要求输入密码。user1 和 user2 的密钥都在 .ssh 主文件夹中。\xc2\xa0\n缺少什么?
\n我检查了包含文件:
\n-rw------- 1 root root 27 Dec 1 12:52 …Run Code Online (Sandbox Code Playgroud) 我有
set fileformat=unix
Run Code Online (Sandbox Code Playgroud)
在我的.vimrc,可是如果我创建一个文件vim(在Cygwin中运行),它坚持以创建DOS格式文件,我必须跑他们通过dos2unix清除它们。(我想我真的不有,既然Git的清理它们对我来说,但它只是错误我到死是一个Unix文本编辑器,我已经明确指示要使用Unix行结尾,与额外的垃圾污染他们.)
为什么会发生这种情况?我该如何解决?(我所说的“修复”并不是指需要我单独转换每个文件的东西。那不是修复。那是完全坏掉的东西。)
为什么shell脚本这么难开发?在 NodeJS 中,我可以简单地做:
require('./script')
Run Code Online (Sandbox Code Playgroud)
并且它总是需要script相对于当前脚本。但是如果我在 shell/bash 中尝试:
./script.sh
Run Code Online (Sandbox Code Playgroud)
它将寻找相对于cwd( pwd) 的脚本。似乎点表示cwd( pwd) 而不是我预期的当前脚本所在的目录。
line 8: ./script.sh: No such file or directory
Run Code Online (Sandbox Code Playgroud)
如何执行相对于当前执行脚本所在目录的脚本?
我试过了
/bin/bash script.sh
Run Code Online (Sandbox Code Playgroud)
但我收到错误:
/bin/bash: script.sh: No such file or directory
Run Code Online (Sandbox Code Playgroud)
然后我试过了
script.sh
Run Code Online (Sandbox Code Playgroud)
得到这个错误
line 8: script.sh: command not found
Run Code Online (Sandbox Code Playgroud)
只有以下解决方案工作正常,但问题是它不可读:
$("$(dirname "$(realpath "$0")")/script.sh")
Run Code Online (Sandbox Code Playgroud) 我想以一种可以接受来自参数或管道的输入的方式编写以下 bash 函数:
b64decode() {
echo "$1" | base64 --decode; echo
}
Run Code Online (Sandbox Code Playgroud)
预期用途:
$ b64decode "QWxhZGRpbjpvcGVuIHNlc2FtZQo="
$ b64decode < file.txt
$ b64decode <<< "QWxhZGRpbjpvcGVuIHNlc2FtZQo="
$ echo "QWxhZGRpbjpvcGVuIHNlc2FtZQo=" | b64decode
Run Code Online (Sandbox Code Playgroud) 我想确保我理解以下代码:
tar xvzf FILE --exclude-from=exclude.me --strip-components 1 -C DESTINATION
Run Code Online (Sandbox Code Playgroud)
这是在这个答案中发布的。
来自man tar:
--strip-components=NUMBER
提取时从文件名中去除 NUMBER 个主要成分
-C,--directory=DIR
切换到目录 DIR
我不明白--strip-components.
关于-C,我理解它的意思是“将剥离的组件放在指定的目录中”。
什么--strip-components -C意思?
我担心我在这里会遇到相互矛盾的要求,但我仍然想问。我已经使用 KDE 有一段时间了,我喜欢它的软件(Konsole、Okular、Dolphin)。我非常喜欢 KWin 的功能:
不过我的24寸1920?×?1200像素的屏幕,我觉得三列会更好地利用空间。特别是我考虑买2560?×?1200。看这个:
我知道使用像 Awesome WM 这样的平铺窗口管理器可以轻松实现三列。但是我有两个朋友使用 Awesome WM,我希望避免使用,原因如下:
有没有办法获得一些更高级的操作,例如不仅将窗口捕捉到角落,而且使用 KWin 捕捉到三列?
性能,或者任何轻量级的东西,都不是问题。KDE 运行得很好,因为它变得尽可能大。
我设法做到了
echo -n "命令" > /dev/tty1
字母出现,光标移动,但它们是“幽灵”——如果你点击Enter,没有任何反应(它们不在标准输入中)。
编辑:
在下面屏幕截图的中间,你明白为什么我看到了这个的使用。(带有红色标题的行,就在带有黄色标题的行的正下方。)就像现在一样,您并没有真正“编辑”注释文本;你只是被要求写一个新的文本,它将替换你正在(不是真的)编辑的笔记的文本。因此,我认为可以通过简单地将旧文本粘贴到 tty 中来补救:如果用户点击 Enter,则不会进行任何修改。(该程序在 Perl/MySQL 中,但我认为寻求通用解决方案比“我如何在 Perl 中执行此操作”更有趣。)
编辑2:
这是 Perl 代码,它使用下面的 C 代码(完全按预期工作),以及一个新的屏幕截图——希望这能澄清毫无疑问的事情:) 再次查看屏幕截图的中间,在那里进行了编辑到注释文本 - 这一次,旧文本在那里,例如,如果您只想修正错字,则不必重新键入整个注释文本。
my $edit_note_text = $edit_note_data[2];
print BOLD, RED, " new text: ", RESET;
system("writevt /dev/tty \"$edit_note_text\"");
my $new_text = <$in>;
$new_text = fix_input($new_text);
my $set_text = "UPDATE notes SET note = \"$new_text\" WHERE id = $edit_note_id";
$db->do($set_text);
Run Code Online (Sandbox Code Playgroud)
我的新笔记本电脑(Dell Inspiron 5578)没有数字键盘。许多没有专用小键盘键的笔记本电脑都可以通过 访问小键盘Fn,但不是这个。当我运行xev并尝试使用传统Fn组合(例如Fn+ Jfor 1)时,它看不到任何事件。数字甚至不在标签上。
AFAIU,我无法使用Fn密钥创建任何快捷方式,因为Fn它没有传递给操作系统。但理论上我可以使用Alt_L+Super_L代替。问题是如何正确地做到这一点。我更愿意在比键盘布局更低的级别上执行此操作,以便与所有虚拟机(即使是非 Linux 虚拟机)都能正常工作。
环境:Qubes 操作系统。主机部分基于 Fedora。
我试过了:
--clearmodifiers,修饰符的 keyup 等),但没有一个效果很好。非解决方案: