(Linux) 日常作業用のコマンド類メモ 〜ネットワーク、ファイル操作〜


戻る一つ前のメニューに戻る

目次

ネットワーク

開いているポート一覧
netstat

-n:ポート番号やアドレスを数値形式で表示, -a:LISTENとnon-LISTENの双方を表示, -l:LISTENのみ表示, -p:PID/プロセス名を表示, -t:TCPを表示, -u:UDPを表示

開いているソケット一覧
sockstat
帯域の表示
bwm-ng
ローカルネットワーク内で稼働しているマシンのIPアドレス一覧
nmap -sP [192.168.1.0/24]
arp-scan -I [adapter] -l [192.168.1.0/24]
netdiscover -r [192.168.1.0/24]
arp -a

arp-scanでは -I eth0 スイッチを指定してネットワークアダプタを限定することもできる。arp -a は到達済み(キャッシュされた)マシンのみ表示

対象マシンのOS判定
nmap -A [対象マシンのIPアドレス]
対象マシンで開いているポート一覧
nmap -sV -F [対象マシンのIPアドレス]

-sV スイッチで詳細表示, -F スイッチで代表的なポート限定

IPアドレスよりMACアドレスを調べる
arping -I eth0 [対象マシンのIPアドレス]

Samba

状態表示
smbstatus

-d=[LEVEL : 1〜10] conf反映状況なども表示

smbtree
設定ファイル解析
testparm

ssh接続

公開鍵認証で接続
ssh -C -i /path/to/id_rsa user@example.com

id_rsaは秘密鍵ファイル。 -C オプションで通信を圧縮処理する

tcpdump

指定したインターフェースをダンプする
tcpdump -i eth1
sshでリモートコンピュータに接続しtcpdumを起動、ローカルのWiresharkで表示
ssh -x root@example.com tcpdump -i eth0 -s 0 -U -w - | wireshark -k -i -

ssl

証明書の確認(https=443,smtp ssl=465,imap ssl=993,pop ssl=995)
openssl s_client -connect example.com:[443|465|993|995] [-showcerts] [-CAfile /etc/ssl/certs/ca-certificates.crt]
openssl s_client -connect example.com:443 [-showcerts] | openssl x509 -text
ローカルの証明書ファイルの内容確認
openssl x509 -text -noout -in ~/path/to/localcert.pem

動画

音楽(オーディオ)に静止画を付けて動画ファイルにする
ffmpeg -loop_input -shortest -i ダミー画像.jpg -i 音楽.wav -acodec libmp3lame -ab 256k -ac 2 -ar 44100 -vcodec mjpeg -r 0.1 -f avi output.avi

-loop_input -shortestオプションはこの位置、この順番で記述すること。-acodec ac3とすればAC3に変換され、元のデータをコピーする場合には-acodec copyとする(この場合はオーディオビットレート指定の-ab-arなどは不要)。ビデオ形式を指定する場合は-vcodecに続けてmpeg4やflv,libxvidなどを指定する。ビデオのフレームレートは-rで指定できる。例のように0.1とすれば10秒に1回のレートになる(動画サイズが小さくなる)。

ディレクトリ内のjpegを結合して動画ファイルにする
mencoder -ovc lavc -lavcopts vcodec=mpeg4 -mf w=640:h=320:fps=1:type=jpg 'mf://./*.jpg' -oac copy -nosound -o output.avi

画像を切り替える速度はfps=nでコントロールできる。1未満の数を指定することもでき、fps=0.5とすれば2秒に1枚の速度で切り替わる。

動画プレイリスト m3u8 のストリーミング動画をダウンロードする
ffmpeg -i https://www.example.com/movie/index.m3u8 -c copy -bsf:a aac_adtstoasc ./download.mp4

-bsf:a aac_adtstoasc は MPEG-2/4 AAC ADTS から MPEG-4 Audio にコンバートするビットストリームフィルター(-bsf)設定。-c copy は再エンコードせずにそのままコピーの設定。

imagemagick

コマンドラインの公式リファレンス

Examples of ImageMagick Usage

サムネイル画像の作成

画像ファイルが1個のとき

convert -thumbnail 150x150 -sharpen 0x0.8 -quality 85 ./photo/1.jpg ./pics/1.jpg

複数の画像ファイルを一括コンバートするとき(画像のあるディレクトリで実行する)

find * -prune -name '*.jpg' -exec convert -thumbnail 150x150 -sharpen 0x0.8 -quality 85 '{}' ../pics/'{}' \;

複数の画像ファイルを一括コンバートするとき(その他のディレクトリで実行する)

find ./photo/* -prune -name '*.jpg' -exec sh -c 'convert -thumbnail 150x150 -sharpen 0x0.8 -quality 85 {} ./pics/$(basename {})' \;
マルチページtiff画像をjpegに変換
convert input.tiff output%03d.jpg
PhotoCD画像をjpegに変換

取り出す解像度は[1〜6]で指定。[5]=16Base:3072x2048, [6]=64Base:4096x6144

convert -colorspace RGB IMG0001.PCD[5] output.jpg

複数の画像を連続変換する(16Base画像を対象)

find /media/cdrom/IMAGES/* -name '*.PCD' -exec sh -c 'convert -colorspace RGB {}[5] ./jpeg/$(basename {} .PCD).jpg' \;
その他画像変換の例

png画像をjpeg画像に変換

find ./ -name '*.png' -exec sh -c 'convert {} $(basename {} .png).jpg' \;

ppm画像をjpeg画像に変換(同時にコントラストを上げる)

for i in *.ppm; do convert $i -quality 90 -contrast-stretch 0.15x0.05% `basename ${i%.*}.jpg`; done;
部分切り抜き

1920*1080画像の左右150pxずつを切り落とす場合(-crop 幅x高さ+開始X座標+開始Y座標)

convert input.jpg -crop 1620x1080+150+0 output.jpg

画像の左右150pxずつを切り落とす場合(-shave 幅x高さ)

convert input.jpg -shave 150x0 output.jpg

画像中央の800px*600pxを抜き出す場合

convert input.jpg -gravity center -crop 800x600+0+0 output.jpg

画像右下の800px*600pxを抜き出す場合

convert input.jpg -gravity southeast -crop 800x600+0+0 output.jpg

jpeg

ロスレス回転
jpegtran -rot 90 -copy all input.jpg > output.jpg

右90度回転の時は-rot 90、左90度回転の時は-rot 270とする。Exifを(メーカーノートを含めて)全てコピーする時には<copy>-copy all</copy>を指定する。入力ファイルと出力ファイルは同一ファイル名を指定する事はできない。1行のスクリプトで同一ファイル名を指定したい場合は次のようにする

cp input.jpg /tmp/jpegtran.tmp.jpg && jpegtran -rot 90 /tmp/jpegtran.tmp.jpg > input.jpg


Exif

exifタグの表示

全てのExifタグの表示

exif [ファイル名]

日本語表示で画面上の桁がずれる場合はLANG=C;exif [ファイル名]とする。また、CSV形式にするにはexif -m [ファイル名]とする。

exiftoolを用い全てのExifタグを表示する(-s, -S スイッチでタグ名の出力方法を変えられる)

exiftool [-s|-s -s|-s -s -s|-S] -G [ファイル名]

特定のExifタグを表示する

exiftool [-s|-s -s|-s -s -s] -タグ名 [ファイル名]

上の例で -s -s -s ではなく、awkを使って同様の出力を行う方法(区切り文字を : とし、前後スペースを含めて削除)

exiftool -S -タグ名 [ファイル名] | awk -F " *[:] *" '{print $2}'
jhead公式リファレンス

Jhead command line options

ファイルのタイムスタンプをExifの日時に変更する
jhead -ft [ファイル名]
exiftool -overwrite_original "-FileModifyDate<Exif:CreateDate" [ファイル名|ディレクトリ名]

指定日時以降のタイムスタンプのファイルをExifの日時に変更する

touch -t YYMMDDhhmm ~/start.tmp
find *.jpg -newer ~/start.tmp -exec jhead -ft {} \;
Exifの撮影日時を書き換える

新規設定する

jhead -ts2001:05:25-20:16:59 [ファイル名]

時間をずらす(カメラの時差設定が間違っていた場合など。例は時刻を8時間戻す場合)

jhead -ta-8:00 [ファイル名]

ModifyDate, DateTimeOriginal, CreateDate等に任意の日時を設定する

exiftool -overwrite_original -ModifyDate="2001:05:25 20:16:59" [ファイル名]

フォルダ内全てのjpegに対し、Modify DateにCreate Dateの日時をコピーする

for i in ./*.jpg; do exiftool -overwrite_original -ModifyDate="`exiftool -S -CreateDate $i | sed -e "s/CreateDate: //m"`" $i; done;
exiftool -overwrite_original "-Exif:ModifyDate<Exif:CreateDate" [ファイル名|ディレクトリ名]

メーカー名、カメラモデル、ソフトウエア名など任意の文字列に書き換える

exiftool -overwrite_original -Make="任意の文字列" [ファイル名]
exiftool -overwrite_original -Model="任意の文字列" [ファイル名]
exiftool -overwrite_original -Software="任意の文字列" [ファイル名]

Exifタグが特定の文字列に一致する場合、指定するタグを書き換える(この例は、Gimpで書き換えられてしまったSoftwareタグをリストアしている)

 exiftool -if '$Exif:Make =~ /PENTAX/i and $Exif:Software =~ /Gimp/i' -overwrite_original   -Exif:Software="K-x Ver 1.03" ./
ヘッダを新規作成する
jhead -mkexif [ファイル名]
ヘッダ情報を削除する
jhead -de [ファイル名] ---- Exifヘッダを削除する
jhead -purejpg [ファイル名] ---- Exifヘッダ他jpeg画像データ以外を全消去

pdf

pdf情報の表示 (xpdf-common)
pdfinfo [pdfファイル名]
pdffonts [pdfファイル名]

画像の抽出

pdfimages -f [開始ページ] -l [終了ページ] [input.pdf] [output ベースファイル名]
pdfファイルの結合・分割・抽出 (pdftk)

結合

pdftk [input1.pdf] [input2.pdf] cat output [output.pdf]

一部ページの抽出

pdftk [input.pdf] cat 1-10 output [output.pdf]
pdftk [input.pdf] cat 1-10 20-end [output.pdf]

奇数ページ (odd)、偶数ページ (even) の抽出

pdftk [input.pdf] cat 1-endodd output [output.pdf]

ページ抽出と結合(Handleを用いる)Aの1~10ページとBの20~最終ページを抽出して結合

pdftk A=[input1.pdf] B=[input2.pdf] cat A1-10 B20-end output [output.pdf]

奇数・偶数ページが逆になったpdfファイルの奇数・偶数を入れ替える(1,2,3,4,5... → 2,1,4,3,6...)

pdftk [input.pdf] cat 1-endodd output [output_odd.pdf]
pdftk [input.pdf] cat 1-endeven output [output_even.pdf]
pdftk A=[output_odd.pdf] B=[output_even.pdf] shuffle A B output [output.pdf]

回転 (右回転:right、左回転:left、180度回転:down)

pdftk [input.pdf] cat 1-endright output [output.pdf]

pdfファイルを左右に2分割して別々に保存

mutool poster -y 2 [input.pdf] [output.pdf]
ディレクトリ内の画像ファイルを、それぞれpdfファイルに一括変換する
find ./src/ -name '*.jpg' -exec sh -c 'convert "{}" "./dst/`basename {} .jpg`.pdf"' \;
複数のjpegファイルを1つのPDFファイルに変換する

それぞれのページをpdfに変換し、pdftkで各ページのpdfファイルを結合する

for i in *.jpg; do convert $i `basename ${i%.*}.pdf`; done;
pdftk *.pdf cat output ../output.pdf

convertコマンドのみでも変換できるが、遅い

convert *.jpg ../output.pdf
パスワードで保護する(128bitで暗号化)
pdftk [input.pdf] output [output.pdf] owner_pw OWN_PASSWORD user_pw USR_PASSWORD

パスワードを解除して保存する

pdftk [input.pdf] input_pw password output [output.pdf]

指定ディレクトリのPDFファイルを一括してパスワードを付与する

find ./src/ -name '*.pdf' -exec sh -c 'pdftk "{}" output "./dst/`basename {} .pdf`_enc.pdf" user_pw MY_PASSWORD' \;
属性設定
exiftool -Title="ファイルのタイトル" -Subject="サブタイトル" -Author="著作者名" -Keywords="キーワード" -Producer="作成ソフト" -CreateDate="2016:01:01 18:00:00" -ModifyDate="2016:01:01 18:00:00" [target.pdf]
属性・目次のバックアップ
pdftk in.pdf dump_data_utf8 output metadata_utf8.txt
pdftk in.pdf dump_data output metadata.txt
属性・目次のリストア
pdftk in.pdf update_info_utf8 metadata_utf8.txt output out.pdf
pdftk in.pdf update_info metadata.txt output out.pdf

※メタデータファイルに不必要なバイナリデータがダンプされている場合は、それを削除してリストアする。メタデータの構成は次のようになっている

InfoBegin
InfoKey: ModDate
InfoValue: D:20190518125051+09'00'
InfoBegin
InfoKey: CreationDate
InfoValue: D:20190509231651
InfoBegin
InfoKey: Author
InfoValue: ◯◯出版、著作者名◯◯
InfoBegin
InfoKey: Title
InfoValue: 本のタイトル
InfoBegin
NumberOfPages: 289
BookmarkBegin
BookmarkTitle: 目次
BookmarkLevel: 1
BookmarkPageNumber: 2
BookmarkBegin
BookmarkTitle: 第1章
BookmarkLevel: 1
BookmarkPageNumber: 4
BookmarkBegin
BookmarkTitle: 第1節
BookmarkLevel: 1
BookmarkPageNumber: 5
〜 以下省略 〜

ghostscript

公式マニュアル How to use Ghostscript, Details of Ghostscript output devices

pdfまたはpsを画像に変換する
gs -sDEVICE=jpeg -r200 -dNOPAUSE -dBATCH -sOutputFile=out.jpg in.pdf
  • -sDEVICE= に出力ファイルの種類を設定する。( jpeg / png16m / pnggray / tiff24nc / tiffgray / tiffg3 ... )
  • -r に解像度(dpi)を設定する。指定しない場合は72dpiが使われる。( -r200 / r200x100 )
  • -dTextAlphaBits=n -dGraphicsAlphaBits=n スイッチでアンチエイリアスを設定できる。n=4を代入すると最適値となる(とマニュアルには書かれている)
  • -dNOPAUSE -dBATCH は処理実行後すぐにプログラムを終了するスイッチ
  • -dSAFER はファイル消去や改名コマンドを無効化するスイッチ

複数ページのpdfまたはpsを画像に変換する場合は、%d識別子を使って

gs -sDEVICE=jpeg -r200 -dNOPAUSE -dBATCH -sOutputFile=out_%03d.jpg in.pdf

FAX送信用のtiff画像を作成する場合は(efax.rcの標準設定内容)

gs -sDEVICE=tiffg3 -r204x196 -dNOPAUSE -dSAFER -dMaxStripSize=0 -sOutputFile=out.tif in.pdf


rsync

オプションスイッチの概要:

-a : -r (--recursive) -l (--links) -p (--perms)  -t (--times) -g (--group) -o (--owner) -D の同時設定と同じ
-v : 詳細表示(転送中のファイル名をリアルタイムに表示)
-n : プレビューのみ (--dry-run)
-z : 通信を圧縮する
--delete : コピー元で削除済みのファイルは、コピー先でも削除する
--existing : コピー先に存在しないファイルは対象外(新規にファイル作成しない)
--link-dest=[dir] : dirに同一ファイルが存在すれば、コピーせずにハードリンクを作成
--exclude='[pattern]' : patternを除外(複数指定の例 --exclude='.Trash*/' --exclude='*.bak')
--modify-window=[second] : second秒以内は同じタイムスタンプとする(FATの場合1とすれば1秒以内は同一時刻と強制認識させられる)
--stats : 完了後に転送したファイル集計を表示する

コピー元のディレクトリ末端に / を付けないと、そのディレクトリ自身もコピーされる。

プレビュー
rsync -avn /path/from/ /path/to/
バックアップ実行
rsync -av /path/from/ /path/to/
内容を圧縮して転送(ネットワーク経由時に威力発揮する場合も)
rsync -avz /path/from/ /path/to/
リモートサーバよりバックアップ
rsync -av user@example.com:/path/from/ /path/to/
sshトンネルで接続(公開鍵認証)
rsync -av -e "ssh -i /path/to/id_rsa" user@example.com:/path/from/ /path/to/
インクリメンタル バックアップ
rsync -av --link-dest=/path/to_previous/ /path/from/ /path/to/

ファイル名変換

ファイル名の先頭/末尾に文字列を追加する
rename 's/^/文字列/' *.jpg
rename 's/.jpg$/文字列.jpg/' *.jpg
ファイル名を小文字に変換

変換したいファイルのあるディレクトリに移動して、次のスクリプトを実行 (*.JPGが対象の場合の例)

for i in [A-Z]* ; do [ -f $i ] && mv -i $i `echo $i | tr '[A-Z]' '[a-z]'`; done;

または

rename 'y/A-Z/a-z/' *

ファイル名の特定文字列を置換

rename 's/置換前/置換後/' *
「空白文字」を「_(下線)」に変換する(半角版、全角版)
find ./dir/ -name "* *" | rename 's/ /_/g'
find ./dir/ -name "* *" | rename 's/ /_/g'
連番ファイル(一時ファイル)を作成
touch temp{1..10}.tmp

または...

for ((i=0;i<10;i++)); do echo -n > temp$i.tmp; done
フォルダ内のファイルを連番ファイル名に改名する。

例:abc.txt, cdf.jpg -> 0001.txt, 0002.jpg

#!/bin/sh
 
# http://mizupc8.bio.mie-u.ac.jp/pukiwiki/index.php?TIPS%2FLinux%2F019 をかなり参考にした。
 
# 関数:get_sernumstr 番号 桁数
get_sernumstr()
{
  tmpstr="$1"
  while [ ${#tmpstr} -lt $2 ]
    do
      tmpstr="0"$tmpstr
    done
    echo $tmpstr
}
 
if [ $# -ne 1 ]
then
  echo "usage : renfile.sh basename\n\n"
  echo " example renfile.sh test -> test0001.jpg\n example renfile.sh null -> 0001.jpg\n"
  exit
fi
 
if [ "$1" = "null" ]
then
 TMP_BASE_NAME=""
else
 TMP_BASE_NAME=$1
fi
 
# ファイル名の末尾は1からの連番とする。
NUM=1
# 数値は4桁。
LEN=4
 
for SRC in `find -maxdepth 1 -name "*" -type f | sort -n`; do
  SERNO=`get_sernumstr $NUM $LEN`
  DST="${TMP_BASE_NAME}${SERNO}.${SRC##*.}"
  echo $SRC $DST
  mv -i $SRC $DST
  NUM=`expr $NUM + 1`
done
連番ファイル名を逆順のファイル名に並べ替える

例:0001.jpg -> 004.jpg, 0002.jpg -> 003.jpg, 0003.jpg -> 002.jpg, 0004.jpg -> 001.jpg

ls *.jpg | sort -t - -k 2 -n --reverse | awk '{ printf "mv %s %03d.jpg\n", $0, NR }' | sh

その他のファイル名操作

フルパスからコア部分を抜き出す(/dir/test.txt → test)
STR=/tmp/test.txt; echo `basename ${STR%.*}`
拡張子のみ抜き出す(/dir/test.txt → txt)
STR=/tmp/test.txt; echo ${STR##*.}
ファイル名のみ抜き出す(/dir/test.txt → test.txt)
STR=/tmp/test.txt; echo `basename ${STR}`
STR=/tmp/test.txt; echo ${STR##*/}
拡張子のみ取り外す(/dir/test.txt → /dir/test)
STR=/tmp/test.txt; echo ${STR%.*}
指定された拡張子”以外の”ファイルを検索する
find -name '*[^.jpg$]' -print
ShiftJISでzip圧縮を行う

(あらかじめdataというディレクトリにファイルを格納しておく)

convmv --r --notest -f utf8 -t cp932 ./data
zip -r data.zip ./data


ファイル日時操作

指定したディレクトリ以下のファイルのタイムスタンプを現在日時に変更
find /path/to/dir/ -name '*' -print -exec touch {} \;

指定した日時に変更する場合は

find /path/to/dir/ -name '*' -print -exec touch -t YYYYMMDDhhmm.ss {} \;

指定したファイルの日時に、他の全てのファイルを合わせる場合

find /path/to/dir/ -name '*' -print -exec touch --reference=Filename {} \;
ディレクトリ内で最も新しいファイルを表示する
ls -t | head -n 1
ファイルのタイムスタンプをコピーする(../ref/*.jpgのタイムスタンプを、./にそれぞれコピー)
find ./ -name '*.jpg' -print -exec sh -c 'touch -r ../ref/$(basename {}) {}' \;
指定されたディレクトリのファイル日時を、一定時間だけずらす
find ./ -name '*.jpg' -print -exec touch -r {} -d '-9 hour' {} \;


CD,DVDドライブ, ISOイメージファイル

isoイメージファイルの作成
readom dev=/dev/sr0 f=./imagefile.iso
日本語を含むisoイメージファイルのマウント(要root権限)
mount -o loop,iocharset=utf8 -t iso9660 ./imagefile.iso ./cdrom
User権限でisoイメージファイルのマウント
fuseiso -p ./imagefile.iso ./cdrom

マウントを解除するときは、fuseisoプロセスをkillする。"-p"オプションはマウントdirを自動作成。 GUI版はFurius ISO Mount

トレイ開閉関連

CD/DVDドライブをイジェクトする

eject [/dev/sr0]

CD/DVDドライブのトレイを閉める

eject -t [/dev/sr0]
情報表示

デフォルトの操作対象のCD/DVDドライブのデバイス名を得る

eject -n

DVD±RWのメディア情報を表示する

dvd+rw-mediainfo /dev/sr0

CD±RWドライブの情報を得る(マウントされている場合は umount /dev/cdrom してから)

cdrecord -checkdrive
DVD±RW書き込み

DVD±RWを強制フォーマットする

dvd+rw-format /dev/sr0 -force

DVD±RWにisoファイルを書き込む

growisofs [-speed=2] [-dvd-compat] -Z /dev/sr0=filename.iso
CD±RW書き込み

CD±RWを強制フォーマットする(マウントされている場合は umount /dev/cdrom してから)

cdrecord [-v] [dev=/dev/sr0] blank=fast

CD±RWにisoファイルを書き込む(マウントされている場合は umount /dev/cdrom してから)

cdrecord [-v] [-eject] [driveropts=burnfree] [dev=/dev/sr0] filename.iso
ドライブの読み書き可能なメディア形式を照会
cat /proc/sys/dev/cdrom/info


戻る一つ前のメニューに戻る