데이터 블록의 각 줄 뒤에 정보를 삽입하는 Bash 스크립트

데이터 블록의 각 줄 뒤에 정보를 삽입하는 Bash 스크립트

/proc 파일 시스템의 정보를 top에서 생성된 프로세스 목록에 삽입하는 스크립트를 작성하고 싶습니다. 다음과 같이 보일 것입니다:

다음은 위에서 얻은 샘플 출력입니다.

[root@alxc5 ~]# top -n 1 -c | sed '1,7d' | head -n10
20245 1842      20   0  233m  42m  10m R 100.0  0.0   0:00.71 /usr/local/php53/bin/php index.php
19302 1842      20   0  277m  86m  10m R 100.0  0.0   0:01.81 /usr/local/php53/bin/php index.php
20153 1842      20   0  264m  79m  10m R 96.6  0.0   0:00.89 /usr/local/php54/bin/php admin-ajax.php
14390 1842      20   0  228m  43m  10m R 93.6  0.0   0:04.92 /usr/local/php54/bin/php productbrandwithoutsoap.php
20047 1841      20   0  240m  54m  10m R 90.7  0.0   0:01.29 /usr/local/php54/bin/php index.php
20117 1842      20   0  273m  87m  10m R 83.4  0.0   0:01.07 /usr/local/php54/bin/php edit.php
20295 1841      20   0  202m  36m   9m R 80.5  0.0   0:00.55 /usr/local/php53/bin/php index.php
15978 1843      20   0  259m  71m  10m S 58.5  0.0   0:02.70 /usr/local/bin/php /home/groupwa4/public_html/cron.php -mdefault
18745 1842      20   0  247m  56m  11m R 46.8  0.0   0:02.30 /usr/local/bin/php /home/sukhirug/public_html/cron.php -mdefault
10234 1842      20   0  306m  92m  43m R 42.4  0.0   1:14.51 /usr/local/php53/bin/php
[root@alxc5 ~]#

이것이 내가 원하는 최종 결과입니다.

[root@alxc5 ~]# top -n 1 -c | sed '1,7d' | head -n10
20245 1842      20   0  233m  42m  10m R 100.0  0.0   0:00.71 /usr/local/php53/bin/php index.php
^- Process running in $proc_info

$proc_info는 다음과 유사합니다.

[root@alxc5 ~]# egrep "c[0-9]{1,5}" /proc/28339/mounts -o |uniq
c8798
[root@alxc5 ~]#

이것은 /proc/28339/mounts의 원본 내용입니다:

[root@alxc5 ~]# cat /proc/28339/mounts
rootfs / rootfs rw 0 0
/dev/mapper/coregroup-c8798 / ext4 rw,noatime,nodiratime,data=ordered,jqfmt=vfsv0,usrjquota=quota.user 0 0
proc /proc proc rw,nosuid,nodev,noexec,relatime 0 0
/dev/sda3 /proc/loadavg ext4 rw,relatime,data=ordered 0 0
/dev/sda3 /proc/cpuinfo ext4 rw,relatime,data=ordered 0 0
devpts /dev/pts devpts rw,relatime,gid=1342,mode=620,ptmxmode=666 0 0
/dev/mapper/coregroup-c8798 /chroot/tmp ext4 rw,noatime,nodiratime,data=ordered,jqfmt=vfsv0,usrjquota=quota.user 0 0
/dev/mapper/coregroup-c8798 /var/suexec/baseos/chroot ext4 rw,noatime,nodiratime,data=ordered,jqfmt=vfsv0,usrjquota=quota.user 0 0
/dev/mapper/coregroup-c8798 /var/suexec/baseos/chroot/tmp ext4 rw,noatime,nodiratime,data=ordered,jqfmt=vfsv0,usrjquota=quota.user 0 0
/dev/mapper/coregroup-c8798 /var/suexec/admintes ext4 rw,noatime,nodiratime,data=ordered,jqfmt=vfsv0,usrjquota=quota.user 0 0
/dev/mapper/coregroup-c8798 /var/suexec/admintes/chroot ext4 rw,noatime,nodiratime,data=ordered,jqfmt=vfsv0,usrjquota=quota.user 0 0
/dev/mapper/coregroup-c8798 /var/suexec/admintes/chroot/tmp ext4 rw,noatime,nodiratime,data=ordered,jqfmt=vfsv0,usrjquota=quota.user 0 0
/dev/mapper/coregroup-c8798 /var/suexec/admintes/home/admintes ext4 rw,noatime,nodiratime,data=ordered,jqfmt=vfsv0,usrjquota=quota.user 0 0
/dev/mapper/coregroup-c8798 /var/suexec/dancho ext4 rw,noatime,nodiratime,data=ordered,jqfmt=vfsv0,usrjquota=quota.user 0 0
/dev/mapper/coregroup-c8798 /var/suexec/dancho/chroot ext4 rw,noatime,nodiratime,data=ordered,jqfmt=vfsv0,usrjquota=quota.user 0 0
/dev/mapper/coregroup-c8798 /var/suexec/dancho/chroot/tmp ext4 rw,noatime,nodiratime,data=ordered,jqfmt=vfsv0,usrjquota=quota.user 0 0
/dev/mapper/coregroup-c8798 /var/suexec/dancho/home/dancho ext4 rw,noatime,nodiratime,data=ordered,jqfmt=vfsv0,usrjquota=quota.user 0 0
/dev/mapper/coregroup-c8798 /var/suexec/sgadmins ext4 rw,noatime,nodiratime,data=ordered,jqfmt=vfsv0,usrjquota=quota.user 0 0
/dev/mapper/coregroup-c8798 /var/suexec/sgadmins/chroot ext4 rw,noatime,nodiratime,data=ordered,jqfmt=vfsv0,usrjquota=quota.user 0 0
/dev/mapper/coregroup-c8798 /var/suexec/sgadmins/chroot/tmp ext4 rw,noatime,nodiratime,data=ordered,jqfmt=vfsv0,usrjquota=quota.user 0 0
/dev/mapper/coregroup-c8798 /var/suexec/sgadmins/home/sgadmins ext4 rw,noatime,nodiratime,data=ordered,jqfmt=vfsv0,usrjquota=quota.user 0 0
/dev/mapper/coregroup-c8798 /var/suexec/synthesi ext4 rw,noatime,nodiratime,data=ordered,jqfmt=vfsv0,usrjquota=quota.user 0 0
/dev/mapper/coregroup-c8798 /var/suexec/synthesi/chroot ext4 rw,noatime,nodiratime,data=ordered,jqfmt=vfsv0,usrjquota=quota.user 0 0
/dev/mapper/coregroup-c8798 /var/suexec/synthesi/chroot/tmp ext4 rw,noatime,nodiratime,data=ordered,jqfmt=vfsv0,usrjquota=quota.user 0 0
/dev/mapper/coregroup-c8798 /var/suexec/synthesi/home/synthesi ext4 rw,noatime,nodiratime,data=ordered,jqfmt=vfsv0,usrjquota=quota.user 0 0
tmpfs /dev/shm tmpfs rw,relatime,uid=1337,gid=1337 0 0
[root@alxc5 ~]#

이 작업을 진행하는 방법에 대한 제안을 주시면 감사하겠습니다!

답변1

한 가지 방법은 다음과 같습니다.

top -n 1 -c | sed '1,7d' | 
    awk '1;k=system("grep -Eo \"c[0-9]{1,5}\" /proc/$1/mounts | sort -u")'

먼저 각 입력 줄( )을 인쇄한 다음 awk파일에서 1;실행됩니다 . 공백으로 구분된 필드가 반환되므로 이것이 PID가 됩니다.grep -E/proc/PID/mountstop$1

이제 사용하고 있으니 더 이상 사용할 awk이유가 없습니다 . sed또는 이를 사용하여 top -b모든 것을 얻고 ANSI 색상 이스케이프 등으로 인한 아티팩트를 방지할 수 있습니다.

top -n 1 -bc | 
 awk 'NR<7{next}1;k=system("grep -Eo \"c[0-9]{1,5}\" /proc/$1/mounts | sort -u")'

답변2

귀하의 사용 사례에 적합한 경우를 대비하여 다음을 수행하십시오.

man top

3. 필드/열

top사용 가능한 프로세스 필드는 다음과 같습니다.(목록). 엄격한 ASCII 알파벳 순서로 표시됩니다. 위치와 f표시 가능 여부를 사용자 정의할 수 있습니다.F (현장관리)대화형 명령.

...

11. LXC  -- Lxc 컨테이너 이름

lxc작업을 실행하는 컨테이너의 이름입니다. 프로세스가 컨테이너 내부에서 실행되고 있지 않은 경우 대시( -)표시됩니다.

lxc나는 오랫동안 컨테이너를 사용하지 않았으며 컨테이너를 다시 설정하여 다시 확인하려는 의욕이 특별히 없었습니다.LXC필드는 정확히 당신이 찾고 있는 것이지만,소리옳은.

관련 정보