👻

Linuxでよくやるけどやり方忘れる事の備忘録

8 min read

忘れやすい事をメモ
もっと一杯あるはずなんで思い出すたびに追記する

このコマンドどこのパッケージに入ってる?

$ apt-file search -x 'bin/netstat$'
net-tools: /bin/netstat

yumだとyum providesだけど最近RH系ほぼ触ってないな。。。

apt-file自体をインストールしないと行けないのとインストールしたあとにapt-file updateしないと検索できないので時間がかかります
ホストOSでやるのが楽ですがディストリが違ったりするとコンテナ側でやらないといけないのが難点
ちなみに-xで正規表現検索にしとかないと部分一致したやつまで色々出て視認性悪し

このファイル誰か開いてる?

$ sudo lsof /var/log/syslog
COMMAND   PID   USER   FD   TYPE DEVICE SIZE/OFF NODE NAME
rsyslogd 2128 syslog    7w   REG   0,60   333402  186 /var/log/syslog

忘れんだろうけど一応書いとく

誰がこのポート専有してる?

$ sudo lsof -i:4713,35413
COMMAND    PID USER   FD   TYPE DEVICE SIZE/OFF NODE NAME
container 2290 root    8u  IPv4  47073      0t0  TCP localhost:35413 (LISTEN)
pulseaudi 4076  dev   37u  IPv6  56340      0t0  TCP *:4713 (LISTEN)
pulseaudi 4076  dev   38u  IPv4  56341      0t0  TCP *:4713 (LISTEN)

:付けるのよく忘れるよねこれ。。。

コイツどこと通信してる?

$ sudo lsof -nPi -a -c LINE.exe
COMMAND   PID USER   FD   TYPE   DEVICE SIZE/OFF NODE NAME
LINE.exe 5435  dev   11u  IPv4    60421      0t0  TCP 127.0.0.1:30000 (LISTEN)
LINE.exe 5435  dev   51u  IPv4    61835      0t0  TCP 127.0.0.1:42893->127.0.0.1:59654 (ESTABLISHED)
LINE.exe 5435  dev   54u  IPv4    63020      0t0  TCP 127.0.0.1:42927->127.0.0.1:41462 (ESTABLISHED)
LINE.exe 5435  dev   56u  IPv4 12021644      0t0  TCP 172.16.80.103:58886->203.104.153.1:443 (ESTABLISHED)
LINE.exe 5435  dev   57u  IPv4    73345      0t0  TCP 127.0.0.1:41055->127.0.0.1:43584 (ESTABLISHED)
LINE.exe 5435  dev   89u  IPv4    61830      0t0  TCP 127.0.0.1:37031->127.0.0.1:60976 (ESTABLISHED)
LINE.exe 5435  dev   92u  IPv4    59139      0t0  TCP 127.0.0.1:37589->127.0.0.1:46284 (ESTABLISHED)
LINE.exe 5435  dev   93u  IPv4    63019      0t0  TCP 127.0.0.1:41462->127.0.0.1:42927 (ESTABLISHED)
LINE.exe 5435  dev   95u  IPv4    73344      0t0  TCP 127.0.0.1:43584->127.0.0.1:41055 (ESTABLISHED)
LINE.exe 5435  dev   98u  IPv4    63020      0t0  TCP 127.0.0.1:42927->127.0.0.1:41462 (ESTABLISHED)
LINE.exe 5435  dev  103u  IPv4    73345      0t0  TCP 127.0.0.1:41055->127.0.0.1:43584 (ESTABLISHED)
LINE.exe 5435  dev  111u  IPv4    61829      0t0  TCP 127.0.0.1:60976->127.0.0.1:37031 (ESTABLISHED)
LINE.exe 5435  dev  113u  IPv4    61830      0t0  TCP 127.0.0.1:37031->127.0.0.1:60976 (ESTABLISHED)
LINE.exe 5435  dev  122u  IPv4    61834      0t0  TCP 127.0.0.1:59654->127.0.0.1:42893 (ESTABLISHED)
LINE.exe 5435  dev  125u  IPv4    61835      0t0  TCP 127.0.0.1:42893->127.0.0.1:59654 (ESTABLISHED)
LINE.exe 5435  dev  127u  IPv4 12585802      0t0  TCP 127.0.0.1:10407->127.0.0.1:39162 (ESTABLISHED)
LINE.exe 5435  dev  183u  IPv4    63114      0t0  TCP 127.0.0.1:46284->127.0.0.1:37589 (ESTABLISHED)
LINE.exe 5435  dev  184u  IPv4 12021644      0t0  TCP 172.16.80.103:58886->203.104.153.1:443 (ESTABLISHED)
LINE.exe 5435  dev  186u  IPv4    59139      0t0  TCP 127.0.0.1:37589->127.0.0.1:46284 (ESTABLISHED)
LINE.exe 5435  dev  194u  IPv4    60658      0t0  TCP 127.0.0.1:10403->127.0.0.1:57766 (ESTABLISHED)

-aでAnd条件にしないと-iと-cがOr検索になる。。。逆にしてくれよ。。。覚えれねぇよ
てかwineで動かしてるLINEで確認してみたけどなんでこんないっぱいlocalhost間の通信が必要なんだ。。。。

sudoだるい

visudoで最終行に追記
user ALL=NOPASSWD: /usr/bin/lsof

これやった後に

echo "alias lsof='sudo lsof'" >> ~/.bashrc

しとくとsudo打たなくても良くなるので楽

~/.bashrcを初期状態に戻したい

cat /etc/skel/.bashrc > ~/.bashrc

リダイレクトで追記と上書きミスったりしたらやるよね今まで育ててた設定とかあったら死ぬけど。。。

/etc/skel/は他にも色々初期値入ってて助かる

これ何のディストリ使ってんの?

$ docker run -it --rm ubuntu sh -c 'cat /etc/*release*' | head -n3
DISTRIB_ID=Ubuntu
DISTRIB_RELEASE=20.04
DISTRIB_CODENAME=focal
$ docker run -it --rm centos sh -c 'cat /etc/*release*' | head -n3
CentOS Linux release 8.3.2011
Derived from Red Hat Enterprise Linux 8.3
NAME="CentOS Linux"
write /dev/stdout: broken pipe
$ docker run -it --rm debian sh -c 'cat /etc/*release*' | head -n3
PRETTY_NAME="Debian GNU/Linux 10 (buster)"
NAME="Debian GNU/Linux"
VERSION_ID="10"

大抵/etc配下のなんちゃらreleaseに書いてる

tmux(byobu)でXのクリップボードへコピペ

byobuはtmuxのフロントエンドにしてる時は使えるけどscreenの場合は使えない

tmux save-buffer - | xsel --clipboard

byobu(tmux)はF7からのSpace-Enterで範囲選択してコピー出来るけどそれのクリップボードへの反映方法

t2xって名前でaliasしてるけど毎回中身忘れるんだよなぁ。。。。

一時ファイル作りたくない時

$ echo a > a.txt
$ echo b > b.txt
$ tmp_val="$(cat a.txt)"
$ cat b.txt > a.txt 
$ cat <(echo "${tmp_val}") > b.txt 
$ cat a.txt
b
$ cat b.txt
a

ファイルの内容入れ替えで一時退避しときたいとかによくやる

diffのside-by-side

$ diff -y --suppress-common-lines file1 file2

差分が出た箇所だけ左右に分けて表示する

このファイルに関連するコマンドどれくらいある?

$ man -Kw /etc/resolv.conf | xargs -n1 basename | sort -u
Net::DNS::Resolver.3pm.gz
avahi-daemon.8.gz
avahi-daemon.conf.5.gz
dhclient-script.8.gz
dhcp-options.5.gz
dnsmasq.8.gz
getnameinfo.3.gz
host.conf.5.gz
hostname.1.gz
ip-netns.8.gz
pppconfig.8.gz
resolv.conf.5.gz
resolver.3.gz
sudoers.5.gz
wget.1.gz

例の中で読み込んでるだけとかもあるから確実ではないけどある程度はわかる
gz前の数字はセクション番号

セクション 概要
1 実行プログラムまたはシェルコマンド
2 システムコール (カーネルが提供する関数)
3 ライブラリー呼び出し (プログラムライブラリーに含まれる関数)
4 Special files (usually found in /dev)
5 File formats and conventions, e.g. /etc/passwd
6 ゲーム
7 Miscellaneous (including macro packages and conventions), e.g. man(7), groff(7)
8 システム管理コマンド (通常は root 用)
9 カーネルルーチン [非標準]

時間になったら通知したい

at 1:11PM < <(echo notify-send -t 0 通知メッセージ)

atは時間きたら実行したい処理あるときに便利-lで予約一覧見れて-rで削除できます。

あまりつかってる人見ないけど-t 0で通知をクリックするまで消えなくなるのでこういう時は設定したほうが良いと思う。

日付をフォーマットしたい

$ date +%Y/%m/%d-%H:%M:%S
2021/04/12-16:00:44
$ date -d '1day ago' +%Y/%m/%d-%H:%M:%S
2021/04/11-16:00:45

ログファイルに日付が入る系のファイルを指定したい時とか便利
tail -n -f xxxx$(date -d '1day ago' +%Y/%m/%d).log
みたいに使うことが多い

LinuxのLiveUSBを作成したい

$ dd status=progress if=<インストールisoファイルへのパス> of=/dev/sdx bs=512k

Universal USB InstallerとかRufus使って作ると起動してくれないことあるのなんでや。。。
専用ツール使って作るよりddコマンドのほうが確実で楽なんだよなぁ。。。

stableのnodeを入れる

$ apt install npm && node -v
$ sudo npm install n -g
$ sudo n stable
$ sudo apt purge -y nodejs npm
$ node -v

rpmの解凍

$ rpm2cpio <rpmファイルパス> | cpio -id

bashで指定時間ループする

$ limit=$(date -d '10sec' +%s) ; while [ $(date +%s) -lt $limit ]; do date;sleep 1; done

指定時間は10secの部分

zipを標準入力から解凍

$ cat <zipフィアルパス> | busybox unzip -

curlやらwgetでオンライン上のファイルを直接解凍する時によく使う

普通のunzipコマンドだと無理なのにbusyboxの方は対応してるのが鬱陶しい
実はjarが実はただのzipだからjar xvf /dev/stdinでも行けたりする
JDK入ってるならこっちのほうが高機能

Linux MintをZFSでインストールする

ライブ起動したらターミナル起動

$ sudo apt install -y libzfs2linux zfs-initramfs zfsutils-linux zfs-zed

してZFS関連のパッケージ入れてからインストーラを起動してインストールタイプの設定時に拡張設定からZFSを選択する

空ディレクトリを根こそぎ削除

$ find . -type d -empty -delete

コマンドが終わらなくてターミナル閉じれない

  1. ctrl+zで一時停止
  2. bgでバックグラウンドで開始
  3. disownでジョブテーブルからジョブを削除

ジョブテーブルから削除された時点でターミナル閉じてもプロセスが落ちなくなるのでターミナルを閉じてヨシ

$ sleep 60
^Z
[1]+  停止                  sleep 60
$ bg
[1]+ sleep 60 &
$ jobs
[1]+  実行中               sleep 60 &
$ disown %1
$ jobs

スピーカテスト

$ speaker-test -c2 -l1 -t sin

speaker-test 1.2.2

再生デバイス: default
ストリームパラメータ: 48000Hz, S16_LE, 2 チャネル
正弦波レート: 440.0000Hz
レート 48000Hz (要求値 48000Hz)
バッファサイズ範囲 204816384
ピリオドサイズ範囲 10241024
最大バッファサイズ 16384 を使用
ピリオド数 = 4
period_size = 1024 で設定
buffer_size = 16384 で設定
 0 - Front Left
 1 - Front Right
ピリオド時間 = 5.652592

テスト用コマンドがあるので叩くだけ
-cでチャンネル数指定するからLRより多いスピーカならここの数増やす
1チャンネルずつ順番に鳴らしてくれる

サクッとtorrentファイルをダウンロード

$ aria2c --seed-time=0 torrentファイルのURL

seed-time=0がポイント

これ付けないとダウンロード完了後も一定量はアップロードに貢献しないと終わってくれない
急ぎじゃない時は良いけどさっさと次の作業に進みたい時は付けてる

apt installで確認させない

DEBIAN_FRONTEND=noninteractive apt install -y

Discussion

ログインするとコメントできます