我正在编写一个 shell 脚本,旨在提示用户输入文件,并且由于我不希望脚本的最终用户精通技术,而不是启动命令行进行交互,所以我希望 shell 是能够以标准方式(例如使用 xdg 或类似方式)调用系统文件管理器,该管理器将在类似“打开文件...”的对话框中打开它,并在打开文件或目录后输出完整或相对路径。已选择。有没有办法在 Linux 或 MacOS 或两者中执行此操作?
我有一个大约有 15 列的文本文件。字段之间用逗号分隔。作为描述的一列被双引号括起来,并且还有一些单词被双引号括起来。我需要保留开头和结尾的双引号,并仅删除内部双引号。
像这样的事情:
"Hi there, we are from XYZ team, we have an "Opportunity" at our organization"
我需要输出为:
"Hi there, we are from XYZ team, we have an Opportunity at our organization"
我不想继续Python编程。我一直在寻找 awk 命令或任何其他最佳选择。
该文件可能有 100 行数据,但此描述列对几行而非所有 100 行使用双引号。
这是一些示例数据:
invoice number,invoice date,vendor number,vendor site ID,supplier site CODE,invoice description,invoice currency code,invoice total amount,line number,line amount,line description,account code,business unit,business center,department,issue code,project,task number
1686,2024-03-28,258,9845,NEWYORK,CA Project: Content,USD,538,1,26,279.6,"Review new applications, and instruct the same.The deposits. Review correspondence applications. Review and applications. Research "Material Included" and artwork , and email. Communications with team website. Call, and communications.",230,,,,,295,10
我必须删除行描述中“包含材料”的双引号。
请注意:我需要整个文件并保留所有列,但只需删除行描述值中的内部双引号。只有行描述字段具有此类内部双引号值。就目前而言,只有一个内部双引号单词用于文件的行描述,我们还没有注意到超过一个。
我正在尝试创建一个单行 /etc/cron.d/ cron 条目,它多次运行相同的命令,本质上是为了创建多个线程,用于长时间运行的作业:
* * * * * usertorunas "for i in {1..6} ; do curl -s 'https://www.example.com/path' &>/dev/null & ; done"
我在这里做错了什么?它不会执行,因为 中没有显示任何内容ps aux
。
这可能是使用具有不同循环语法的任何 shell 的问题吗for
?前缀SHELL=/bin/bash
没有任何效果。
我意识到我可以将同一件事列出六次,但这似乎是一种相当粗鲁的做事方式。
这是在 Ubuntu 22.04 上。
过去,我一直能够将 SSL 证书的特殊性留给其他人,主要依赖于自签名证书。那一天已经结束了。
我需要加强并配置一个安全但非气隙(它可以到达,但没有任何东西可以到达)的服务器集群,该集群围绕 RHEL/CentOS 构建,并具有经过验证的 SSL 证书。任何机器上都没有 Web 服务器(nginx、apache 等),只有通过 SSL 的内部应用程序服务调用。
我凭经验证实该软件不接受自签名证书。
到目前为止,我发现的所有工具都需要公开服务器(我想是向 CA 签名机构确认其真实性),但根据设计,我们没有从外部世界进入受保护集群的路径。
如果有影响,我会尝试从 Zerossl.com 获取证书。但我真的不在乎它们来自哪里。
我最近的尝试是这样的:
acme.sh --issue -d dev-9-myserver.mydomain.com --standalone --debug
该工具的最终输出显示状态为待处理,重试 30 次后超时。
我们不可能是世界上唯一将 SSL 证书应用于不暴露于互联网的系统的人,所以我正在寻找一些方向。
有哪些工具可用于从 CA 获取隔离/气隙系统的证书?
先感谢您!
跟进使用 while 循环 ssh 到多个服务器,即 for
while IFS= read -r -u9 HOST ; do ssh "$HOST" "uname -a" ; done 9< servers.txt
它从不同的文件描述符 ( 9
) 读取,
如何让它从不同文件描述符的管道中读取?
如果我的管道命令是,写入第 9 个文件描述符grep
的最简单方法是什么?通过管道传输第 9 个文件描述符的语法是什么?grep
使用lshw
查询我的 WiFi USB 适配器显示以下内容:
$ lshw -C network
*-network
description: Wireless interface
physical id: 12
bus info: usb@3:7
logical name: ...
serial: ...
capabilities: ethernet physical wireless
configuration: broadcast=yes driver=rtw_8822bu driverversion=6.5.0-28-generic firmware=N/A ip=... link=yes multicast=yes wireless=IEEE 802.11
适配器工作正常。然而,我很困惑driver=rtw_8822bu
。据我所知,我的系统上没有调用内核模型rtw_8822bu.ko
,相反,我有rtw88_8822bu.ko
,
/usr/lib/modules/6.5.0-28-generic/kernel/drivers/net/wireless/realtek/rtw88/rtw88_8822bu.ko
它还显示使用lsmod
:
$ lsmod | grep rtw
rtw88_8822bu 12288 0
rtw88_usb 24576 1 rtw88_8822bu
rtw88_8822b 229376 1 rtw88_8822bu
rtw88_core 356352 2 rtw88_usb,rtw88_8822b
mac80211 1720320 3 rtw88_core,rtw88_usb,rtl8xxxu
cfg80211 1323008 3 rtw88_core,mac80211,rtl8xxxu
问:为什么系统中的内核模块命名时会lshw
显示。以前的名字是从哪里来的?driver=rtw_8822bu
rtw88_8822bu
我需要一个命令如何从具有特定日期的文件夹中删除文件。
比如我想删除 4 月 20 日之前的文件夹中的文件/home/FTP
,文件类型为 mp4。
tldr: mtrace 仍然有效还是我只是做错了?
我试图使用 mtrace 但无法让它将数据写入文件。我按照以下说明进行操作man 3 mtrace
:
t_mtrace.c:
#include <mcheck.h>
#include <stdlib.h>
#include <stdio.h>
int
main(int argc, char *argv[])
{
mtrace();
for (int j = 0; j < 2; j++)
malloc(100); /* Never freed--a memory leak */
calloc(16, 16); /* Never freed--a memory leak */
exit(EXIT_SUCCESS);
}
然后在 bash 中运行:
gcc -g t_mtrace.c -o t_mtrace
export MALLOC_TRACE=/tmp/t
./t_mtrace
mtrace ./t_mtrace $MALLOC_TRACE
但该文件/tmp/t
(或我尝试使用的任何其他文件)未创建。当我创建一个具有该名称的空文件时,它的长度保持为零。我尝试过在 MALLOC_TRACE 中使用相对路径。我尝试在调用setenv("MALLOC_TRACE", "/tmp/t", 1);
之前在程序内部添加mtrace()
。我尝试muntrace()
在程序终止之前添加。我在 Ubuntu 22.04 和 Fedora 39 上尝试过这些策略,得到了相同的结果:跟踪文件为空。当我运行程序时,文件上的ctime和mtime(如果我提前创建它)没有改变。我已经验证了该文件及其父目录的权限是读/写的。strace
没有显示有问题的文件已stat
编辑,更不用说打开了。
在 Ubuntu 上使用 Glibc 2.35 和在 Fedora 上使用 2.38 时会发生这种情况。
这不是如何分析或检查内存泄漏的问题。我意识到我可以用valgrind
六个其他程序来做到这一点,这主要是出于好奇,我想知道这是否是一个可能需要修补的错误,或者手册页是否需要更新(或者我是否只是误解一些东西,唯一的问题是坐在我的椅子上)。
我正在做一些文本操作,我想向配置文件内名为“object”的对象添加一个属性(在末尾)
例如
.
.
object = {
"one": "one",
"two": "two",
}
.
.
应该成为
.
.
object = {
"one": "one",
"two": "two",
"three": "three",
}
.
.
这是我的尝试,但我想知道是否有更干净的做事方式。
#find line for last property
line=$(grep -n "$(awk "/object/{f=1;next} /}/{f=0} f" file.txt | tail -n 1)" file.txt | awk -F : '{ print $1 }')
content='\"three\" = \"three\"'
awk 'NR=='$((line + 1))' {print "\t '"$content"'"} 1' file.txt > file.temp && mv file.temp file.txt
我希望将默认包配置文件(/etc/)和我编辑的配置文件分开,例如在/Data/etc/(通常应该是/usr/local/etc/,但假设/Data/etc/)。
这使我能够轻松查看我所做的修改,轻松备份等等。
因此,我想知道是否可以将 /etc/ 安装为:
- RO中的上层FS:/Data/etc/
- RW 中的下层 FS :本身(/etc/)。
包管理器会像平常一样在 /etc/ 中进行更改。但是,当我在 /Data/etc/ 中添加一个文件(例如 /Data/etc/foo)时,我希望在 RO 中拥有一个 /etc/foo 文件,该文件将隐藏任何现有的 /etc/foo。
笔记:
- 物理链接是不可能的,因为 /Data 和 /etc 将位于不同的 FS 中。
- 符号链接会很麻烦:例如,如果在更新包时删除符号链接,则需要自动为 /Data/etc/ 中的每个文件创建符号链接等。
- 由于同样的原因, mount --bind 也会很麻烦。
- 有些软件包确实会在 /usr/local/etc/ 中查找额外的配置文件,但不幸的是,并非全部。
但是,我不知道如何使用 UnionFS/AuFS/OverlayFS/etc 来做到这一点。我也对替代解决方案/想法持开放态度。