Linuxのファイル操作 の変更点


#author("2023-10-05T08:39:21+09:00","default:k1rou","k1rou")
#author("2023-10-05T08:41:31+09:00","default:k1rou","k1rou")
*Linuxのファイル操作 [#x21bb6a9]
-[[Linuxコマンド]]

*ファイルとディレクトリの表示 [#h1db7b15]
**ls [#pa642746]
-ls -l <file-name> ※詳細情報を表示
 ls -lk ※ファイルサイズ:KB単位
 ls -lh ※ファイルサイズ:見やすい単位
 ls -lt ※日付順(昇順)
 ls -ltr ※日付順(降順)
 ls -lS ※ファイルサイズ(降順)
 ls -lSr ※ファイルサイズ(昇順)
 ls -lR ※再帰的に配下のディレクトリも表示
 ls -la ※「.」で始まるファイルも含めて表示
 ls -lA ※「.」で始まるファイルも含めて表示(カレントディレクトリ「.」と親ディレクトリ「..」は除く)
 ls -lF ※ファイルの種類を末尾に表示(ディレクトリ:/、実行ファイル:*、シンボリックリンク:@)
 ls -li ※iノード番号を表示
 ls -lu ※最終参照日時を表示
 ls -l --full-time ※日付を秒以下の単位も含めて表示
-ls -d ※ディレクトリの情報を表示
 ls -ld ※カレントディレクトリの情報を表示
 ls -ld <directory-name> ※指定したディレクトリの情報を表示

**stat [#a010de80]
-stat <file-name> ※詳細情報を表示

**file [#ga2b22ea]
-file <file-name> ※ファイルの種別を表示([[マジックナンバー]]を元に表示)

**tree [#fca1802d]
-tree ※ディレクトリをツリー構造で表示

**dirname [#d0d9ca60]
-dirname <path> ※パスからディレクトリ部分を取得

**basename [#d0d9ca60]
-basename <path> ※パスからファイル名部分を取得

*ファイルとディレクトリの検索 [#be7b7426]
**find [#x6d2c105]
-find <target-dir> <search-formula>
--検索式:ファイル名、ディレクトリ名
 find <target-dir> -name "<keyword>" ※キーワードにワイルドカードが指定できる
 find <target-dir> -iname "<keyword>" ※大文字/小文字を区別しない
 find <target-dir> -regex "<keyword>" ※正規表現を使う
--検索式:ファイルの種類
 find <target-dir> -type f  ※ファイル
 find <target-dir> -type d  ※ディレクトリ
 find <target-dir> -type l  ※シンボリックリンク
--検索式:最終更新日
 find <target-dir> -mtime -1 ※過去1日以内
 find <target-dir> -mtime -10 ※10日前の翌月以降
 find <target-dir> -mtime +10 ※10日前の前日以前
 find <target-dir> -mtime 10 ※10日前の24時間
 find <target-dir> -daystart -mtime +10 ※10日前の前日以前(0時を基準にする)
--検索式:最終アクセス日
 find <target-dir> -atime -10 ※過去10日以内アクセスあり
 find <target-dir> -atime +10 ※10日超アクセスなし
 find <target-dir> -atime 10 ※10日前の24時間
--検索式:アクセス権
 find <target-dir> -perm <mode>
--検索式:サイズ
 find <target-dir> -size <size> ※ファイルサイズ(ブロック単位)
--検索式:ユーザー名
 find <target-dir> -user <username>

--マッチしたファイルにコマンド実行:
 find <target-dir> -exec <command> {}\; ※確認なし
 find <target-dir> -ok <command> {}\; ※確認あり

**locate [#l0095509]
-locateデータベースを使ってファイルを検索する
-updatedbコマンドでlocateデータベースを更新してから実行する
--locate "<keyword>"

**updatedb [#e4280e37]
-locateコマンドが検索に使うlocateデータベースを更新する
--updatedb <option>
 updatedb
 updatedb -e <directory> ※指定したディレクトリを除いて更新する

--設定ファイル(/etc/updatedb.conf)
---PRUNEPATHS:指定したディレクトリを除く(登録しない)
---PRUNEFS:指定したファイルシステムを除く(登録しない)

**which [#y8dbd310]
-コマンドの絶対パスを表示する
--which <command>

**whereis [#kd1cf9e0]
-コマンドのバイナリファイル、ソースコード、マニュアルが置かれている場所を表示する
--whereis <option> <command>
 whereis <command>
 whereis -b <command> ※バイナリファイル
 whereis -s <command> ※ソースコード
 whereis -m <command> ※マニュアル
 
 whereis -a <command> ※最初に検出したものだけでなく、全てマッチしたものを表示する
 whereis -ab <command> ※全てのバイナリファイル

**type [#n99985b9]
-コマンドがどのようなコマンドかを表示する(エイリアスかどうかなど)
--type <option> <command>
 type <command>
 type -a <command>

*ファイルとディレクトリのコピー [#k2f71651]
**cp [#ee0729ec]
-cp <copy-file> <target-file>
-cp <copy-file> <target-directory>
 cp -f ※同名のファイルがあった場合は上書き
 cp -i ※同名のファイルがあった場合は上書きするか確認する
 cp -p ※コピー元ファイルの属性を保持してコピーする
 cp -d ※シンボリックリンクをコピーする
 cp -a ※可能な限りコピー元ファイルの状態を保持してコピーする(-dpRと同じ)
 cp <file> . ※カレントディレクトリにコピー
 cp <file> ~ ※ホームディレクトリにコピー
-cp <copy-directory> <target-directory>
 cp -r ※ディレクトリ内を再帰的にコピーする
 cp -R ※ディレクトリ内を再帰的にコピーする
-cp <copy-file1> <copy-file2> <..> <target-directory> ※複数のファイルをコピーする(最後の引数がコピー先になる)

**dd [#c0743646]
-ブロック単位でファイルをコピー
-デバイスの情報をファイルに出力することができる
--dd if=<input> of=<output>
 dd if=/dev/cdrom of=cdrom.iso

*ファイルとディレクトリの移動 [#b45b9580]
**mv [#q388b32b]
-mv <copy-file> <target-file>
-mv <copy-file> <target-directory>
 mv -f ※同名のファイルがあった場合は上書き
 mv -i ※同名のファイルがあった場合は上書きするか確認する
 mv <file-name1> <file-name2> ※同じディレクトリ内での移動でファイル名の変更ができる

*ファイルとディレクトリの削除 [#j32414da]
**rm [#vcd75e1e]
-rm <file-name>
 rm -f ※確認しないで削除
 rm -i ※削除するか確認する
-rm <directory-name>
 rm -r ※ディレクトリを再起的に削除する
 rm -R ※ディレクトリを再起的に削除する
 rm -rf ※確認しないで削除

**rmdir [#l06e5681]
-rmdir <directory-name> ※空のディレクトリを削除(中にファイル等がある場合は削除できない)

*ディレクトリの作成 [#mfca69d1]
**mkdir [#j0f9cff1]
-mkdir <directory-name>
-mkdir -m ※指定したアクセス権で作成
 mkdir -m 777
-mkdir -p ※親ディレクトリも作成する
 mkdir -p 1st/2nd/3rd

*ファイルのタイムスタンプを変更 [#g8dc3a88]
**touch [#ta3b47bf]
-touch <file-name>
 touch <file-name> ※オプションなしの場合は現在時刻に変更
 touch -a ※最終参照日時(Access)のみを変更
 touch -m ※修正日時(Modify)のみを変更
-touch -t [((CC)YY)MMDDhhmm(.SS)] ※指定した日時に変更
 touch -t 202010222222.12

*ファイルのチェックサム [#v562a22c]
-「[[チェックサム]]」参照



*ファイルの参照 [#md5aa07b]
**more [#r3443b7b]
-more <file-name>
--テキストファイルを1画面ずつスクロール表示する
--Spaceキー -1行進む
--Enterキー -次の画面に進む
--q -終了

**less [#m296dfe6]
-less <file-name>
--スクロール
---k、↑ ※上に1行
---j、↓、[Enter] ※下に1行
---f、[Space] ※下に1画面
---b、[Space] ※上に1画面
---q ※終了

--キーワード検索
---/ [文字列] ※下方向に文字列を検索
---? [文字列] ※上方向に文字列を検索
---n ※次を検索
---[Shift] + n ※前を検索

--操作マニュアル
---h ※操作マニュアルを表示
---q ※操作マニュアルを終了

**view [#f069f801]
-view <file-name>

**diff [#a918c54f]

**file [#c7af4edc]
-file ※ファイルの種類を確認

**xxd [#d5c86a1f]
-xxd ※バイナリファイルを16進数または2進数で表示する
--xxd <file> ※16進数で表示
--xxc -b <file> ※2進数で表示
--xxc -r <hex-file> <bin-file> ※16進数のダンプファイルからバイナリファイルを作成

 echo -n "16進数" | xxd -r -p | base64 ※16進数の文字列をバイナリに変換後、Base64で表示する
xxd -r -p
 echo -n "Base64" | base64 -d | xxd -p -c 256 ※Base64の文字列をバイナリにデコード後、16進数の文字列に変換して表示する
 ※-c は1行で表示する文字数の指定(最大256)

**hexdump [#g847625d]

*ファイルの変換 [#bf9eae4f]
**nkf [#xaec7ca3]
 nkf -w <from-file> > <to-file> ※文字コードをUTF-8に変換
 nkf -d <from-file> > <to-file> ※改行コードをLFに変換

*メタキャラクタ [#ie8034fd]
**メタキャラクタの種類 [#a4b1626e]
-ワイルドカード
--* ※0文字以上の文字/文字列
--? ※任意の1文字
--[] ※カッコ内に記述した文字のいずれか1文字にマッチする
 [abc]
 [a-z]
 [0-9]
 [!0-9] ※!はマッチしない範囲の指定(not演算子)
 [^0-9] ※^はマッチしない範囲の指定(not演算子)

-ブレース展開
--{} ※「,」で区切られた文字列のいずれかにマッチする
 [1,2]
 [01,02]

-エスケイプ文字
--\ (バックスラッシュ)
--メタキャラクタの直前に記述すると通常の文字として扱うようになる

*関連用語 [#l171f762]
-[[Linuxのファイル編集]]
-[[Linuxのファイル管理]]