小编DEK*_*KER的帖子

当 Linux 驱动器字母用完时会发生什么?

让\xe2\x80\x99s 说我有 50 个 USB 闪存驱动器。

\n

我想他们一定会/dev/sda/dev/sdz。之后会发生什么/dev/sdz

\n

linux filesystems udev mount devices

36
推荐指数
1
解决办法
5032
查看次数

如何在 Bash 中将二进制值而不是 ASCII 值写入文件

我正在处理一个嵌入式系统,它有一些可以通过文件描述符访问的内存(我不知道我在说什么,所以如果我错了,请纠正我)。

该内存为 32 kB,我想用 0x00 到 0xFFFFFFFF 填充它。我知道文本文件是这样的:

exec {fh} >> ./eeprom;
for i in {0..32767}; do echo $i >& $fh; done; $fh>&-;
Run Code Online (Sandbox Code Playgroud)

这将写入 ASCII 字符 0 到 977。

如果我这样做,hexdump eeprop | head我会得到:

0000000 0a30 0a31 0a32 0a33 0a34 0a35 0a36 0a37
0000010 0a38 0a39 3031 310a 0a31 3231 310a 0a33
0000020 3431 310a 0a35 3631 310a 0a37 3831 310a
0000030 0a39 3032 320a 0a31 3232 320a 0a33 3432
0000040 320a 0a35 3632 320a 0a37 3832 320a 0a39 …
Run Code Online (Sandbox Code Playgroud)

linux bash echo devices hex

7
推荐指数
1
解决办法
1507
查看次数

查找 bash 脚本中文本第一次出现的行号

我需要找出给定搜索字符串第一次出现的行号,该搜索字符串应该位于文本文件中行的开头,并将其存储在我的 bash 脚本中的变量中。例如我想找到第一次出现的“c”:

abc
bde
cddefefef // this is the line that I need its line number
Casdasd // C here is capital, I dont need it
azczxczxc
b223r23r2fe
Cssdfsdfsdf
dccccdcdcCCDcdccCCC
eCCCCCC
Run Code Online (Sandbox Code Playgroud)

我想出了这个,但正如你所见,存在很大的问题

   trimLineNum=$(cat "${varFileLog}" | grep -m1 -n "c")
   echo "c is at line #"${trimLineNum}
Run Code Online (Sandbox Code Playgroud)

输出将是:

c is at line #1:abc
Run Code Online (Sandbox Code Playgroud)

问题:

  1. 显然它与第一行匹配,因为该行中有一个“c”。
  2. 输出还将包括该行的内容!我希望它只是行号

我应该改变什么来解决这些问题?

grep bash sed awk text-processing

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

使用 dd 创建特定扇区的图像

我有一个 32GB 的 SD 卡,其中包含一些 pi 小工具的 Armbian 安装。我想将内容克隆到 16GB 卡中。使用 GParted,我将分区缩小到小于 16GB,这里是 SD 卡的状态,如 中所示fdisk。有2个分区,一个是Armbian,一个是FAT32小分区,用来和windows共享文件。

Disk /dev/sdk: 29,74 GiB, 31914983424 bytes, 62333952 sectors
Disk model: USB3.0 CRW-SD/MS
Units: sectors of 1 * 512 = 512 bytes
Sector size (logical/physical): 512 bytes / 512 bytes
I/O size (minimum/optimal): 512 bytes / 512 bytes
Disklabel type: dos
Disk identifier: 0x22563e30

Device     Boot    Start      End  Sectors  Size Id Type
/dev/sdk1           8192 25690111 25681920 12,3G 83 Linux
/dev/sdk2       25690112 26509311   819200 …
Run Code Online (Sandbox Code Playgroud)

dd fdisk cloning disk-image

4
推荐指数
1
解决办法
159
查看次数

安装分区时是否可以禁用符号链接?

我有一个嵌入式系统开发设置,应该限制用户访问任何系统文件夹。

在 USB 记忆棒上,我创建了一个指向“/”(根文件夹)的符号链接,当我在文件浏览器中单击它时,它将把文件管理器带到根目录。

是否有任何选项可以给 mount 命令来禁用符号链接,就像不遵循符号链接一样?

如果是这样,所有文件系统都一样吗?主要是fat32、NTFS和EXT3/4?

linux mount symlink usb-drive

4
推荐指数
1
解决办法
613
查看次数

bash 脚本中导出变量的生命周期和有效性

我创建了一个 bash 脚本来运行一些具有自定义环境变量的其他程序。这是我的第一个脚本,run-hello.sh名为/home/user

#!/bin/bash    
export PATH=$PATH":/home/user/cool/path"    
hello.sh     
exit 0
Run Code Online (Sandbox Code Playgroud)

/home/user/cool/path我有脚本hello.sh

#\!/bin/bash
echo Hello from $(pwd)
Run Code Online (Sandbox Code Playgroud)

运行第一个脚本 (run-hello.sh) 会产生:

Hello from /home/user
Run Code Online (Sandbox Code Playgroud)

我的问题:

  1. 第一个脚本中的调用export仅在脚本处于活动状态期间有效?如果运行脚本后我echo $PATH将看不到脚本添加的路径...这是预期的行为吗?我怎样才能让它至少在终端的持续时间内存在?

  2. 为什么打印结果/home/user而不是/home/user/cool/path

linux bash shell-script variable

3
推荐指数
1
解决办法
2372
查看次数

find 在一个命令中组合多个名称和路径

我有一组相当复杂的文件需要找到并做出反应(例如复制到文本文件的路径):

例如:

 find / \( -iname "*ssh*" -or -iname "*scp*" \) \( -not -path -"/run" -not -path "/rw/*" -and -not -path "/home/*" -and -not -path "*/qml/*" \) >> ~/files.txt
Run Code Online (Sandbox Code Playgroud)

在这里我想找到与“ssh”和“scp”相关但不在 /run 或 /rw 目录中的所有文件或文件夹。

我将为此添加更多条件,但命令太长了。我怎样才能用正则表达式做到这一点?

find regular-expression

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

如何在 bash 脚本中正确换行和连接字符串

我有一个 Bash 脚本,具有记录带有时间和状态的消息的功能,并且我只想保留我的脚本 80 列:

#!/bin/bash

log_message() {
  echo "[$(date)]-[$1] : $2" >> log.txt
}

varName="John Doe"

# line break to not exceed 80 columns
log_message "WARNING" "I am "${varName}" and i want to limit this line \
to 80 columns"
Run Code Online (Sandbox Code Playgroud)

日志文件中的结果不符合预期:

[Fri Jun 24 13:50:12 CEST 2022]-[WARNING] : I am John
Run Code Online (Sandbox Code Playgroud)

在 Bash 中执行此操作的正确方法是什么?

bash string echo

0
推荐指数
1
解决办法
593
查看次数