たいちょーの雑記

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

シェル芸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

シェル芸160ノック15

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

gihyo.jp

前回はこちら

xztaityozx.hatenablog.com

問題74

$ cat qdata/74/days.txt | ocs -ISystem.Globalization '{var j=new CultureInfo("ja-JP");j.DateTimeFormat.Calendar = new JapaneseCalendar();println(DateTime.Parse(F0).ToString("ggy年M月d日", j))}'
平成3133日
令和元年1010日
令和281

問題75

$ cat qdata/75/minutes.txt | teip -oGg '[^#*\P{Emoji}]\u200d?' -- sed 's/.*//g'
# 本日のミーティングの議題

* 今月の売り上げ
* 新商品️の報告(山田さん)
* 研究開発の進捗

...

問題76

$ uconv -x NFC qdata/76/mac_ls_old.txt | diff - ./qdata/76/mac_ls_new.txt
2d1
< バナザード.txt

問題77

$ ls qdata/77 | sd '_(.+)' '_$1 $1' | sd 'euc$' 'EUC-JP' | while read B C; do iconv -f $C ./qdata/77/$B | sd '^' "$B:"; done | grep 山田
meme_euc:我が生涯に一片の山田なし!
meme_utf8:守りたい、この山田

問題78

$ cat qdata/78/jouyou_kanji.txt|grep -f- -v <(grep -o . qdata/78/sample_novel.txt) | grep -Pe '\p{Han}'
智
皰
噛
云
鴎