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


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

目次

ネットワーク

開いているポート一覧
netstat

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

開いているソケット一覧
sockstat
帯域の表示
bwm-ng

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 -

動画

音楽(オーディオ)に静止画を付けて動画ファイルにする
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枚の速度で切り替わる。

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に変換

16Base:3072x2048を変換する場合は、画像ファイル名の後ろに [5] を付加する

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' \;
その他画像変換の例

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

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

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

jhead公式リファレンス

Jhead command line options

ファイルのタイムスタンプをExifの日時に変更する
jhead -ft [ファイル名]

指定日時以降のタイムスタンプのファイルを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 -Software="任意の文字列" [ファイル名]
ヘッダを新規作成する
jhead -mkexif [ファイル名]
ヘッダ情報を削除する
jhead -de [ファイル名] ---- Exifヘッダを削除する
jhead -purejpg [ファイル名] ---- Exifヘッダ他jpeg画像データ以外を全消去
exifヘッダを表示する
exif [ファイル名]

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

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-10odd output [output.pdf]

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

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

回転 (右回転:R、左回転:L、180度回転:D)

pdftk [input.pdf] cat 1-10W output [output.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 password1 user_pw password2

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

pdftk [input.pdf] input_pw password output [output.pdf]
属性設定
exiftool -Title="ファイルのタイトル" -Subject="サブタイトル" -Author="著作者名" -Keywords="キーワード" -Producer="作成ソフト" -CreateDate="2016:01:01 18:00:00" -ModifyDate="2016:01:01 18:00:00" [target.pdf]

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 : コピー先に存在しないファイルは対象外(新規にファイル作成しない)

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

プレビュー
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/

ファイル名変換

ファイル名を小文字に変換

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

for i in [A-Z]* ; do [ -f $i ] && mv -i $i `echo $i | tr '[A-Z]' '[a-z]'`; done;
連番ファイル(一時ファイル)を作成
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

その他のファイル名操作

フルパスからコア部分を抜き出す(/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' {} \;

ディスクドライブ関連

ボリュームラベルの変更

extの場合

e2label /dev/sdb1 [新しいラベル名]

FAT32の場合、現在のボリュームラベルを表示後に変更入力に遷移

mlabel -i /dev/sdb1
日本語を含む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

システム状態表示

Linuxディストリビューションのバージョン表示
lsb_release -a
コンピュータ名やカーネルバージョンの表示
uname -a
ハードウエア情報
lshw
lshal
dmidecode
lspci
lsusb
ロケールの表示
locale
戻る一つ前のメニューに戻る