Linuxでよくやるけどやり方忘れる事の備忘録
忘れやすい事をメモ
もっと一杯あるはずなんで思い出すたびに追記する
このコマンドどこのパッケージに入ってる?
$ 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だるい
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のクリップボードへコピペ
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
コマンドが終わらなくてターミナル閉じれない
- ctrl+zで一時停止
- bgでバックグラウンドで開始
- 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)
バッファサイズ範囲 2048 〜 16384
ピリオドサイズ範囲 1024 〜 1024
最大バッファサイズ 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
hostsの定義確認
$ getent hosts
特定のホスト名のIP調べたかったら引数にそのホスト名足して実行すれば確認できる
hosts以外にも使えるけどこの用途以外で使ったこと無いな。。。
rsh出来るスタブコンテナが欲しい
$ docker run -it ubuntu bash
root@acb238a07857:/# apt update > /dev/null 2>&1
root@acb238a07857:/# apt install -y rsh-server rsh-client > /dev/null 2>&1
root@acb238a07857:/# inetd
root@acb238a07857:/# yes | adduser test > /dev/null 2>&1
root@acb238a07857:/# echo + + > /home/test/.rhosts
root@acb238a07857:/# chown test:test /home/test/.rhosts
root@acb238a07857:/# chmod 600 /home/test/.rhosts
root@acb238a07857:/# ll /home/test/.rhosts
-rw------- 1 test test 4 Dec 10 05:06 /home/test/.rhosts
root@acb238a07857:/# rsh -l test localhost pwd
/home/test
.rhostsに「+ +」指定すると誰でも使えるようになるから危険だけどスタブならこれ位の方が楽
実行中プロセスに適用されてる環境変数を知りたい
毎回environの区切り文字忘れるのでメモ
調べたいプロセスのPIDを確認して
$ ps -C java
PID TTY TIME CMD
18935 ? 00:00:11 java
/proc/<PID>/environ
にnull区切りで設定されてるので区切り文字を改行に置換して表示
$ tr '\0' '\n' < /proc/18935/environ
QT_SCALE_FACTOR=1
LANGUAGE=ja_JP
〜略〜
bcで単発の計算するときはヒアコメントが楽
bcで計算する時ヒアコメント使うと見やすい
$ bc -l <<< 10.5*120
1260.0
Discussion