标签: bash

Bash 子字符串最后一次出现的字符

我正在尝试编写一个脚本,在最后一次出现字符后删除所有内容。例如,如果字符串是DATETIME 2014.03.14 12:23:24,我只想得到DATETIME 2014.03.. 所以最后一次出现点之后的所有内容都应该被剥离。我一直在试图用不同的变体sedexpr index,但没有成功。上次我尝试获取最后一个点的索引然后对其进行子字符串化但没有任何结果:

expr index "DATETIME 2014.03.14 12:23:24" '.[0-9][/&][0-9]'

这将返回第一个点而不是最后一个点的位置。

linux bash sed

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

Linux bash 中的跳过参数

我需要编写一个 shell 脚本来处理 3 个参数($1 $2 和 $3)。在 bash 中,我必须跳过参数 2(我实际上正在编写类似 ./script.sh para1 para3 的内容)。

脚本没问题。但我不能跳过第二个参数。我怎么跳过这个?

linux bash shell

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

如何以特定顺序显示内容的最佳方式?

使用 bash 如何以特定顺序显示内容的最佳方式?我有 2 个 files.txt,每个文件包含:

File1 
A 
B 
C

File2
D
E
F
Run Code Online (Sandbox Code Playgroud)

现在我需要以这种方式展示:

output
A
D
B
E
C
F
Run Code Online (Sandbox Code Playgroud)

我用另一种语言做了这个练习,但我在用 bash 转换时遇到了问题。

谢谢

bash

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

计算来自管道的流的每 1MB 部分的 md5sum

我想在 unix/linux 中对大文件和流进行校验和,我想从文件/流的每个大部分,每 1 MB 或每 10 MB 中获得许多校验和。

例如,我有磁盘映像、压缩磁盘映像和原始磁盘的副本。图片的某些部分可能会被修改。磁盘为 50 GB,大约有 50000 个 1 MB 的块。因此,对于每个文件,我想获得 50 000 md5sum 或 sha1sums 以获得修改的概述。单个 md5sum 不会帮助我找到修改偏移量。

对于未压缩的磁盘映像,此任务很容易,在 bash 中使用循环dd工具for计算偏移量并选择(跳过)文件的每 1MB 部分。与磁盘相同:

for a in `seq 1 50000`; do echo -n "$a: "; dd if=image.src bs=1M count=1 skip=$a | md5sum; done
Run Code Online (Sandbox Code Playgroud)

但是现在我想比较压缩图像和未压缩图像而不将其解压缩到磁盘。我7z有解包器,它可以将图像以高达 150-200 MB/s(选项7z e -so image.7z |)的速度解压到标准输出。但是我可以在|符号后面写什么来获得所有文件部分的 md5sum。

linux bash disk-image md5sum

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

-bash: /etc/bash.bashrc: 权限被拒绝 我没有名字

我有一个 Debian Wheezy 服务器正在运行,并且刚刚运行了一个测试备份 - 但是,它走另一条路!我尽我所能清理它,但我现在遇到了一个非常烦人的错误。

通过 SSH 禁用 root 登录。用户必须以普通用户身份登录,然后执行su以获得 Root 访问权限。当我以我的用户身份登录时,我收到以下消息:

-bash: /etc/bash.bashrc: Permission denied
I have no name!@server:~$
Run Code Online (Sandbox Code Playgroud)

当我执行 aa 时whoami

$ whoami
whoami: cannot find name for user ID 1000
Run Code Online (Sandbox Code Playgroud)

检查我的/etc/passwd文件,这些用户 ID 确实存在!上的权限/etc/bash.bashrc/etc/passwd是644,所拥有root:root。在另一台服务器上检查,/etc/bash.bashrc文件匹配相同,无需更改。

有一线希望,我可以su进入 root 用户并访问我需要的东西,但我不需要这样做。我在 下找不到任何相关的日志条目/var/log,因为它们只显示成功的登录尝试 ( auth.log),但没有错误。我该怎么做才能让普通用户再次登录?下面是我的/etc/passwd文件的一个应用,显示用户 ID 1000 存在:

lbarone:x:1000:1000:Luke Barone,,,:/home/lbarone:/bin/bash
Run Code Online (Sandbox Code Playgroud)

linux debian bash

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

将 xargs 与 $() 一起使用 - 运算符优先级?

受到这个问题的启发。简而言之,最初的问题是“如何将所有文件全部:2f转换-为文件夹内的所有文件”。例如,如果我有一个文件,./abc:2fdef它应该重命名为./abc-def.

起初我认为这是一个简单的任务......find所有文件然后sed替换:2f-. 在尝试构建单行时,我想出了以下命令:

find . -type f -name '*:2f*' | xargs -I {} mv {} $(echo {} | sed "s/:2f/-/ig")
Run Code Online (Sandbox Code Playgroud)

但是它不起作用。经过大量测试,我发现问题出在xargs部分 - $() 在用文件名xargs替换地方之前执行{}。详细说明,

xargs -I {} mv {} $(echo {} | sed "s/:2f/-/ig")
Run Code Online (Sandbox Code Playgroud)

被评估为($(...)被评估)

xargs -I {} mv {} {}
Run Code Online (Sandbox Code Playgroud)

进而

mv ./abc:2fdef ./abc:2fdef
Run Code Online (Sandbox Code Playgroud)

这不是我所期待的。所以,我的问题是,{}在评估$(...)零件之前,我可以让 xargs 全部替换为文件名吗?

linux bash xargs

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

如何执行通过find找到的文件

我在目录树下有一些可执行文件。我想找到它们并以最简单的方式执行它们。到目前为止,我已经尝试过: find . -perm 0775 -type f | xargs exec 但是 exec 不是可执行文件,它是 bash 内部的。我可以创建一个包装脚本,它看起来像这样:

#!/bin/bash
# exec.sh
exec $1
Run Code Online (Sandbox Code Playgroud)

然后可以运行find . -perm 0775 -type f -exec ./exec.sh {} \; 但是必须有一种更优雅和更短的方式来做到这一点。

bash find exec

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

用 bash 解析“uptime”的输出

我想将uptime命令的输出保存到 Bash 脚本中的 csv 文件中。由于该uptime命令根据自上次重新启动以来的时间具有不同的输出格式,因此我想出了一个基于 的非常繁重的解决方案case,但肯定有一种更优雅的方法来做到这一点。

正常运行时间输出:

 8:58AM  up 15:12, 1 user, load averages: 0.01, 0.02, 0.00
Run Code Online (Sandbox Code Playgroud)

想要的结果:

15:12,1 user,0.00 0.02 0.00,
Run Code Online (Sandbox Code Playgroud)

当前代码:

case "`uptime | wc -w | awk '{print $1}'`" in
#Count the number of words in the uptime output

10)
    #e.g.:  8:16PM  up  2:30, 1 user, load averages: 0.09, 0.05, 0.02
    echo -n `uptime | awk '{ print $3 }' | awk '{gsub ( ",","" ) ; print $0 }'`","`uptime | …
Run Code Online (Sandbox Code Playgroud)

freebsd bash awk uptime

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

为什么“(ulimit -d 1000; firefox) &”不起作用?

我正在尝试限制 的内存使用,firefox以防止它在有问题的网站上拖延整个系统。

我试过,在bash

(ulimit -d 1000; firefox) &
Run Code Online (Sandbox Code Playgroud)

这应该将内存使用限制为 1000kB。然后我打开 YouTube,注意到在 中topfirefox使用了 2.6% 的内存,或者大约 200MB,并且没有崩溃。显然,限制被忽略了。为什么会这样,我如何正确执行它?

linux firefox bash ulimit ubuntu-12.04

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

比较两个文件并输出差异

我知道diff并使用循环,但我似乎无法真正获得我需要的差异。我基本上是想比较两个文件(file2.txt 和 file2.txt),然后得到它们之间缺少的输出。

目标 1:从 file1.txt 中查找 file2.txt 中缺少的内容

目标 2:查找任一文件中缺少的内容。file2.txt 中可能存在一些不在 file1.txt 中的行。我也想了解他们。

diff只告诉我这两个文件不一样,逐行比较差异。我需要的是一个通过文件的程序,而不是按行区分。如果在 file1.txt 的第 2 行找到包含 '/bin/mount' 的行并且在 file2.txt 的第 59 行找到,那么我不需要知道它。我只想知道整体上没有什么。这能做到吗?

linux unix bash diff command-line

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

标签 统计

bash ×10

linux ×7

awk ×1

command-line ×1

debian ×1

diff ×1

disk-image ×1

exec ×1

find ×1

firefox ×1

freebsd ×1

md5sum ×1

sed ×1

shell ×1

ubuntu-12.04 ×1

ulimit ×1

unix ×1

uptime ×1

xargs ×1