标签: bash

如何使用脚本重命名Linux上的远程文件

我想要一个(bash)脚本来重命名多个远程 linux 服务器上的文件,知道怎么做吗?谢谢。

scripting linux bash centos rename

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

命令行单行程序:快速且肮脏的“传输的字节数”报告

好吧。所以我们有一个 lighttpd 服务器来加载我们的图像。

它每天记录,我们正在考虑将所有这些图像移动到我们的 S3 帐户以缩短加载时间,但在我们这样做之前,我至少需要“感觉”一下我们的传输会是什么样子。

所以现在我们有标准的 lighttp 访问日志

accesslog.filename = "/var/log/lighttpd/images.access_log" accesslog.format = "%h %V %u %t \"%r\" %>s %b \"%{Referer}i\" \ "%{User-Agent}i\""

所以想要从该日志文件中转储所有“传输的字节”,很好很容易。

cat images.access_log | awk '{print $10}'

这会产生与此类似的输出。

19547
6138
17782
8044
345
0
2727
2125
1838
1649
2127
3275
3653
0
16688
Run Code Online (Sandbox Code Playgroud)

现在 - 我已经做了一些谷歌搜索,也许我忘记了一些东西,是否有一个命令隐藏在 linux 中的某个地方,它将获取所有输出,然后为我将它们全部添加在一起?所以我可以运行这个命令,让它每天吐出一个非常大的数字,直到我得到每天带宽的基线?

- - 编辑 - -

我发现/sf/ask/31555961/

无论如何要让 awk 返回完整数字,而不是执行下面显示的操作?

cat images.access_log | awk '{print $10}' | awk '{s+=$1} END {print s}' 
9.48886e+10
Run Code Online (Sandbox Code Playgroud)

linux bash command-line-interface

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

使用 Sed 时权限被拒绝

我正在使用 Sed 查找和替换文件中的字符串。这是第一次使用它,所以我可能做错了,

我有一个名为“test.properties”的“root”拥有的文件,我想用“cat”替换“world”。

所以我运行这个命令:

sudo sed s/world/cat/ <test.properties >newtest.properties
Run Code Online (Sandbox Code Playgroud)

它工作得很好,但是当我想像这样写入相同的文件时:

sudo sed s/world/cat/ <test.properties >test.properties
Run Code Online (Sandbox Code Playgroud)

它说“-bash:test.properties:权限被拒绝”,但我使用的是“sudo”,为什么它被拒绝了?

permissions bash sed

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

防止 Linux 中的 bash(和 ksh)历史更改

从表面上看,修复 ksh 以使历史更改不可能是相当容易的。我已经看到了将 HIST* 环境变量设置为只读的所有建议,以及使用 chattr 将历史文件设置为仅附加(使用 chattr +a .sh_history)的所有建议。

然而,Bash 有两件事似乎无法阻止历史更改:历史命令(带有 history -c 和 history -d)和将历史文件与实际运行时历史分开(保存在内存中) . 我还在 serverfault 上读到,如果您杀死当前的 shell,则不会写出历史记录。

有没有办法防止 Bash 的历史更改?我希望能够保存所有用户命令,而用户无法从历史记录中删除任何内容。

也欢迎任何有关 Korn shell 的提示。(我知道ksh-93审计...不知道我们是否可以使用它。)

linux shell bash history ksh

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

/this/is/a/path 和 /this/is/a/path/ 之间有很大区别吗?

我多年来一直是 CentOS 用户,但我仍然经常不确定最后一个斜杠在 linux 命令中的重要性,例如

  • 柏油
  • 同步
  • MV
  • 软件/php中的文件处理

以斜杠结尾和不以斜杠结尾的路径之间的实际区别是什么?

bash centos

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

Bash 脚本在提示符下工作,但不在 cron 上工作

从 cron 运行 bash 脚本时失败并显示以下错误

/bin/sh: -c: line 0: unexpected EOF while looking for matching ``'
/bin/sh: -c: line 1: syntax error: unexpected end of file
Run Code Online (Sandbox Code Playgroud)

奇怪的是,从提示符执行时它可以完美运行

整个脚本

#!/bin/sh
NOW=$(date +"%b-%d-%y")
bu_PATH="/home/webserver/"

curtime=$(date)

echo ""
echo "Starting backup: $curtime"
echo ""
echo "Moving to $bu_PATH"
cd $bu_PATH

BACKUP_FILE="backup_$NOW.tgz"

echo ""
echo "The backup file will be called $BACKUP_FILE"

RUN_BACKUP="/usr/local/psa/bin/pleskbackup --server --output-file=$bu_PATH$BACKUP_FILE"

echo "Running backup...."
echo `$RUN_BACKUP`

curtime=$(date)

echo "Backup complete: $curtime"

echo ""

echo "Remove older than 7 days of …
Run Code Online (Sandbox Code Playgroud)

linux bash sftp cron

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

运行需要 root 而不是 root 的远程 SSH 命令的最佳方式

我正在努力运行以下命令:

 ssh someuser@lab-test "sudo /usr/local/scripts/user.sh add tstt7777 177700007 \"Test User 06\" "
Run Code Online (Sandbox Code Playgroud)

长话短说,我需要以远程机器上的某个用户身份运行具有 ROOT 权限的 user.sh 脚本。但是,我不希望某些用户能够运行任何其他命令、打开 shell 或以其他方式访问系统。用户只需要使用多个动态参数运行该脚本。

我已经处理了公钥交换,并且在 sudo 中添加了 privlages:

#Sudo
someuser  ALL = NOPASSWD: /usr/local/scripts/user.sh
Run Code Online (Sandbox Code Playgroud)

但我收到以下错误:

sudo: sorry, you must have a tty to run sudo
Run Code Online (Sandbox Code Playgroud)

我已经查看了 ssh 中的“Command=”函数,但我的理解是这只会运行指定的命令,并且不允许按照我的调用中的指示传递参数。

是否有什么我缺少的东西可以通过 sudo 使我的方法工作?

有没有我在 SSH 或 BASH 中没有考虑过的更好的方法?

linux ssh bash sudo

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

OS X Lion 中的 I/O 重定向

我有一个曾经可以工作的脚本,它依赖于使用 TCP 向侦听端口的进程发送命令(实际上要处理的文件名)。所以我可以启动它并告诉它监听,比如端口 9999。

作为一个快速的技巧,我将使用如下命令设置流重定向到端口 9999:

exec 3<> /dev/tcp/127.0.0.1/9999
Run Code Online (Sandbox Code Playgroud)

然后我可以在我想批处理我所有文件的目录中运行一个 find 命令,比如

find . -name "*.xml" -exec printf "$PWD/{} $PWD/{}\r\n" >&3 \;
Run Code Online (Sandbox Code Playgroud)

自从我升级到 Lion 后,我还没有尝试过这个,但它现在不起作用,给我一个“错误的文件描述符”响应。有人有任何想法吗?

bash osx-lion

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

egrep 匹配组不打印?

我正在尝试创建一个 bash 脚本,该脚本将使用 egrep 从文件中 grep 行。我已经创建了应该对我想要的信息进行分组的正则表达式,问题是试图获得输出。我一直在使用以下命令对其进行测试,但运行时没有打印任何内容。如何打印 -{80} 和 Disconnected 之间的多行?

egrep -E "^-{80}$\r?\n?([:ascii:]*)Disconnected from Server" testing.txt
Run Code Online (Sandbox Code Playgroud)

文件:testing.txt

Connected to the server: name here

Some header text.
More text to go though...
--------------------------------------------------------------------------------
The information that I want, would be in here;

Including this line as well #$
and this one.

Disconnected from Server...
Run Code Online (Sandbox Code Playgroud)

bash grep regex

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

sshd 如何知道调用 shell?

当我输入时ssh remote-host commandsshdbash -c command为我跑。

怎么sshd知道bash-coption调用?

ssh bash

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

标签 统计

bash ×10

linux ×5

centos ×2

ssh ×2

command-line-interface ×1

cron ×1

grep ×1

history ×1

ksh ×1

osx-lion ×1

permissions ×1

regex ×1

rename ×1

scripting ×1

sed ×1

sftp ×1

shell ×1

sudo ×1