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

Kiwy's questions

Martin Hope
Kiwy
Asked: 2024-07-02 20:43:00 +0800 CST

systemctl daemon-reload:显示正在运行的配置和当前文件之间的差异

  • 6

我运行以下命令:

systemctl status tomcat10.service
#and get the following warning: 
Warning: The unit file, source configuration file or drop-ins of tomcat10.service changed on disk. Run 'systemctl daemon-reload' to reload units.

如果我查看单元文件

ls -l /usr/lib/systemd/system/tomcat10.service
-rw-r--r-- 1 root root 1161 Jul  2 12:36 /usr/lib/systemd/system/tomcat10.service

该文件已被修改或至少被篡改。

然而,即使我使用这样的装置比较当前运行的配置:

systemctl cat tomcat10.service | diff /usr/lib/systemd/system/tomcat10.service -
# Warning: tomcat10.service changed on disk, the version systemd has loaded is 
outdated.
# This output shows the current version of the unit's original fragment and drop-in files.
# If fragments or drop-ins were added or removed, they are not properly reflected in this output.
# Run 'systemctl daemon-reload' to reload units.
0a1
> # /usr/lib/systemd/system/tomcat10.service

但在这种情况下,我根本看不到任何不同,而且消息让我感到困惑,我真的是在将正在运行的 congig 与当​​前配置进行比较吗?如果我什么都没有改变,那么为什么 systemd 要求我进行守护进程重新加载?
所以我的问题是如何可靠地将 systemctl unit 运行配置与当前启动配置进行比较?
更广泛地说,如何知道在执行时或键入时/之前发生了什么变化或即将发生什么变化systemctl daemon-reload。

systemd
  • 1 个回答
  • 20 Views
Martin Hope
Kiwy
Asked: 2024-06-24 19:52:23 +0800 CST

文件创建时的 find -printf 未按预期工作,这是一个错误吗?

  • 13

我正在尝试打印文件的出生日期(crtime),我正在使用 ext4 并支持 crtime 启用:

stat a
  File: a
  Size: 0           Blocks: 0          IO Block: 4096   regular empty file
Device: 254,5   Inode: 393233      Links: 1
Access: (0644/-rw-r--r--)  Uid: ( 1006/    user)   Gid: ( 1006/    user)
Access: 2024-06-24 13:35:25.672343713 +0200
Modify: 2024-06-24 13:35:25.672343713 +0200
Change: 2024-06-24 13:35:25.672343713 +0200
 Birth: 2024-06-24 13:35:25.672343713 +0200

find -printf '%B@'当尝试按照手册所示显示出生日期时:

%Bk    File's  birth  time,  i.e., its creation time, in the format 
specified by k, which is the same as for %A. 
This directive produces an empty string if the underlying operating 
system  or  filesystem does not support birth times.

我得到了这个结果:

find -name a -printf '%B@ %p\n' 
-1.-000000010 ./a

这是错误还是我不知道的功能或其他什么。我使用的是 find 版本 4.9.0-5(也测试了版本 -4)。

我已经在 Ubuntu 和 Debian 上尝试过了。

debian
  • 1 个回答
  • 277 Views
Martin Hope
Kiwy
Asked: 2018-12-12 01:11:02 +0800 CST

awk csv 处理输出格式错误的行到 stderr

  • 1

我有一个脚本,它从一个文件夹中获取多个 CSV 文件,并将它们放在一个 gzip 文件中,并从文件名中提取一个字段:

awk -F";" 'BEGIN { OFS = FS }
FNR == 1 { match(FILENAME, "([0-9]{8})", a); JOBID = a[1]; print $0, JOBID }
FNR > 1 { print $0, JOBID }' Event_*txt | gzip > agzipfile.gz

我的目标是用来NF检查该行是否包含 5 个字段,如果不包含,则将该行打印到 stderr 或另一个文件。
但是我不明白或找不到这样做的正确方法。
这可能吗?如何?
PS:我正在使用 GNUawk

awk csv
  • 1 个回答
  • 107 Views
Martin Hope
Kiwy
Asked: 2018-06-27 05:19:32 +0800 CST

读/写块大小性能不一致的结果,我的测试准确吗?

  • 1

我正在尝试根据文件系统块大小进行一些测试,以识别由于 IO 错误导致的网格作业中的一些潜在瓶颈。我注意到在作业期间有很多 8096 B 的小文件增量,而 FS 的块大小为:

stat -fc %s /my/filesytem
1048576

这远非最佳。为了模拟这种行为,我创建了两个从 1GB 到 20GB 的小随机文件,dd并 /dev/urandom作为源,我尝试了这个 python 代码:

#!/bin/python
bsize=8096
print('File random.20g1')
print(strftime("%Y-%m-%d_%H:%M:%S"))
f1= open('random.20g1','rb')
f2= open('random.20g1.dest','wb')

while True:
   b = f1.read(bsize)
   if b:
       f2.write(b)
   else:
       break
print(strftime("%Y-%m-%d_%H:%M:%S"))

我也试过了bsize=1048576。

我首先观察到块大小为 8096 和 1048576 之间的读/写时间差为 4 秒(大块大小少 4 秒)。
第一个结果很有希望,但经过进一步测试,例如将文件大小增加到 20GB 或对 10 个 GB 文件执行相同操作,我观察到在性能方面始终存在 4/3 秒的相同差异,并且增益永远不会扩展文件。

我在我的测试过程中做错了什么还是你觉得没问题?
例如,我本来希望在增加文件大小方面有所改进。

io performance
  • 1 个回答
  • 1023 Views
Martin Hope
Kiwy
Asked: 2018-06-21 02:39:46 +0800 CST

如何在Linux上用户登录之前执行命令

  • 11

这是我在几个 Linux 风格中多次看到的问题,所以让我们尽量详尽。
在用户登录其桌面会话之前和之后执行脚本/命令/程序的方法是什么?

lightdm gdm
  • 2 个回答
  • 20806 Views
Martin Hope
Kiwy
Asked: 2018-05-25 03:50:10 +0800 CST

从 awk 中的 FILENAME 中提取值并将其用作新字段

  • 1

我正在处理命名Event_42417555_2018-05-23_16\:45\:28-log.txt和格式如下的 CSV 文件:

timestamp;fullpath;event;size
1521540649.02;/home/workdir/ScienceXMLIn/config.cfg;IN_OPEN;2324
1521540649.02;/home/workdir/ScienceXMLIn/config.cfg;IN_ACCESS;2324
1521540649.02;/home/workdir/ScienceXMLIn/config.cfg;IN_CLOSE_NOWRITE;2324
1521540649.02;/home/workdir/quad_list_14.json;IN_OPEN;2160
1521540649.03;/home/workdir/quad_list_14.json;IN_ACCESS;2160
1521540649.03;/home/workdir/quad_list_14.json;IN_CLOSE_NOWRITE;2160

我想要的是根据使用正则表达式提取的文件名中的值向该文件添加一列[0-9]{8}(并删除标题)。

1521540649.02;/home/workdir/ScienceXMLIn/config.cfg;IN_OPEN;2324;42417555
1521540649.02;/home/workdir/ScienceXMLIn/config.cfg;IN_ACCESS;2324;42417555
1521540649.02;/home/workdir/ScienceXMLIn/config.cfg;IN_CLOSE_NOWRITE;2324;42417555
1521540649.02;/home/workdir/quad_list_14.json;IN_OPEN;2160;42417555
1521540649.03;/home/workdir/quad_list_14.json;IN_ACCESS;2160;42417555
1521540649.03;/home/workdir/quad_list_14.json;IN_CLOSE_NOWRITE;2160;42417555

使用 gnu 工具很容易,就像这样(几乎没有经过测试,几乎可以肯定引号有问题):

#!/bin/bash
#$1 being the filename
JOBID=$(grep -oE "[0-9]{8}" "${1}")
sed -E "s/(.*)/\1;$JOBID/" "${1}"

awk到目前为止,我想在这里实现这一目标,这是最有效的:

awk -F";"  'JOBID=substr(FILENAME ,match(FILENAME,"[0-9]{8}"),8); \  
BEGIN { OFS=";"} { if ($1 != "timestamp") print $0,JOBID; }' \  
Event_42417555_2018-05-23_16\:45\:28-log.txt | head

timestamp;fullpath;event;size
timestamp;fullpath;event;size
1521540649.02;/home/workdir/ScienceXMLIn/config.cfg;IN_OPEN;2324
1521540649.02;/home/workdir/ScienceXMLIn/config.cfg;IN_OPEN;2324;42417555
1521540649.02;/home/workdir/ScienceXMLIn/config.cfg;IN_ACCESS;2324
1521540649.02;/home/workdir/ScienceXMLIn/config.cfg;IN_ACCESS;2324;42417555
1521540649.02;/home/workdir/ScienceXMLIn/config.cfg;IN_CLOSE_NOWRITE;2324
1521540649.02;/home/workdir/ScienceXMLIn/config.cfg;IN_CLOSE_NOWRITE;2324;42417555

我有我的变量并且它设置正确,但我找不到合适的位置。
如果我移动JOBID=substr(FILENAME ,match(FILENAME,"[0-9]{8}"),8);
我无法访问该变量。
这里的问题是文件被处理了两次,一次是正确的(尽管我的条件被忽略了),另一次是它认为我的变量

awk text-processing
  • 1 个回答
  • 957 Views
Martin Hope
Kiwy
Asked: 2018-04-27 06:21:51 +0800 CST

为什么 /proc/[PID]/io 中忽略 memmap IO

  • 3

我有一个问题 /proc/[PID]/io 和 memmap 我需要分析使用 python 库astropy的应用程序 IO 。
我遇到的问题之一是/proc/[PID]/io 中的 IO 读/写总字节数不正确。

我有一个脚本copy.sh:

#!/bin/bash
cp huge.fits huge.2.fits
#python copyfits.py
#python copyfitsMemmapOFF.py
sleep 5 
cat /proc/$$/io

我评论了该cp行以及我想为每个测试运行的行。

copyfits.py包含:

from astropy.io import fits    
hdulist = fits.open('huge.fits', mode='readonly')
hdulist.writeto('huge.2.fits')
hdulist.close()

copyfitsMemmapOFF.py包含:

    from astropy.io import fits    
    hdulist = fits.open('huge.fits', mode='readonly', memmap=False)
    hdulist.writeto('huge.2.fits')
    hdulist.close()

以下是每个解决方案的 IO 结果:

cp huge.fits huge.2.fits

rchar: 9749929202
wchar: 9749551680

python copyfits.py

**rchar: 8399421**
wchar: 9749551685

python copyfitsMemmapOFF.py

rchar: 9757502959
wchar: 9749551685

我了解当使用此变量监控应用程序读取文件的数量时,关闭 memmap 会导致 IO 结果不一致。memmap 如何/为什么不计入标准 IO 中,我如何才能找到这些 IO ?
因为如果它是内核而不是应用程序读取文件,则仍然可以访问该文件。

memory io
  • 1 个回答
  • 355 Views
Martin Hope
Kiwy
Asked: 2018-04-12 07:28:57 +0800 CST

脚本优化以在巨大的 CSV 中查找重复文件名

  • 4

我有几个由inotify脚本生成的 1MB 到 6GB 的 CSV 文件,其中的事件列表格式如下:
timestamp;fullpath;event;size.

这些文件的格式如下:

timestamp;fullpath;event;size
1521540649.02;/home/workdir/ScienceXMLIn/config.cfg;IN_OPEN;2324
1521540649.02;/home/workdir/ScienceXMLIn/config.cfg;IN_ACCESS;2324
1521540649.02;/home/workdir/ScienceXMLIn/config.cfg;IN_CLOSE_NOWRITE;2324
1521540649.02;/home/workdir/quad_list_14.json;IN_OPEN;2160
1521540649.03;/home/workdir/quad_list_14.json;IN_ACCESS;2160
1521540649.03;/home/workdir/quad_list_14.json;IN_CLOSE_NOWRITE;2160
1521540649.03;/home/workdir/ScienceXMLIn/masterbias_list.asc;IN_OPEN;70
1521540649.03;/home/workdir/ScienceXMLIn/masterbias_list.asc.1;IN_OPEN;80
1521540649.03;/home/workdir/ScienceXMLIn/masterbias_list.asc.2;IN_OPEN;70
1521540649.03;/home/workdir/otherfolder/quad_list_14.json;IN_OPEN;2160
1521540649.03;/home/workdir/otherfolder/quad_list_14.json;IN_CLOSE_NOWRITE;2160

我的目标是识别出现在不同文件夹中的同名文件。
在此示例中,该文件quad_list_14.json同时出现在/home/workdir/otherfolder和/home/workdir/中。

我想要的输出很简单,只是出现在多个文件夹中的文件列表,在这种情况下,它看起来像这样:

quad_list_14.json

为此,我编写了一小段代码:

#this line cut the file to only get unique filepath
PATHLIST=$(cut -d';' -f 2 ${1} | sort -u)
FILENAMELIST=""

#this loop build a list of basename from the list of filepath
for path in ${PATHLIST}
do
    FILENAMELIST="$(basename "${path}")
${FILENAMELIST}"
done

#once the list is build, I simply find the duplicates with uniq -d as the list is already sorted
echo "${FILENAMELIST}" | sort | uniq -d

不要在家里使用这个代码,这很糟糕,我应该用这样的在线人替换这个脚本:

#this get all file path, sort them and only keep unique entry then
#remove the path to get the basename of the file 
#and finally sort and output duplicates entry.
cut -d';' -f 2 ${1} | sort -u |  grep -o '[^/]*$' | sort | uniq -d

我的问题虽然仍然存在,而且文件很多,最短需要 0.5 秒,但最长需要 45 秒在 SSD 上(而且我的生产磁盘不会那么快)在不同的文件夹中找到重复的文件名。

我需要改进此代码以使其更高效。我唯一的限制是我无法完全加载 RAM 中的文件。

bash awk
  • 3 个回答
  • 106 Views
Martin Hope
Kiwy
Asked: 2018-02-28 08:36:15 +0800 CST

/proc/[PID]/stat 是否显示有关子进程的累积 CPU 统计信息

  • 2

我不确定是否正确地表达了这个问题,我已经尝试阅读man proc,但我无法找到正确的答案,也找不到简单的方法来验证它。
我尝试获取一个 PID 的 CPU/RAM 消耗,但我不知道程序将投射多少子进程,我想获取 CPU 和 RAM 消耗的总量,而不仅仅是主进程。
我知道事实和经验/proc/[PID]/io确实是通过所有子进程累积的,但我想知道,如果可能的话,如果这同样适用于/proc/[PID]/stat.

proc
  • 1 个回答
  • 4311 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