AskOverflow.Dev

AskOverflow.Dev Logo AskOverflow.Dev Logo

AskOverflow.Dev Navigation

  • 主页
  • 系统&网络
  • Ubuntu
  • Unix
  • DBA
  • Computer
  • Coding
  • LangChain

Mobile menu

Close
  • 主页
  • 系统&网络
    • 最新
    • 热门
    • 标签
  • Ubuntu
    • 最新
    • 热门
    • 标签
  • Unix
    • 最新
    • 标签
  • DBA
    • 最新
    • 标签
  • Computer
    • 最新
    • 标签
  • Coding
    • 最新
    • 标签
主页 / user-762267

aphid's questions

Martin Hope
aphid
Asked: 2020-10-28 02:25:25 +0800 CST

当使用 mv 移动所有文件但一个文件时,如何用破折号转义文件名?

  • 0

在如何将当前文件夹中的所有文件移动到子文件夹中?,从一个文件夹中移动所有文件的解决方案是:

mv (!dontmovethis) /new/path/

尝试移动包含破折号的文件时,实现此目的的一种方法是:

mv -- '-dashie-file-' /new/path/

但正确的解决方案是什么?

  1. 如果/new/path/包含破折号:/new/-dash-path/
  2. 如果dontmovethis包含破折号:-dont-move-this.
  3. 两个都。

天真地尝试

mv -v -- (!'file-with-dash') '/new/path/with-dashes/'

产生神秘的信息(-v只是为了mv更详细):

bash: !'file: event not found

所以这可能是因为bash正在捕捉!角色。但是,当逃避 bash 时;

mv -v -- (\!'file-with-dash') '/new/path/with-dashes/'
mv -v -- (\\!'file-with-dash') '/new/path/with-dashes/'
mv -v -- (\\\\!'file-with-dash') '/new/path/with-dashes/'
mv -v -- (\!file-with-dash) /new/path/with-dashes/

(只是在混淆需要多少层转义的情况下尝试一些想法),所有这些都会产生:

bash: syntax error near unexpected token `(' 

这使我相信mv在应用运算符时不会以相同的方式对完整文件名进行转义!。最后,类似:

mv -v \(\!file-with-dash\) '/new/path/with-dashes'
mv -v \(\!'file-with-dash'\) '/new/path/with-dashes'

产生:

mv: cannot stat '(!file-with-dash)': No such file or directory

这意味着(被转义太多:mv正在寻找一个字面上命名为 的文件(!file-with-dash),而我希望它寻找file-with-dash.

顺便说一句,该帖子的第二个答案很容易适应;

ls | grep -v dashing-file | xargs mv -t /new/dashing-folder

立即工作。这种方法有一个警告:如果有另一个名为dashing-file-with-evil-secretsthat 的文件,不是实际的dashing-file,因此需要移动,会被grep. 所以这不是一个完全正确的解决方案。

我只是想知道最佳答案(本文中的第一个代码块)是否也可以,因为它没有那个警告。还没有想出办法做到这一点。

bash mv
  • 1 个回答
  • 380 Views
Martin Hope
aphid
Asked: 2020-08-26 07:14:17 +0800 CST

使用 [email protected] 运行多个 redis 实例

  • 1

一个 redis-cluster 至少包含 6 个 redis 实例。故障转移群集的合理最小大小是 3 个节点。因此,我想在同一个节点上运行 2 个 redis 实例(但从不在同一个节点上运行两次相同的 redis 数据桶)作为一个最小的工作示例。我在使用标准配置工具在 ubuntu 下进行此设置时遇到了一些麻烦。

我的 redis 设置还涉及/需要一些redis-sentinel我认为也需要更改配置的东西。主要问题是:一个哨兵就足够了,还是我们需要两个redis-sentinels,两个redis-servers?(/lib/systemd/system/redis-sentinel@似乎存在)。

开箱即用,ubuntu 提供了一个特殊的/lib/systemd/system/redis-server@systemd 单元脚本,可以支持这些额外的服务器。我需要做什么才能拥有:

systemctl start redis-server@2

启动我的第二台服务器?

特别是:

  • 我已将端口 6380 添加到配置文件中,作为第二台服务器侦听的端口。
  • 如何克隆、编辑、指向配置文件以及哪些配置文件需要克隆。
  • 如何配置哨兵。
  • 如何保证redis不会把同一个slot的master和slave放在同一个节点上(达不到目的)。
  • 如何确保 PIDfile 可访问(默认情况下,由于不允许用户 redis 访问 pidfile 等目录中的 pidfile,因此存在拒绝访问消息redis-2)。

现在的进展

我复制了cp /etc/redis/redis-server.conf /etc/redis/redis-server-2.conf和chown redis.redis /etc/redis/redis-server-2.conf,然后编辑了

port = 6380
pidfile /var/run/redis-2/redis-server.pid
logfile /var/log/redis/redis-server-2.log

到目前为止,第二台服务器仅在 450 秒后超时(有没有办法缩短这段时间?测试/弄清楚这一点需要很长时间......)在所述日志文件中找到相当不透明的消息/var/log/redis/redis-server-2.log:

oO0OoO0OoO0Oo Redis is starting oO0OoO0OoO0Oo
Redis version=5.0.7, bits=64, commit=00000000, modified=0, pid=671078, just started
Configuration loaded
systemd supervision requested, but NOTIFY_SOCKET not found
Can't open nodes-6380.conf in order to acquire a lock: Read-only file system

前几条消息是即时的,而最后一条消息是在消息的其余部分之后不久打印的。它通常需要大约 2 毫秒才能弹出。之后,在分配给启动的剩余 89,998ms 时间内没有出现任何消​​息,之后 systemd 停止程序(可能是强制)并重试 4 次。(这就是每次尝试 450 秒的来源)。

这不可能Read-only file system是真正的问题。nodes-6379.conf服务可以轻松访问,该服务redis-server启动时没有问题。

我尝试过的相关内容

一个可能有趣的观察是是否redis-server@2会在主redis-server节点停止时启动。这没有效果。无论前者是启动还是停止,redis-server@2总是会以同样的速度失败并显示同样的神秘错误消息。

手动启动第二台服务器时,使用/usr/bin/redis-server /etc/redis/redis-2.conf它运行的命令,甚至接受集群连接,因此似乎可以工作。问题似乎出在 systemd 上。

进一步看,通过将ExecStart参数更改为

ExecStart=strace -f -o /var/log/redis/strace.out /usr/bin/redis-server /etc/redis/redis-%i.conf

并运行

touch /var/log/redis/strace.out
chown redis.adm /var/log/redis/strace.out

现在有该过程的 strace 输出。它产生了一个孩子,这个特定的行出错了:

811493 openat(AT_FDCWD, "nodes-6380.conf", O_WRONLY|O_CREAT, 0644) = -1 EACCES (Permission denied)

让我相信 systemd 在单元文件中使用了一个奇怪的 CWD 路径/lib/systemd/system/redis-server@。openat对于默认服务和手动启动,相同的调用成功。

systemd redis
  • 1 个回答
  • 1947 Views

Sidebar

Stats

  • 问题 205573
  • 回答 270741
  • 最佳答案 135370
  • 用户 68524
  • 热门
  • 回答
  • Marko Smith

    如何运行 .sh 脚本?

    • 16 个回答
  • Marko Smith

    如何安装 .tar.gz(或 .tar.bz2)文件?

    • 14 个回答
  • Marko Smith

    如何列出所有已安装的软件包

    • 24 个回答
  • Marko Smith

    无法锁定管理目录 (/var/lib/dpkg/) 是另一个进程在使用它吗?

    • 25 个回答
  • Martin Hope
    Flimm 如何在没有 sudo 的情况下使用 docker? 2014-06-07 00:17:43 +0800 CST
  • Martin Hope
    Ivan 如何列出所有已安装的软件包 2010-12-17 18:08:49 +0800 CST
  • Martin Hope
    La Ode Adam Saputra 无法锁定管理目录 (/var/lib/dpkg/) 是另一个进程在使用它吗? 2010-11-30 18:12:48 +0800 CST
  • Martin Hope
    David Barry 如何从命令行确定目录(文件夹)的总大小? 2010-08-06 10:20:23 +0800 CST
  • Martin Hope
    jfoucher “以下软件包已被保留:”为什么以及如何解决? 2010-08-01 13:59:22 +0800 CST
  • Martin Hope
    David Ashford 如何删除 PPA? 2010-07-30 01:09:42 +0800 CST

热门标签

10.10 10.04 gnome networking server command-line package-management software-recommendation sound xorg

Explore

  • 主页
  • 问题
    • 最新
    • 热门
  • 标签
  • 帮助

Footer

AskOverflow.Dev

关于我们

  • 关于我们
  • 联系我们

Legal Stuff

  • Privacy Policy

Language

  • Pt
  • Server
  • Unix

© 2023 AskOverflow.DEV All Rights Reserve