小编G-M*_*ca'的帖子

Linux 排序的默认顺序是什么?

很长一段时间,我认为程序的默认行为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

linux sort locale

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

如何知道 /dev/sdX 是连接的 USB 还是 HDD?

我如何知道是本地 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)

bash administration hardware hard-disk

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

密码验证没有,但我仍然可以通过密码登录

为什么我仍然可以使用密码 ssh 进入我的 Ubuntu 机器?这是 /etc/ssh/sshd_config我的 Ubuntu 20.04 在 ovh 托管上的文件(为简洁起见,仅显示未注释的行):

\n
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\n
Run 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\n
Run Code Online (Sandbox Code Playgroud)\n

我已经跑了sudo service ssh restart并且sudo service sshd restart.

\n

为什么我仍然可以通过 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)

ssh authentication

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

为什么 vim 创建带有 DOS 行结尾的文件?

我有

set fileformat=unix
Run Code Online (Sandbox Code Playgroud)

在我的.vimrc,可是如果我创建一个文件vim(在Cygwin中运行),它坚持以创建DOS格式文件,我必须跑他们通过dos2unix清除它们。(我想我真的不,既然Git的清理它们对我来说,但它只是错误我到死是一个Unix文本编辑器,我已经明确指示要使用Unix行结尾,与额外的垃圾污染他们.)

为什么会发生这种情况?我该如何解决?(我所说的“修复”并不是指需要我单独转换每个文件的东西。那不是修复。那是完全坏掉的东西。)

vim cygwin windows

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

如何执行与当前脚本位于同一目录中的脚本?

为什么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)

shell-script

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

接受来自参数或管道的输入的 Bash 函数

我想以一种可以接受来自参数或管道的输入的方式编写以下 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)

bash pipe function stdin

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

--strip-components -C 在 tar 中是什么意思?

我想确保我理解以下代码:

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意思?

tar directory path

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

使用 KDE 进行更多平铺

我担心我在这里会遇到相互矛盾的要求,但我仍然想问。我已经使用 KDE 有一段时间了,我喜欢它的软件(Konsole、Okular、Dolphin)。我非常喜欢 KWin 的功能:

  • 即使有多个显示器,也可以在左侧/右侧拆分窗口。
  • 将窗口拆分为每个屏幕的象限。
  • 合成。窗户应该摇晃。
  • 将窗户固定在最顶部。
  • 可以保留的每个程序和窗口的选项。

不过我的24寸1920?×?1200像素的屏幕,我觉得三列会更好地利用空间。特别是我考虑买2560?×?1200。看这个:

我知道使用像 Awesome WM 这样的平铺窗口管理器可以轻松实现三列。但是我有两个朋友使用 Awesome WM,我希望避免使用,原因如下:

  • KDE 系统设置是我经常使用的东西,我希望我的系统能够工作,而不是在命令行上工作以使我的打印机工作。
  • 您将不得不修补将电池小部件放入系统托盘区域。
  • 仅仅平铺也不是我想要的;自由浮动窗口是 Firefox、Thunderbird 和其他东西的首选。
  • 由于我使用了很多 KDE 应用程序,因此使用 Plasma 和 KWin 似乎很有意义。

有没有办法获得一些更高级的操作,例如不仅将窗口捕捉到角落,而且使用 KWin 捕捉到三列?

性能,或者任何轻量级的东西,都不是问题。KDE 运行得很好,因为它变得尽可能大。

kwin tiling-wm

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

通过将字符串放入 tty 来构造命令

我设法做到了

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)

Better_example

io tty stdin

17
推荐指数
4
解决办法
7963
查看次数

数字键盘模拟

我的新笔记本电脑(Dell Inspiron 5578没有数字键盘。许多没有专用小键盘键的笔记本电脑都可以通过 访问小键盘Fn,但不是这个。当我运行xev并尝试使用传统Fn组合(例如Fn+ Jfor 1)时,它看不到任何事件。数字甚至不在标签上。

AFAIU,我无法使用Fn密钥创建任何快捷方式,因为Fn它没有传递给操作系统。但理论上我可以使用Alt_L+Super_L代替。问题是如何正确地做到这一点。我更愿意在比键盘布局更低的级别上执行此操作,以便与所有虚拟机(即使是非 Linux 虚拟机)都能正常工作。

环境:Qubes 操作系统。主机部分基于 Fedora。

我试过了:

  • 通过 Xfce 快捷键绑定 xdotool 命令。这会产生各种奇怪的结果:命令(xdotool 键 KP_1 和变体)通常可以正常工作,但在通过快捷方式调用时却无法正常工作。当通过快捷方式调用时,问题可能是当时按下了修饰键。我尝试了各种修改(--clearmodifiers,修饰符的 keyup 等),但没有一个效果很好。
  • 对自动键执行相同操作。我冻结了一些自动键。

非解决方案:

  • 使用外部小键盘/键盘:虽然我的外部键盘上有一个小键盘(有点),但我希望即使在内部键盘上也有一个,例如,在旅行时使用外部键盘是不可能的或至少不舒服.
  • 使用数字行:在捷克语布局中,数字行主要用于重音字母。我使用的布局(CShack 的 extracs 变体)在“数字行”中根本没有数字。
  • 购买不同的笔记本电脑:很难找到满足我各种要求的笔记本电脑。

keyboard-shortcuts x11 xkb keyboard-layout

17
推荐指数
1
解决办法
1652
查看次数