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-123460

FelixJN's questions

Martin Hope
FelixJN
Asked: 2022-07-02 06:33:48 +0800 CST

将 rsync 源文件定义为最后一个参数

  • 0

假设我正在使用我仅从以下两个命令中知道的特殊功能find来定义- 操作的源文件:rsync

find /path/to/data -mtime -7 -mtime +5 -exec rsync -aAXu {} /path/to/dest \; 

但是,在这种情况下,我不能使用+with -execasrsync将目的地作为最后一个参数。

这意味着rsync每个匹配文件都会调用一次,而不是创建参数列表并rsync仅调用最少次。

出现同样的问题,xargs因为我需要-I标志,这意味着-L 1.

该手册似乎没有显示--destination-dir=dest选项。

有没有什么简单的方法可以rsync从源文件列表中创建一个 -built-up 命令?

也许这是一个 XY 问题,而其他命令更适合?

find rsync
  • 1 个回答
  • 34 Views
Martin Hope
FelixJN
Asked: 2022-01-13 14:04:36 +0800 CST

仅对子字符串进行更改操作

  • 6

START在一个文件中,在一个由模式和标记的部分之前和之后有任何乱码文本END(特定字符串仅出现一次,并且以正确的顺序出现在同一行上)。我想只对和之间的部分进行一些字符串START操作END

示例输入:

aomodi3hriq32| ¶³r 0q93aoiSTART_this_is_to_be_modified_ENDaqsdofuha23uru| ²23i ii3uhfia
oawpo3<9"§ A hSTART_this_also_needs_modification_ENDqa 032/a237(°1Q"§ >A_this_
START changeme ENDnot_this_modias

在 - 操作方面,应该修改和sed之间的子字符串(和仅子字符串),就像我使用.STARTENDsed 's/_this_// ; s/modi/MODI/ ; y/as/45/'

示例输出:

aomodi3hriq32| ¶³r 0q93aoiSTARTi5_to_be_MODIfied_ENDaqsdofuha23uru| ²23i ii3uhfia
oawpo3<9"§ A hSTART4l5o_need5_MODIfic4tion_ENDqa 032/a237(°1Q"§ >A_this_
START ch4ngeme ENDnot_this_modias

awkwithFS="START|END"失败,因为OFS不能在不同位置设置多个值。

我尝试使用sed嵌套命令替换和不同的分隔符 ( ~) 但失败了,并且还担心之前START/之后可能有字符END会与命令混淆(例如 a /)。这个想法是只选择“内部”子字符串并执行操作,然后将其用作替换的一部分:

sed "s/^\(.*\)START.*END\(.*\)$/\1$(sed 's~^.*START~~
                                         s~END.*~~
                                         s~_this_~~
                                         s~modi~MODI~
                                         y~as~45~' infile)\2/" infile

我不熟悉例如perl....但无论如何。

有没有办法让一组 -sed操作仅适用于一行的 REGEX 匹配的子字符串?

awk text-processing
  • 8 个回答
  • 528 Views
Martin Hope
FelixJN
Asked: 2021-09-16 12:12:31 +0800 CST

了解后台变量分配和等待命令

  • 2

里面man bash说:

等待 [-fn] [id ...]

等待每个指定的子进程并返回其终止状态。每个 id 可能是一个进程 ID 或一个作业规范;如果给出了作业规范,则等待该作业管道中的所有进程。如果没有给出id,则等待所有当前活动的子进程,返回状态为零。如果提供了 -n 选项,wait 将等待任何作业终止并返回其退出状态。

和典型的例子,如

 command1 & command2 & command3 & wait

将意味着三个命令并行运行,并且只有在所有命令都完成后才能完成下一步。

我的问题在于这两个 bash 脚本的结果:

#!/bin/bash
for i in 1 2 3 ; do
  a=$i
  echo "$a is $i"
done 2>/dev/null

结果:

1 is 1
2 is 2
3 is 3

和我预期的差不多。现在我假设分配变量是一个漫长的过程,所以我等待它:

#!/bin/bash
  for i in 1 2 3 ; do
  a=$i & wait
  echo "$a is $i"
done 2>/dev/null

结果是:

3 is 1
3 is 2
3 is 3

我很困惑,原因如下:

  1. 唯一wait应该等待完成的过程是分配变量,然后应该运行脚本中的下一步(echo)。a=3应该只发生在循环的最后一次迭代中。
  2. 据我所知,for-loops 在子shell 中运行,并且wait仅适用于启动它的shell。因此它甚至不应该等待for-loop 完成(因为这是父shell)。
  3. 我从来没有指定与echo其他进程并行运行,所以我没想到会出现竞速情况。

那么为什么当变量不是a时,-variable 设置与最后一次循环迭代呢?我误解$i了命令的哪一部分?wait这种行为完全出乎我的意料。

GNU bash,版本 5.0.3(1),基于 5.7.0-0.bpo.2-amd64 Linux 内核。

预先取消设置a使第二个脚本返回这个

 is 1
 is 2
 is 3

即该变量从未设置过,并且是从我之前的运行中拖出来的。

bash shell-script
  • 1 个回答
  • 214 Views
Martin Hope
FelixJN
Asked: 2019-11-01 15:50:49 +0800 CST

systemd timer:仅针对特定时间范围启用服务

  • 1

假设我希望某个程序在台式计算机上的 12:00h 和 13:00h 之间处于活动状态(即,不能保证 PC 在任一时间都处于打开状态)。我假设我可以为此使用 systemd 单位。

使用计时器启动服务A并计算关机时间很简单:

A.定时器

[Timer]
Unit=A
OnCalendar=*-*-* 12:00:00
Persistent=true

如前所述A,可以使用有冲突的服务来完成停止

A.service(有冲突):

#add conflict to A.service
[Unit]
Description=This is A.service
Conflicts=killA.service
#make sure killA considers A to be active
RemainAfterExit=yes

killA.service:

 [Unit]
 Description=kills A
 [Service]
 Type=oneshot
 ExecStart=/bin/true
 #kill only if A is running:
 Requires=A.service

killA.timer

[Timer]
Unit=killA
OnCalendar=*-*-* 13:00:00
Persistent=true

现在有几种可能的情况:

  • 11h-14h开机:按预期启动和停止
  • 从 11 点到 12 点 30 分通电:按预期启动但从未停止 -> 下次通电会发生什么?

    • 12:45:A会开始吗?(最后一次开始不到 24 小时前)
    • 在 14 小时:killA 不应运行,因为 A 不应处于活动状态
    • 第二天12点15分?(上次启动不到 24 小时前,但错过了 killA 启动)
    • 第二天12点45分?(上次开始 >24 小时前,但 killA <24 小时前。会被 killA 停止吗?)
  • 从 12:30 到 14h 开机:按预期启动和停止(由于 A.timer 中的持久性)

  • 14h开机:A因持久而启动。killA 会因为依赖而立即停用它吗?首先可以避免启动A吗?

简而言之:

如何使用 systemd 计时器来确保服务在给定的时间间隔内处于活动状态,并且在时间间隔之外处于非活动状态,而与关机/启动无关?


动手用例示例:ssh仅在工作时间允许访问。

PS:也许我只是没有很好地获得 systemd 计时器,但是?

systemd
  • 1 个回答
  • 1627 Views
Martin Hope
FelixJN
Asked: 2019-10-29 12:02:51 +0800 CST

ausearch:字符串匹配中的 NOT 运算符

  • 2

在检查来自 的网络活动日志时audit,我想排除一些我知道的程序,例如firefox.

ausearch -x firefox -i

调出所有与 Firefox 相关的连接。但常见的非运算符似乎失败了:

ausearch -x=!fire
ausearch -x \!fire
ausearch -x ^[fire]

如何不匹配中的字符串ausearch?

注意:这不是定义日志规则以排除程序,而只是过滤日志本身。

audit
  • 1 个回答
  • 435 Views
Martin Hope
FelixJN
Asked: 2019-05-22 00:51:20 +0800 CST

登录时执行的 GUI 命令的脚本替代 - 它不应该

  • 0

由于我的主要数据不在 中$HOME,因此我制作了一个小(可执行)脚本来启动caja所需目录中的 GUI 文件管理器()并将其放入我的本地可执行目录(~/.local/bin)中:

#!/bin/bash
/usr/bin/caja /datadir

为了取代标准命令caja,脚本具有相同的名称,并且我的本地可执行文件的路径首先列在我的~/.profile:

if [ -d "$HOME/.local/bin" ] ; then
    PATH="$HOME/.local/bin:$PATH"
fi

到目前为止工作正常,但是每当我登录文件管理器时默认打开。没有激活会话保存,没有执行该目录中的其他可执行文件(尝试了一些echo-scripts 甚至其他 GUI 命令)。

我怎样才能抑制这种行为?

在 Debian 10 上使用 MATE 作为 DE(测试)

debian gui
  • 1 个回答
  • 65 Views
Martin Hope
FelixJN
Asked: 2019-02-02 13:55:42 +0800 CST

seq 小数分隔符

  • 6

使用seq带有浮点数的命令,我的输出带有逗号而不是小数点分隔符,尽管在输入中使用了点:

seq 0.1 0.3 1.3
0,1
0,4
0,7
1,0
1,3

我假设这与设置为 的 locale 相关联LC_NUMERIC,de_DE.UTF-8但是更改为en_US.UTF-8并没有修复它,并且我使用相同语言环境设置的另一个系统确实返回点。即使通过 eg 明确定义格式-f %1.2也不会返回点,而是将逗号作为小数分隔符。

我在哪里以及如何改变这种行为?如何确保我的脚本在任何给定系统上都不会出错?tr显然,如果不通过类似方法重新处理,任何输出都将无法用于进一步处理。

在德国时区使用 Mint 的英文安装,在另一台机器上使用 raspian。


编辑:locale给定机器上的设置:

“逗号”之一:

LANG=en_US.UTF-8
LANGUAGE=en_US:en
LC_CTYPE="en_US.UTF-8"
LC_NUMERIC=de_DE.UTF-8
LC_TIME="en_US.UTF-8"
LC_COLLATE="en_US.UTF-8"
LC_MONETARY=de_DE.UTF-8
LC_MESSAGES="en_US.UTF-8"
LC_PAPER=de_DE.UTF-8
LC_NAME=de_DE.UTF-8
LC_ADDRESS=de_DE.UTF-8
LC_TELEPHONE=de_DE.UTF-8
LC_MEASUREMENT=de_DE.UTF-8
LC_IDENTIFICATION=de_DE.UTF-8
LC_ALL=

“点”之一:

LANG=C.UTF-8
LANGUAGE=
LC_CTYPE="C.UTF-8"
LC_NUMERIC=de_DE.UTF-8
LC_TIME="C.UTF-8"
LC_COLLATE="C.UTF-8"
LC_MONETARY=de_DE.UTF-8
LC_MESSAGES="C.UTF-8"
LC_PAPER=de_DE.UTF-8
LC_NAME=de_DE.UTF-8
LC_ADDRESS=de_DE.UTF-8
LC_TELEPHONE=de_DE.UTF-8
LC_MEASUREMENT=de_DE.UTF-8
LC_IDENTIFICATION=de_DE.UTF-8
LC_ALL=

设置LANGUAGE不影响结果。

shell-script terminal
  • 1 个回答
  • 3428 Views
Martin Hope
FelixJN
Asked: 2018-10-11 03:43:54 +0800 CST

globstar:`**string*` 不下降到子目录`**​​/*string*` 确实

  • 3

给定的是(子)目录中与字符串匹配的一组文件,例如:

find -name 'string' | sort
./1/2/3/4/string
./1/2/3/string
./1/2/string
./1/string
./string

为什么使用globstar来匹配文件

ls **string
string

无法通过目录运行,而

ls **/string
1/2/3/4/string  1/2/3/string  1/2/string  1/string  string

成功了吗?根据我对man页面描述的理解,它应该匹配(子)目录,不是吗?

像这样的问题通常被标记为"The result of ls * , ls ** and ls ***" 的重复,但那里的答案只有 handle ls **,它确实通过目录递归。似乎双星号后跟一个字符串会中断globstar。

GNU bash v.4.4.19(1)继续运行mint 19


从man bash

全球星

如果设置,路径名扩展上下文中使用的模式 ** 将匹配所有文件以及零个或多个目录和子目录。如果模式后跟 /,则只有目录和子目录匹配。

bash shopt
  • 2 个回答
  • 725 Views

Sidebar

Stats

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

    模块 i915 可能缺少固件 /lib/firmware/i915/*

    • 3 个回答
  • Marko Smith

    无法获取 jessie backports 存储库

    • 4 个回答
  • Marko Smith

    如何将 GPG 私钥和公钥导出到文件

    • 4 个回答
  • Marko Smith

    我们如何运行存储在变量中的命令?

    • 5 个回答
  • Marko Smith

    如何配置 systemd-resolved 和 systemd-networkd 以使用本地 DNS 服务器来解析本地域和远程 DNS 服务器来解析远程域?

    • 3 个回答
  • Marko Smith

    dist-upgrade 后 Kali Linux 中的 apt-get update 错误 [重复]

    • 2 个回答
  • Marko Smith

    如何从 systemctl 服务日志中查看最新的 x 行

    • 5 个回答
  • Marko Smith

    Nano - 跳转到文件末尾

    • 8 个回答
  • Marko Smith

    grub 错误:你需要先加载内核

    • 4 个回答
  • Marko Smith

    如何下载软件包而不是使用 apt-get 命令安装它?

    • 7 个回答
  • Martin Hope
    user12345 无法获取 jessie backports 存储库 2019-03-27 04:39:28 +0800 CST
  • Martin Hope
    Carl 为什么大多数 systemd 示例都包含 WantedBy=multi-user.target? 2019-03-15 11:49:25 +0800 CST
  • Martin Hope
    rocky 如何将 GPG 私钥和公钥导出到文件 2018-11-16 05:36:15 +0800 CST
  • Martin Hope
    Evan Carroll systemctl 状态显示:“状态:降级” 2018-06-03 18:48:17 +0800 CST
  • Martin Hope
    Tim 我们如何运行存储在变量中的命令? 2018-05-21 04:46:29 +0800 CST
  • Martin Hope
    Ankur S 为什么 /dev/null 是一个文件?为什么它的功能不作为一个简单的程序来实现? 2018-04-17 07:28:04 +0800 CST
  • Martin Hope
    user3191334 如何从 systemctl 服务日志中查看最新的 x 行 2018-02-07 00:14:16 +0800 CST
  • Martin Hope
    Marko Pacak Nano - 跳转到文件末尾 2018-02-01 01:53:03 +0800 CST
  • Martin Hope
    Kidburla 为什么真假这么大? 2018-01-26 12:14:47 +0800 CST
  • Martin Hope
    Christos Baziotis 在一个巨大的(70GB)、一行、文本文件中替换字符串 2017-12-30 06:58:33 +0800 CST

热门标签

linux bash debian shell-script text-processing ubuntu centos shell awk ssh

Explore

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

Footer

AskOverflow.Dev

关于我们

  • 关于我们
  • 联系我们

Legal Stuff

  • Privacy Policy

Language

  • Pt
  • Server
  • Unix

© 2023 AskOverflow.DEV All Rights Reserve