Linuxコマンド(ファイル操作)のチートシート - oasis3855/webpage GitHub Wiki
Home > Software > ソフトウエア開発・PC管理のメモ帳 > this page (このページ)
Linuxでファイル関連の処理を行うコマンドを個人的にメモしたものです
- SATA, USBドライブ等
-
sd
+デバイス認識順 a b c ...
+パーティションno 1 2 3 ...
- 例 : sda3 = 1番目のデバイス(a)の3番目のパーティション(3)
- NVMEドライブ
-
nvme
+コントローラno 0 1 2 ...
+デバイスno 1 2 3 ...
+パーティションno 1 2 3 ...
- 例 : nvme0n1p3 = 1番目のコントローラ(0)の1番目デバイス(1)の3番目のパーティション(3)
- ブロックデバイス一覧情報
lsblk [--nodeps] [--bytes] [--fs] [デバイス名|パーティション名]
-
--nodeps
: 個別パーティションを表示しない(デバイスのみ表示)、--bytes
: 単位をBytes、--fs
: 全情報を出力
blkid [-t NAME=値] [デバイス名|パーティション名]
-
-t NAME=値
: TYPEカラムがext4のものだけ表示したい場合は-t TYPE=ext4
- 例 :
sudo blkid -t TYPE=ext4
hdparm [-I] [-T] [-t] [デバイス名]
-
-I
: 詳細情報を表示(NVMEでは不可)、-T
: キャッシュリード速度を計測、-t
: バッファードリード速度を計測 - 例 :
sudo hdparm -I /dev/sda
- パーティション情報
fdisk -l [デバイス名]
- SMART情報
smartctl -a デバイス名
- NVMEデバイス
nvme list
デバイスの詳細情報表示
nvme id-ctrl -H デバイス名
- 例 :
sudo nvme id-ctrl -H /dev/nvme0n1
nvme smart-log デバイス名
エラー情報表示
nvme error-log デバイス名
- ディスク、ファイルなどのコピー
dd if=入力ファイル of=出力ファイル bs=ブロックサイズ count=回数
-
bs=nnn
: デフォルトは512バイト、ほかに 1024, 1K(=1024Bytes), 1kB(=1000Bytes), 1M, 1MB(=1000*1000Bytes), 10M ... などと指定する -
count=nnn
: 指定しない場合のデフォルトはファイルエンドまたはディスクエンドまで、ほかにbsと同じく 1024, 1K, 1M ... - 例 : 1MBytesのファイルを作成する
dd if=/dev/urandom of=./test.dat bs=1K count=1024
途中経過表示のあるディスク, ファイルコピー
ddrescue [-v|-v -v] [--ask] [--sector-size=512] [--cluster-size=128] [--log-events=イベントログ.txt] 入力ファイル 出力ファイル [MAPファイル.txt]
-
--sector-size=512
: 1クラスターのサイズ (Bytes),--cluster-size=128
: コピーする単位 (Sector), cluster-sizeを1とすれば、512Bytesずつコピーする -
--ask
: コピー開始前にプロンプト表示 -
-v
: 経過を詳細表示 - ddrescue MAPファイルのビジュアル表示
ddrescuemap MAPファイル.txt
- 開かれているファイルと、プロセス名の一覧表示 (パス名はワイルドカード可 : 例 /var/log/*)
lsof [パス名]
プロセス名(9カラム目)で並べ替える場合は
lsof | sort -k 9
特定のユーザのみ
lsof -u [user] lsof -u '[user-1],[user-2],[...]'
ネットワークを用いているもののみ (例としてsshのみの抽出も)
lsof -i lsof -i:ssh
特定のプロセスのみ (例としてssh)
lsof -c [process name] lsof -c ssh
複数条件で
lsof -a -c [process name] -u [user]
- ファイル名の先頭/末尾に文字列を追加する
rename 's/^/文字列/' *.jpg rename 's/.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
- フォルダ内のファイルを連番ファイル名に改名する。
#!/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
- 連番ファイル名を逆順のファイル名に並べ替える
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圧縮を行う
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' {} \;
- 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
- トレイ開閉関連
eject [/dev/sr0]
CD/DVDドライブのトレイを閉める
eject -t [/dev/sr0]
- 情報表示
eject -n
DVD±RWのメディア情報を表示する
dvd+rw-mediainfo /dev/sr0
CD±RWドライブの情報を得る(マウントされている場合は umount /dev/cdrom
してから)
cdrecord -checkdrive
- DVD±RW書き込み
dvd+rw-format /dev/sr0 -force
DVD±RWにisoファイルを書き込む
growisofs [-speed=2] [-dvd-compat] -Z /dev/sr0=filename.iso
- 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