linux:commands:file_directory

ファイル&ディレクトリ関連

filename.txt というファイルを / (ルートディレクトリ)配下のすべてのファイルから検索する。

$ find / -name filename.txt
/home/tomoyan/filename.txt
/home/tomoyan/Documents/filename.txt

dhcp-range を含むファイルをルート配下のサブディレクトリすべて検索する。ただし、バイナリファイルと /proc ディレクトリは除外する。

$ sudo grep -rI dhcp-range / --exclude-dir=dir

-r サブディレクトリも対象とする。
-I バイナリファイルは除外する。
–exclude-dir 指定されたディレクトリは除外する。

tar.xz(圧縮)

$ tar Jcvf filename.tar.xz targetdir/

tar.xz(解凍)

$ tar Jxvf filename.tar.xz

bzip2 コマンドのインストールが必要

$ sudo dnf install bzip2 -y

tar.bz2(圧縮)

$ tar jcvf filename.tar.bz2 targetdir/

tar.bz2(解凍)

$ tar jxvf filename.tar.bz2

-C オプションで出力先ディレクトリを指定

$ tar jxvf filename.tar.bz2 -C ~/work

tar.gz、.tgz(圧縮)

$ tar zcvf filename.tar.gz targetdir/

tar.gz、.tgz(解凍)

$ tar zxvf filename.tar.gz

$ split -b "数値" "分割したいfile名" "変更後のファイルの接頭語"

※ ファイルのバイト数で変換したい場合 -b 数値 を使用。
数値の最後にmをつけるとメガバイト、kをつけるとキロバイトで数値指定可能
例) split -b 8m “分割したいfile名” “変更後のファイルの接頭語” → 8メガバイトで分割

$ split -b 512m filename.tar.bz2 filename.tar.bz2.
$ ll filename.tar.bz2*
-rw-r--r-- 1 root    root    4051803928  6月  9 16:27 filename.tar.bz2
-rw-r--r-- 1 tomoyan tomoyan  536870912  6月  9 16:32 filename.tar.bz2.aa
-rw-r--r-- 1 tomoyan tomoyan  536870912  6月  9 16:32 filename.tar.bz2.ab
-rw-r--r-- 1 tomoyan tomoyan  536870912  6月  9 16:32 filename.tar.bz2.ac
-rw-r--r-- 1 tomoyan tomoyan  536870912  6月  9 16:32 filename.tar.bz2.ad
-rw-r--r-- 1 tomoyan tomoyan  536870912  6月  9 16:32 filename.tar.bz2.ae
-rw-r--r-- 1 tomoyan tomoyan  536870912  6月  9 16:33 filename.tar.bz2.af
-rw-r--r-- 1 tomoyan tomoyan  536870912  6月  9 16:33 filename.tar.bz2.ag
-rw-r--r-- 1 tomoyan tomoyan  293707544  6月  9 16:33 filename.tar.bz2.ah
$ sha256sum filename.tar.bz2
566a4e3f15a20b86ee1777664fcbda02df57ec6ad4a65a0340e8c9cd6c558cbe  filename.tar.bz2
$ cat filename.tar.bz2.* >> filename-1.tar.bz2
$ sha256sum filename-1.tar.bz2
566a4e3f15a20b86ee1777664fcbda02df57ec6ad4a65a0340e8c9cd6c558cbe  filename-1.tar.bz2
$ tar jcvf filename.tar.bz2 targetdir/ --exclude /exclude/dirname
$ find /var/www/vhosts -type f -name "*access_log*" -print | grep statistics/logs > apache_logs.txt
$ tar jcvf apache_logs.tar.bz2 --files-from apache_logs.txt
$ gzip filename1.txt filename2.txt
$ ls
filename1.txt.gz filename2.txt.gz
$ gzip -d filename1.txt.gz
$ ls
filename.txt

7zip コマンド を参照。

 ファイルを 15MB 単位に分割する。

$ split -b 15m filename.tar.bz2 filename.tar.bz2.

 以下のように分割される。

filename.tar.bz2.aa
filename.tar.bz2.ab
filename.tar.bz2.ac

 上記のファイルを結合する。

$ cat filename.tar.bz2.* filename.tar.bz2

書式:

$ mkdir [-pv] [-m mode] [--help] [--version] [--] directory...
オプション説明
-p directory に指定されたパスに存在しない親フォルダが含まれる場合はエラーとせずに作成する。
-v 作成したディレクトリごとにメッセージ表示。-p と一緒に使用する。
-m mode 作成されるディレクトリのアクセス権を指定する。mode は chmod と同じ。

実行例:

$ mkdir tmp
$ mkdir -m 755 cgi-bin
$ mkdir -pv usr/bin
mkdir: created directory `usr'
mkdir: created directory `usr/bin'

iso ファイルのデバイスへの書き込み。

$ sudo cp Windows\ 10\ version\ 1809.iso /dev/sdb
$ rm fileName.ext
rm: remove 通常ファイル 'fileName.ext'? y[Enter]
$ rm -f fileName.ext
$ rm -r directoryName
rm: descend into directory 'directoryName'? y[Enter]
rm: descend into directory 'directoryName/subDirectory'? y[Enter]
...
$ rm -rf directoryName

du コマンドのヘルプ

+ ヘルプ [--help]

$ du --help

使用法: du [OPTION]... [FILE]...
または: du [OPTION]... --files0-from=F
各ファイルのデバイス使用量を集計します。ディレクトリは再帰的に処理されます。

長いオプションで必須となっている引数は短いオプションでも必須です。
  -0, --null            出力行の区切りとして改行文字ではなく NUL を使用する
  -a, --all             ディレクトリだけでなく、全てのファイルについて表示する
      --apparent-size   デバイス使用量ではなく実際のサイズを表示する。実際の
                          サイズは通常小さくなるが、(スパース) ファイル内のホール、
                          内部フラグメンテーション、間接ブロックなどの理由で
                          大きくなることもある。
  -B, --block-size=SIZE  SIZE の倍数として表示する。例: '-BM' は
                           1,048,576 バイト単位でサイズを表示する
  -b, --bytes           '--apparent-size --block-size=1' と同じ
  -c, --total           総合計量を表示する
  -D, --dereference-args  コマンドラインで指定されたシンボリック
                          のみをたどる
  -d, --max-depth=N     コマンド実行場所から N 階層以内のディレクトリの
                          (--all 指定時はファイルも) 合計を表示する。
                          --max-depth=0 は --summarize と同じ
      --files0-from=F   ファイル F で指定された NUL で区切られた名前の
                          ファイルからデバイス使用量を読み取る
                          F に - が指定された場合標準入力から読み込む
  -H                    --dereference-args (-D) と同様
  -h, --human-readable  人間が読みやすい形式でサイズを表示する (例: 1K 234M 2G)
      --inodes          ブロック使用量ではなく inode 使用量を表示する
  -k                    --block-size=1K と同様
  -L, --dereference     全てのシンボリックリンクをたどる
  -l, --count-links     ハードリンクされた場合その個数分サイズを数える
  -m                    --block-size=1M と同様
  -P, --no-dereference  シンボリックリンクをたどらない (デフォルト)
  -S, --separate-dirs   子ディレクトリのサイズを含めない
      --si              -h と同様だが、1024 ではなく 1000 の累乗を表示する
  -s, --summarize       各引数の合計容量のみ表示する
  -t, --threshold=SIZE  SIZE が正の場合は SIZE より小さいエントリを無視する。
                          SIZE が負の場合は SIZE より大きなエントリを無視する
      --time           ディレクトリとその子ディレクトリに含まれる全て
                          のファイルでの、最終更新時間を表示する
      --time=WORD       更新時間の代わりに WORD の時間を表示する。WORD には
                          次を指定できる: atime, access, use, ctime, status
      --time-style=STYLE  時間を STYLE の形式で表示する。STYLE には
                          次を指定できる: full-iso, long-iso, iso, +FORMAT
                          FORMAT は 'date' と同様に解釈される
  -X, --exclude-from=FILE  FILE 内のいずれかのパターンに一致するファイルを除外する
      --exclude=PATTERN    PATTERN に一致するファイルを除外する
  -x, --one-file-system    異なるファイルシステム上のディレクトリはスキップする
      --help        display this help and exit
      --version     output version information and exit

--block-size で指定した SIZE, DU_BLOCK_SIZE, BLOCK_SIZE およびBLOCKSIZE 環境変数
のうち、最初に指定されているサイズ単位で値が表示されます。それ以外の場合、デフォ
ルトの単位は 1024 バイトになります (POSIXLY_CORRECT が設定されている場合 512 バ
イト)。

SIZE 引数は整数で、追加で単位を指定できます
(例えば 10M は 10*1024*1024 です)。
単位には K, M, G, T, P, E, Z, Y (1024 の累乗) や
KB, MB, ... (1000 の累乗) が使用できます。
二進接頭辞も使用することもできます: KiB=K, MiB=M など。

GNU coreutils のオンラインヘルプ: <https://www.gnu.org/software/coreutils/>
翻訳に関するバグは <https://translationproject.org/team/ja.html> に連絡してください。
詳細な文書 <https://www.gnu.org/software/coreutils/du>
(ローカルでは info '(coreutils) du invocation' で参照可能)。

dir_name の容量表示

$ du -h -s dir_name
1.6G    dir_name

dir_name 配下のサブディレクトリ毎の容量表示

$ du -h -s dir_name/*
1.6G    dir1
0.2G    dir2
0.3G    dir3

dir_name 配下のすべてのサブディレクトリとファイル容量表示(降順, 上位50件)
※ファイルのみの表示はできない😅

$ du -kha dir_name/* --exclude={exclude_dir1,exclude_dir2,exclude_dir3} | sort -rn | head -50

find コマンドならファイルのみサイズ表示できる🤤

$ find ./dir_name -ls | sort -rh -k 7 | head -50
$ find ./dir_name -printf "%s %M %n %u %g %b %TD %TR %p\n" | sort -hr | head -50

容量の昇順ソート

$ du -h -s dir_name/* | sort -h
0.2G    dir2
0.3G    dir3
1.6G    dir1

容量の降順ソート

$ du -h -s dir_name/* | sort -hr
1.6G    dir1
0.3G    dir3
0.2G    dir2

du - コマンド (プログラム) の説明 - Linux コマンド集 一覧表
ファイズの大きいファイルを特定する:du, find, sort:Technical tips:Media hub
duコマンドで覚えておきたい使い方8個 | 俺的備忘録 〜なんかいろいろ〜
【 find 】コマンド(応用編その2)――検索したファイルを指定したフォーマットで表示する
findした結果を指定したフォーマットで表示したい | 雑廉堂の雑記帳

$ ln -s [src] [dist]

例:

$ ln -s /var/www www_root
$ ls -al
lrwxrwxrwx  1 tomoyan tomoyan 42 11月  1 13:15 2012 www_root-> /var/www

$ ln -s /var/www
$ ls -al
lrwxrwxrwx  1 tomoyan tomoyan 42 11月  1 13:15 2012 www-> /var/www

lessコマンドはmoreコマンドに似ているが、とても高機能なページャである。

書式:

less -?
less --help
less -V
less --version
less [-[+]aBcCdeEfgGiImMnNqQrsSuUVWwXZ]
     [-b bufs] [-h lines] [-j line] [-k keyfile]
     [-K character set] [-{oO} logfile]
     [-p pattern] [-P prompt] [-t tag]
     [-T tagsfile] [-x tab] [-y lines] [-[z] lines]
     [+[+]cmd] [--] [filename]...

オプションの詳細は、man lessを参照。

実行例:

$ less filename.txt  <- ファイルの内容が表示されて、↑↓キーで前方/後方移動ができる。
〜省略〜
(END) q              <- 表示を終了するにはqキーを入力する。

$ ls -al | less      <- コマンドの出力結果を、↑↓キーで移動表示ができる。
〜省略〜
(END) q              <- 表示を終了するにはqキーを入力する。

$ less /usr          <- ls -al | less と同じ。
合計 408
drwxr-xr-x  16 root root   4096 2008-12-08 14:47 ./
drwxr-xr-x  25 root root   4096 2009-01-22 21:10 ../
drwxr-xr-x   2 root root   4096 2007-06-08 17:07 X11R6/
drwxr-xr-x   2 root root  94208 2009-01-19 21:53 bin/
〜省略〜
/usr (END) q         <- 表示を終了するにはqキーを入力する。

ファイルのみ

$ sudo sh -c 'find . -type f -print | xargs chmod 644'

ディレクトリのみ

$ sudo sh -c 'find . -type d -print | xargs chmod 755'

中身がランダムなデータの巨大ファイルを作成する。
if には /dev/random または /dev/urandom を指定する。

$ sudo dd if=/dev/urandom of=/mnt/vdb1/bigdata.bin bs=1M count=1024
1024+0 レコード入力
1024+0 レコード出力
1073741824 bytes (1.1 GB, 1.0 GiB) copied, 9.50597 s, 113 MB/s
  • linux/commands/file_directory.txt
  • 最終更新: 2024/01/22 13:42
  • by ともやん