📝

時々使うが忘れるLINUXコマンド(個人メモ)

に公開

あまりに時々過ぎて忘れるけれども、いちいちLLMに聞くのもめんどくさいlinuxコマンドをまとめておきます。(完全に個人のメモです。

binary fileの解析

これが必要になる機会は普通存在しません。それにたいていの場合おとなしく再コンパイルすればいいのですが、そのコストがあまりに高いときは有効な方法です。

すべてのバイナリのうち読める文字列を探す (strings)

strings $(which command名) | 探している文字列

コードに直接書き込んである文字列などの情報を確認することができる。

動的ライブラリの検索 (ldd)

ldd $(which command名)

コマンド(フルパス)が利用しているすべての動的ライブラリを呼び出してくれる。環境をコピーするなどしてエラーになったときや、実行ファイルを残してコンパイル方法を失ってしまったときにどのライブラリを使っていたのかよくわからなくなってしまった場合に便利。単にソースコードのコンパイルの際も!

ELFの確認 (readelf)

readelf -d $(which command名)

続きです。lddとの続きで、動的ライブラリのロードに関してのエラーが出た際に便利なものです。
LD_LIBRARY_PATH -> RPATH -> /etc/ld.so.cache -> RUNPATH -> /lib, /usr/lib
の順番で動的ライブラリを検索するそうですが、RPATHとRUNPATHは実行ファイルに埋め込まれています。これがどこにあるのかを確認するのに使います。

patchelf --remove-rpath $(which command名)

で削除できますが、だいたいこういう事態に陥っている場合、ほかのコードもRPATHが正しくないものが埋め込まれている可能性が高いので.bashrcで$LD_LIBRARY_PATHにそのpathをコピーするのをお勧めいたします。これで一応動くでしょう。
もっともこういうことにならないように仮想環境やその場で再度コンパイルをするのが最適ではありますが、こういう雑な手段もオプションとして持っている分にはいいでしょう。

GIT関係

vscodeの機能でGIT操作は何でもできるのですが、remote-developmentを入れるべきじゃないserver上などでの作業において、どうしてもコマンド操作が必要です。

現在あるローカルcommitを完全に破棄して、新たなデータをとってくる

git reset --hard ## これで現在のブランチの変更をすべて破棄します。(場合によってはまずいので注意が必要)
git pull
git checkout -b <取り込みたいブラン> origin/<取り込みたいブラン>

commitの履歴の確認

過去のcommitを確認できます。-<number>を省略することにより、一つ一つ確認できますqで抜けられます。

git log -<number>

データの転送系

リモートサーバー間などでのデータの転送にはrsyncが便利である。

転送速度をモニターしたいとき

--info=progress2が程よく現在の転送速度を表示してくれる。

rsync -av --info=progress2 SRC DES

Discussion