たいちょーの雑記

ぼくが3日に一度くらい雑記をかくところ

シェル芸160ノック22

9月末に発売されたシェル芸本の続きです。

gihyo.jp

前回はこちら

xztaityozx.hatenablog.com

問題116

$ exa /dev/ -l | grep "^b" | awk '{print $NF,$2}'
loop0 7,0
loop1 7,1
loop2 7,2
loop3 7,3
loop4 7,4
loop5 7,5
loop6 7,6
loop7 7,7
ram0 1,0
ram1 1,1
ram2 1,2
ram3 1,3
ram4 1,4
ram5 1,5
ram6 1,6
ram7 1,7
ram8 1,8
ram9 1,9
ram10 1,10
ram11 1,11
ram12 1,12
ram13 1,13
ram14 1,14
ram15 1,15
sda 8,0
sdb 8,16

$ exa -l /sys/dev/block | sel -- 7 -1 | teip -f2 -- zsh -c "xargs -n1 -I@ basename @"
1:0 ram0
1:1 ram1
1:2 ram2
1:3 ram3
1:4 ram4
1:5 ram5
1:6 ram6
1:7 ram7
1:8 ram8
1:9 ram9
1:10 ram10
1:11 ram11
1:12 ram12
1:13 ram13
1:14 ram14
1:15 ram15
7:0 loop0
7:1 loop1
7:2 loop2
7:3 loop3
7:4 loop4
7:5 loop5
7:6 loop6
7:7 loop7
8:0 sda
8:16 sdb

問題117

$ b=$(lsusb | wc -l); while :; do a=$(lsusb | wc -l); [[ "$a" -gt "$b" ]] && echo "挿されました" || [[ "$a" -lt "$b" ]] && echo "抜かれました"; b=$a sleep 1s; done

lsusbの出力をエスパーしてます

問題118

$ ./hidoi.bash
5728

$ awk '$4==5728{print $1}' /proc/[0-9]*/stat | xargs -n1 -I@ ls /proc/@/fd/1 -l | sel -- -1
/home/xztaityozx/ghq/github.com/shellgei/shellgei160/qdata/118/5728
/tmp/tmp.IvE4RzXOKL
/home/xztaityozx/ghq/github.com/shellgei/shellgei160/qdata/118/1639576737.611781307

問題119

$ fd . /sys/firmware/memmap/ --max-depth=1 --type=d --exec paste {}/start {}/end {}/type | teip -f1,2 -- xargs -n1 printf "0x%016x\n" | awk '{$1=$1"-"$2;$2="";print}' | sort
0x0000000000000000-0x000000000009ffff  System RAM
0x00000000000e0000-0x00000000000e0fff  Reserved
0x0000000000100000-0x00000000001fffff  ACPI Tables
0x0000000000200000-0x00000000f7ffffff  System RAM
0x0000000100000000-0x0000000669ffffff  System RAM

問題120

$ cat qdata/120/enigma | base64 -d > hoge.gz && gunzip hoge.gz && mkdir tmp &&sudo mount -o loop -t msdos hoge ./tmp && ls ./tmp && sudo umount ./tmp && rm -r tmp hoge

シェル芸160ノック21

9月末に発売されたシェル芸本の続きです。

gihyo.jp

前回はこちら

xztaityozx.hatenablog.com

問題110

$ fd . --hidden --type=d /var/log --exec zsh -c 'echo {} $(fd --type=f --max-depth=1 --hidden . {}|wc -l)'
/var/log/unattended-upgrades 0
/var/log/private 0
/var/log/journal 0
/var/log/dist-upgrade 0
/var/log/landscape 1
/var/log/apt 3

問題111

$ sel 1 2 3 -f /proc/loadavg
0.00 0.02 0.00

問題112

$ echo | ocs '{println(DateTime.Now.ToString("yyyy-MM-dd HH:mm:ss"))}'
2021-12-14 18:18:14

$ cat /sys/class/rtc/rtc0/{date,time} | xargs
2021-12-14 09:19:33

問題113

$ ls -ld /proc/3046/cwd | sel -- -3:
/proc/3046/cwd -> /etc/byobu

問題114

$ cat /proc/4126/maps | grep -Pe ".+\.so" | sel -- -1 | sort -u
/usr/lib/x86_64-linux-gnu/ld-2.31.so
/usr/lib/x86_64-linux-gnu/libc-2.31.so

問題115

家にUSBメモリが1枚もなくてびっくりしちゃった

$ lsblk -o KNAME,FSTYPE,MOUNTPOINT | awk NF==2 | grep fat | awk '{p="/mnt/disk"NR;print "mkdir -p "p";mount -t vfat /dev/"$1,p}' | sudo bash

シェル芸160ノック20

9月末に発売されたシェル芸本の続きです。いっぱい解いちゃった

gihyo.jp

前回はこちら

xztaityozx.hatenablog.com

問題103

$ seq 99 | awk '{print "ln hoge "$1}' | bash
$ ls -l hoge
-rw-r--r-- 100 xztaityozx xztaityozx 2 Dec 13 19:57 hoge

問題104

$ seq inf | while read L; do FN=$(perl -e "print \"a\"x$L"); touch $FN || {echo $L; break}; done
touch: cannot touch 'aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa': File name too long
256

問題105

$ du -sh /usr/* | sort -k2 | paste - <(du -s /usr/*|sort -k2) | sort -rnk3 | sel -gd\\s+ --remove-empty 1 2
3.7G /usr/lib
689M /usr/share
262M /usr/bin
62M /usr/include
26M /usr/sbin
648K /usr/libexec
88K /usr/local
12K /usr/games
8.0K /usr/config
4.0K /usr/src
4.0K /usr/libx32
4.0K /usr/lib64
4.0K /usr/lib32

問題106

$ ls -l /bin/ | awk '$1~/[^lwrx-]/'
total 271308
-rwsr-sr-x 1 daemon daemon      55560 Nov 13  2018 at
-rwxr-sr-x 1 root   tty         14488 Mar 30  2020 bsd-write
-rwxr-sr-x 1 root   shadow      84512 Jul 15 07:08 chage
-rwsr-xr-x 1 root   root        85064 Jul 15 07:08 chfn
-rwsr-xr-x 1 root   root        53040 Jul 15 07:08 chsh
-rwxr-sr-x 1 root   crontab     43720 Feb 14  2020 crontab
-rwxr-sr-x 1 root   shadow      31312 Jul 15 07:08 expiry
-rwsr-xr-x 1 root   root        39144 Mar  7  2020 fusermount
-rwsr-xr-x 1 root   root        88464 Jul 15 07:08 gpasswd
-rwsr-xr-x 1 root   root        55528 Jul 21  2020 mount
-rwsr-xr-x 1 root   root        44784 Jul 15 07:08 newgrp
-rwsr-xr-x 1 root   root        68208 Jul 15 07:08 passwd
-rwsr-xr-x 1 root   root        31032 May 26  2021 pkexec
-rwxr-sr-x 1 root   ssh        350504 Jul 23 21:55 ssh-agent
-rwsr-xr-x 1 root   root        67816 Jul 21  2020 su
-rwsr-xr-x 1 root   root       166056 Jan 19  2021 sudo
-rwsr-xr-x 1 root   root        39144 Jul 21  2020 umount
-rwxr-sr-x 1 root   tty         35048 Jul 21  2020 wall

問題107

WSLには /var/log/auth.log が無いらしい。のでさっき sudo systemctl start rsyslog した時のログです

$ grep sudo:session /var/log/auth.log | grep "opened for user" | sel 1 | uniq -c
      3 Dec

問題108

# 小問1
$ zcat qdata/108/syslog.gz | grep "Killed process" | sel 10 | tr -d '()' | uniq -c
      9 superapp

# 小問2
$ zcat qdata/108/syslog.gz | sed -nE 's/invoked oom-killer:.+//gp' | sel 7: | sort | uniq -c | sort -rn
      3 apache2
      2 gmain
      1 tmux: server
      1 systemd-network
      1 lsb_release
      1 apport

問題109

$ cat o | while read L F; do grep "$L" o | sed "s@\$@ $F@"; done | sel 2: --remove-empty | awk '$1!=$2'
/etc/subuid /etc/subgid
/etc/pki/fwupd/GPG-KEY-Linux-Vendor-Firmware-Service /etc/pki/fwupd-metadata/GPG-KEY-Linux-Vendor-Firmware-Service
/etc/pki/fwupd/LVFS-CA.pem /etc/pki/fwupd-metadata/LVFS-CA.pem
/etc/pki/fwupd-metadata/GPG-KEY-Linux-Vendor-Firmware-Service /etc/pki/fwupd/GPG-KEY-Linux-Vendor-Firmware-Service
/etc/pki/fwupd-metadata/LVFS-CA.pem /etc/pki/fwupd/LVFS-CA.pem
/etc/magic.mime /etc/magic
/etc/vmware-tools/suspend-vm-default /etc/vmware-tools/poweroff-vm-default
/etc/vmware-tools/poweron-vm-default /etc/vmware-tools/poweroff-vm-default
/etc/vmware-tools/resume-vm-default /etc/vmware-tools/poweroff-vm-default
/etc/vmware-tools/poweroff-vm-default /etc/vmware-tools/suspend-vm-default
/etc/vmware-tools/poweron-vm-default /etc/vmware-tools/suspend-vm-default
/etc/vmware-tools/resume-vm-default /etc/vmware-tools/suspend-vm-default
...

シェル芸160ノック19

9月末に発売されたシェル芸本の続きです。ついに100問を超えた

gihyo.jp

前回はこちら

xztaityozx.hatenablog.com

問題98

$ csvq -f CSV -n -r ./qdata/98/ 'select case when list1.c1 not in (select * from list2) then list1.c1 else "@" end, case when list2.c1 not in (select * from list1) then list2.c1 else "@" end, case when list1.c1 in (select * from list2) then list1.c1 else "@" end from list1, list2'  | sed 1d | sel -d, 0 | awk '{if($1!="@" && !a[$1]++) print $1 >> "oneside";if($2!="@" && !a[$2]++) print $2 >> "oneside";if($3!="@" && !a[$3]++) print $3 >> "common"}'

$ head oneside common
==> oneside <==
シュル芸
シァル芸

==> common <==
シェノ芸
シェル芸
シェレ芸
ンェル芸

問題99

# 小問1
cat qdata/99/cards.txt | ocs 'F.Skip(1).Where((v,i)=>i%2==0).Distinct().Count()==1{println(F0)}'789111389101112910111213


# 小問2
$ cat qdata/99/cards.txt | awk '($2==$4&&$4==$6&&$8==$10)||($2==$4&&$6==$8&&$8==$10)'55111111333111122131313

問題100

$ csvq -f CSV -n -r ./qdata/100/ "select * from $(echo {b..g} | fmt -1 | awk 'BEGIN{print "shiritori as a"}{print "cross join shiritori as "$1}' | paste -sd ' ')" | sed 1d | grep -Pe '(.+(.),\2){6}' | ocs -F, 'F.Skip(1).Distinct().Count()==7{println(F0)}'
けんこう,うがい,いちょう,うしみつどき,きゅうけい,いんどあ,あけがた
けんこう,うしみつどき,きゅうけい,いちょう,うがい,いんどあ,あけがた

重複なしの組み合わせを列挙すればよかったね

問題101

$ cat qdata/101/alphabet_connection | fmt -1 | sort | join - <(echo {a..z}|fmt -1) -a 2 -o 1.1 | awk '!/^$/{a=a","$1}/^$/{print a;a=""}END{print a}' | sd "^," '' | sed '/^$/d' | sd -- ',.*,?(.)' '-$1' | xargs
a-c e-f i-l p-r u w y-z

問題102

$ hoge() {echo "hoge $*"}; hoge fuga
hoge fuga

こういうことではないっぽいな…

シェル芸160ノック18

9月末に発売されたシェル芸本の続きです。パズルむずい

gihyo.jp

前回はこちら

xztaityozx.hatenablog.com

問題90

$ echo 12 4 34 8 56 16 | xargs -n2 | awk '{print "numconv -b"$2" <<< "$1}'  | bash| jq -s add
120

問題91

$ echo {2,3,5,7},{2,3,5,7},{2,3,5,7} | fmt -1 | awk -F, '$1<=$2&&$2<=$3&&$1+$2>$3'
2,2,2
2,2,3
2,3,3
2,5,5
2,7,7
3,3,3
3,3,5
3,5,5
3,5,7
3,7,7
5,5,5
5,5,7
5,7,7
7,7,7

問題92

$ yes | ocs '0.01*Math.Pow(2,NR)>1000*1000*1000{println(NR);Environment.Exit(0)}'
37

問題93

dateutils.dseq --format "%Y%m%d%H%M%S" 2019-01-01T00:00:00 1s 2021-12-31T00:00:00 | factor | awk 'NF==2{print $2;exit}'
20190101000023

問題94

$ echo {0..10},{0..10},{0..10},{0..10} | fmt -1 | awk -F, '$1^2+$2^2+$3^2+$4^2<=100{print $0,$1^2+$2^2+$3^2+$4^2}' | sort -k2n | uniq -f1 | sed 1d
0,0,0,1 1
0,0,1,1 2
0,1,1,1 3
0,0,0,2 4
0,0,1,2 5
0,1,1,2 6
1,1,1,2 7
0,0,2,2 8
0,0,0,3 9
0,0,1,3 10
0,1,1,3 11
0,2,2,2 12
0,0,2,3 13
0,1,2,3 14
1,1,2,3 15
0,0,0,4 16
0,0,1,4 17
...

問題95

$ seq 0 8 | ocs "{println(Convert.ToString(i(F0) ^ i(F0)>>1,2).PadLeft(8,'0'))}"
00000000
00000001
00000011
00000010
00000110
00000111
00000101
00000100
00001100

問題96

$ awk '{a[$0]++;b[$0]=b[$0]","FILENAME}END{for(k in a) if(a[k]==3) print k""b[k]}' * | sort | sel -d, 0
2019/07/10 user1 user2 user3
2019/07/15 user1 user3 user4

問題97

$ cat qdata/97/tate.txt | sd '(.)' '"$1" ' | awk '{for(i=1;i<=NF;i++)printf "%s ", $i; for(i=NF;i<=17;i++) printf "\" \"";print "";}' | rs -T | tr -d \"\  | ocs '{println((NR,F0.IndexOf("たてよみ")+1))}' | tr -d '(),' | awk '$2==1{print $2,$1}'
1 3

シェル芸160ノック17

9月末に発売されたシェル芸本の続きです。いつの間にか半分終わってた

gihyo.jp

前回はこちら

xztaityozx.hatenablog.com

問題85

$ echo 🍑 🍓 |  xxd -ps | sd '0a' '' | sd '20' ' ' | fmt -1 | xargs -n1 -I@ printf "%d\n" 0x@ | numaverage | numconv -t Hexadecimal_Lower | sd 0x '' |  xxd -ps -r | awk 4
🍒

numconv -f Hexadecimal_Lowerで変換したかったけど、最上位桁消えちゃったので悲しかった

問題86

$ cat qdata/86/fractions | uni i | sed 1d | sel --remove-empty 10 11 | sed -E "$(cat qdata/86/word_to_num | awk '{print "s/"$1"|"$2"/"$3"/ig"}'|paste -sd\;)" | tr -d S | awk 'BEGIN{printf "puts "}{printf "+Rational(%d,%d)",$1,$2}' | ruby
131/72

分数で表示しないといけないとはな

問題87

$ cat qdata/87/oct.txt | head -n2 | sel 2: | fmt -1 | numconv -b 8 | xargs -n1 printf "%04x\n" | sd '(..)(..)' '$2$1' | tr -d \\n | command xxd -ps -r
秒速で10円稼ぐ秘密

問題88

$ command cat qdata/88/image_masked.bmp | convert - -compress none pnm:- | tail +4 | tac | fmt -1 | paste - - - -d ' ' | sel 3 | numconv -B 2 | sd '.+(.)$' \$1 | tr -d \\n | numconv -b2 -B16 | command xxd -p -r
Hello, 私だ。
以下は私の個人情報だ!!
絶対に漏らすなよ!!!
...

問題89

$ cat qdata/89/ctf-data | base64 -d | gunzip > o
$ ./o | command xxd -ps | grep -o .. | sed 's/^/0x/' | numconv -f Hexadecimal_Lower | awk '!/^(32|10)$/{$1-=2}4' | numconv -B 16 | tr -d \\n | command xxd -p -r
FLAG is shell-gei

シェル芸160ノック16

9月末に発売されたシェル芸本の続きです。無敵のteipコマンドありがとう

gihyo.jp

前回はこちら

https://xztaityozx.hatenablog.com/entry/2021/12/08/220451:cite:mebed

問題79

# ↓でテキトウにいい感じの出力になってるのを目で探す
$ iconv --list | fmt -1 | sd // '' | xargs -n1 -I@ zsh -c "iconv ./qdata/79/message.txt -f @ 2>/dev/null && echo @"


$ iconv -f IBM1390 ./qdata/79/message.txt
イカれたメンバーを紹介するぜ!
真イカのパプリカソースの修平

以上だ!

イカれてるぜ!

問題80

$ cat qdata/80/zeroone | opy '[hex(int(str(F1),2))]' | sd 0x '' | xxd -p -r
不労所得

ワロタ

問題81

$ cat qdata/81/bom.txt | sel 1 1 | teip -f1 -- zsh -c "xxd -p | grep -Pe '^efbbbf' &> /dev/null  && echo '[BOM]'"
[BOM] <feff>ボムボムプリンおいしい


$ cat qdata/81/nobom.txt | sel 1 1 | teip -f1 -- zsh -c "xxd -p | grep -Pe '^efbbbf' &> /dev/null  && echo '[BOM]'||echo ''"
 ボムボムプリン完売

問題82

$ split -b 1000 --numeric-suffixes=1 image.bmp image.bmp.

splitってこういうコマンドだったんだ

問題83

$ iconv qdata/83/soleil.bash -f sjis | sed 1d | sel 2 | sd '(.+)' 'iconv -f utf8 -t sjis <<< "$1"' | sed 1i'#!/bin/bash' > new_soleil.bash

$ cat new_soleil.bash
#!/bin/bash
iconv -f utf8 -t sjis <<< "親戚のソレイユちゃんは表情が豊かで可愛い女の子。"

$ bash new_soleil.bash | iconv -f sjis
親戚のソレイユちゃんは表情が豊かで可愛い女の子。

sjisな文字列をそのままechoしてるわけじゃないからレギュレーション違反な可能性がある

問題84

$ zcat qdata/84/newline.txt.gz|xxd -ps|grep -oPe '0d0a|0a' | sort | uniq -c | sort -rn | sd '0d0a' 'CRLF' | sd '0a' 'LF' | sel -gd\\s+ --remove-empty 2 1
CRLF 8
LF 8