私のcommand覚書
python覚書 ubuntu覚書 php覚書 コマンド覚書 その他の覚書
1

ネットワーク上の生きているIPアドレスの一覧の取得

sudo nmap -sP 192.168.10.*
※DHCPサーバとしての無線LANルータのアドレスが192.168.10.1だとすると
末尾を*にして255のIPアドレスに対してpingをかけて調査している。

2

PDFファイル軽量化

ps2pdf -dPDFSETTINGS=/default -sPAPERSIZE=a4 (オリジナルファイル名).ps (出力ファイル名).pdf
※この操作で劇的に軽量化される。

3

巨大テキストの分割

まずwcで行数を確認
wc -l textfile
次にsplitを使って指定行数(xxxx)で分割する。
下の例ではoutaa,outab,outac...と分割される。
split -l xxxx textfile out

4

grep でテキストファイルの中の文字を調査

次の例ではabcdの文字列を./dirname以下のディレクトリに含まれるファイルから調査して
見つかれば、そのファイル名と該当行数、該当行を出力する。
grep -irn 'abcd' ./dirname

5

2つのディレクトリを再帰的に比較して相違があるファイル名を出力する

diff -qr dir1 dir2
※出力はシンプルにファイル名だけに制限
※GUIで視覚的に見たいならMeldだが、比較結果をテキストなどに残せないので。

6

ディレクトリ内のファイルの権限を一括で変更する

find dirname -name '*.php' -exec chmod 705 {} +
上記のコマンドの意味は dirname内のファイルのうち拡張子がphpのファイルの権限を705(所有者rwx、グループ---、その他r-x)に設定するというもの。
-name で対象のファイルを指定しないとdirname内のサブフォルダそのものまで同じ権限に設定されるので注意
ディレクトリの権限が書き換わらないようにーtype fを指定してもよい。
※sshの端末内でも動作することを確認ずみ。

7

PDFの分割、結合コマンド pdftk

分割結合以外にもいろいろできるが、基本は分割結合
使用例:
Join in1.pdf and in2.pdf into a new PDF, out1.pdf
-->> pdftk in1.pdf in2.pdf cat output out1.pdf
-->> pdftk A=in1.pdf B=in2.pdf cat A B output out1.pdf
-->> pdftk *.pdf cat output combined.pdf
Remove page 13 from in1.pdf to create out1.pdf
-->> pdftk in.pdf cat 1-12 14-end output out1.pdf
-->> pdftk A=in1.pdf cat A1-12 A14-end output out1.pdf

8

階層構造を維持して他のディレクトリにファイルをコピー(又は上書き)する

find sorce_dir -depth | cpio -pdm dest_dir
find sorce_dir -depth | cpio -pdu dest_dir
→dest_dir/sorce_dir/...の構造でファイルがコピーされる。
→-m:新しいファイルの場合上書き
→-u:無条件で上書き
find:
-depth 階層を下降して出力
cpio:
-p ファイルリスト作成
-d 必要に応じてディレクトリ作成
-m コピー先の同名ファイルが古ければ上書き
-u コピー先の同名ファイルは日付に関係なく上書き
※メッセージはstderrに出力されるので、メッセージをファイルに残す場合は &>でstdout,stderrを一緒にファイルに保存する。
find .... | cpio ... &> filename

9

tarコマンド(tar.gz形式の圧縮・解凍)

・tarコマンドによる圧縮・解凍
圧縮
tar -zcvf xxxx.tar.gz directory ※directory名は'./'などを含めないように
解凍
tar -zxvf xxxx.tar.gz

10

wifi状況を取得するコマンド

認識できるネットワークの状況が一覧できる。(どこに接続しているのかは分からない?)
nmcli dev wifi

11

ffmpeg で無劣化で動画の切り出し

ffmpeg -ss [スタート秒数] -i [元ファイル] -t [長さ] -c copy [出力ファイル]
例:120秒の位置から30秒の長さの動画を切り出す。copyモードなので無劣化。
ffmpeg -ss 120 -i src.mp4 -t 30 -c copy dst.mp4

12

utf8のファイル名をsjisのファイル名に変更する

convmv -r -f utf8 --notest -t sjis *.jpg
このコマンドの意味は
-r 再帰的に下層のディレクトリ内のファイル名も変更する
-f 現在のエンコード名を指定 この例では utf8
--notest ファイル名を変更するにはこの指定が必要
-t 変更先のエンコード名を指定 この例ではsjis
*.jpg 個別に指定せずともワイルドカードが使える

13

sjisファイル名のファイル(.jpg)を圧縮する

※ubuntuのアーカイブマネージャでsjisファイル名のファイルを圧縮しようとしたがスルーされてしまう。ubuntu上ではファイル名が化けているのが原因なのかよくわからない。そこで、伝統的なzipコマンドで圧縮
zip 圧縮ファイル名.zip *.jpg

14

pdfファイルを画像(.jpeg)に変換する

pdftoppmコマンドに-jpegオプションをつけて変換するのが一番いいようだ。
フォルダ内のpdfを一気に変換するスクリプトはレシピ管理フォルダのpdf.shを参照すること。

15

端末からプログラムを強制終了

(システムモニターでも強制終了できるが起動に時間がかかるため)

終了させたいプログラムのPIDを調べる(出力される各行の先頭番号がPID)
ps -e

PIDが1000のプログラムを強制終了
kill 1000

16

sjisファイル名を含むZIPファイルの解凍

unzip -O sjis <zip-file>

17

find ファイル名の大文字・小文字を区別せず検索する

find <ディレクトリ> -iname <検索ファイル名>

例:
find ~/Documents -iname *.pdf
上記のコマンドで
pdf,Pdf,PDf,PDF,pDf,pDF,pdFなどが対象となる。

ちなみに、-name <検索ファイル名>のばあい、完全一致となる。

18

ffmpeg "Too many packets buffered for output stream 0:1. Conversion Failed."

Too many packets buffered for output stream 0:1. Conversion Failed.

DVDStylerでmp4をDVD.isoに変換する際に上記のメッセージが表示されて変換に失敗する。
これはDVDStylerのメッセージではなく内部で起動しているffmpegのエラーメッセージ。

何が原因なのかよく分からないが、このメッセージが出て変換に失敗するときは一旦映像と音声を分離して改めて1つの動画に結合すれば解消される。

例えば hoge_org.mp4でエラーが出るときは次のようにhoge_new.mp4を作成すればよい。
(hoge_org.mp4のStream 0:0がVideo、0:1がAudioの場合)
ffmpeg -i hoge_org.mp4 -map 0:0 -vcode copy hoge_v.mp4
ffmpeg -i hoge_org.mp4 -map 0:1 -acode copy hoge_a.mp4
ffmpeg -i hoge_v.mp4 -i hoge_a.mp4 -map 0:0 -map 1:0 -c copy hoge_new.mp4

だが、結合すると音声と映像が少しずれている。私が試した例では音声が少し遅れていた。
ffprobeでhoge_v.mp4とhoge_a.mp4を覗いてみるとstartが前者は3.992で後者は0.000。再生時間もそのずれた分だけ後者が長くなっている。

そこで、音声が遅れているのだから映像を同量(3.992秒)遅らせればよいと考えて
ffmpeg -itsoffset 3.992 -i hoge_v.mp4 -i hoge_a.mp4 -map 0:0 -map 1:0 -c copy hoge_new.mp4
とした。映像と音声のずれは解消された。が、やはり最初と同じToo many..のエラーが出る。

ものは試しと思って音声を同量(3.992秒)進めることに
ffmpeg -i hoge_v.mp4 -itsoffset -3.992 -i hoge_a.mp4 -map 0:0 -map 1:0 -c copy hoge_new.mp4
すると不思議なことに、映像と音声のずれも解消されて、Too many..のエラーも出なくなった。

今回発生したToo many..のエラーは映像と音声の結合のずれが原因だったようだ。
いずれにしても、エラーを解消するためには、映像と音声を分離して再結合する必要があることは間違いない。


ところで‥
先頭のエラーメッセージでググるとバッファが足りないからバッファを増やせという馬鹿な解決法が複数見つかる。ffmpegのVer3.2ならこのエラーは発生しないとか、ffmpegのオプションでバッファを9999にしたり、500や1000がよいとか、増やしすぎてハングアップしたとか。決して鵜呑みにしないように。奴らは誤った情報を教えて誰かが苦しむのを楽しんでいるんだ。

19

アスペクト比を維持したままリサイズ

ffmpeg -i in.mp4 -vf scale=1280:-1 out.mp4

scale=<横幅>:<高さ>
-1は一方の長さに対するアスペクト比を考慮した長さに設定される
高さを指定するならscale=-1:720などとなる

20

SJISファイル名のファイルが圧縮されたZIPをLinux上で解凍する

unzip -Ocp932 <zip_filename>

unzipの際にzip内のファイル名のエンコードを-O(アルファベットのオ)で指定する。
Linux上では基本がutf-8なのでsjisファイル名がutf-8ファイル名に変換されて解凍される。

ちなみに、-Oオプションをつけずに解凍して文字化けしたファイル名はconvmvコマンドでutf-8ファイル名などに変換できるはずなのだが、上手く変換できなかった。
convmv -f shiftjis -t utf8 --notest <file_name>
この他に何か指定する必要があるのか?