フォルダ(watch
)に多数の一時ファイルが誤って入力されています。ファイルをすべて消去しましたが、フォルダサイズはまだ356kBです。以前は、フォルダを別の場所に移動して同じ名前の新しいフォルダを作成し、すべてのファイルをそのフォルダにコピーして以前の小さなサイズに戻しました。フォルダを再作成せずに小さいサイズに戻す方法はありますか?
drwxr-xr-x 2 apache apache 4096 Nov 29 2014 details
drwxr-xr-x 2 apache apache 364544 Jan 21 17:24 watch
drwxr-xr-x 3 apache apache 4096 Jan 21 17:19 settings
watch
.htaccessとindex.phpという2つの小さなファイルがあります。
ext4ファイルシステムがあります。
答え1
e4fsck
-D
必要に応じて動作するように見えるサポートフラグ:
ファイルシステムがディレクトリインデックスをサポートしている場合は、ディレクトリを再インデックスするか、小さいディレクトリまたは既存の線形ディレクトリを使用するファイルシステムのディレクトリをソートして圧縮して、すべてのディレクトリを最適化してみてください。
もちろん、ファイルシステムを使用するにはマウントを解除する必要がありますfsck
。これはサーバーがダウンしていることを意味します。
ファイルシステムがきれいであってもファイルシステムが処理されるようにする-f
には、このオプションを使用する必要があります。e4fsck
テスト:
# truncate -s1G a; mkfs.ext4 -q ./a; mount ./a /mnt/1
# mkdir /mnt/1/x; touch /mnt/1/x/{1..4000}
# ls -ld /mnt/1/x
drwxr-xr-x 2 root root 69632 Nov 22 12:54 /mnt/1/x/
# rm -f /mnt/1/x/*
# ls -ld /mnt/1/x
drwxr-xr-x 2 root root 69632 Nov 22 12:55 /mnt/1/x/
# umount /mnt/1
# e2fsck -f -D ./a
e2fsck 1.43.3 (04-Sep-2016)
Pass 1: Checking inodes, blocks, and sizes
Pass 2: Checking directory structure
Pass 3: Checking directory connectivity
Pass 3A: Optimizing directories
Pass 4: Checking reference counts
Pass 5: Checking group summary information
./a: ***** FILE SYSTEM WAS MODIFIED *****
./a: 12/65536 files (0.0% non-contiguous), 12956/262144 blocks
# mount ./a /mnt/1
# ls -ld /mnt/1/x
drwxr-xr-x 2 root root 4096 Nov 22 12:55 /mnt/1/x/
答え2
あなたの質問に対する答えは、すべての実用的な目的のためにいいえ。 ext4はディレクトリを切り捨てないため、ディレクトリを再作成する必要があります。ファイルを新しいディレクトリにコピーするのではなく、移動して以前のスキルを向上させることができます。これははるかに高速で、ファイルのctimeのみが変更されます。
サブディレクトリがない場合は、ln
ファイルを新しいディレクトリにハードリンクすることもできます。
Linuxにはrenameat2
2つの名前を変更するために使用できるシステムコールがあるため、サブディレクトリがないとし、新しいディレクトリを作成し、古いディレクトリのファイルを新しいディレクトリにリンクしてから、古いディレクトリと新しいディレクトリを置き換えることができます。ディレクトリ。 Googleはすぐに見つけました。https://gist.github.com/eatnumber1/f97ac7dad7b1f5a9721frenameat2 を呼び出すサンプルコードです。
もちろん、すべてはデータだけであるため、そのようなものを使用することも、ディスクから直接データ構造を編集することもできますdebugfs
。dd
360 KBのスペースにこのパスを使用することはお勧めできません。
答え3
を使用すると、vim
ディレクトリを「編集」できます。除いてすべて./
削除../
私のダウンロードディレクトリは12kです
vim Downloads/
" ============================================================================
" Netrw Directory Listing (netrw v150)
" /home/harry/Downloads
" Sorted by name
" Sort sequence: [\/]$,\<core\%(\.\d\+\)\=\>,\.h$,\.c$,\.cpp$,\~\=\*$,*,\.o$,\.obj$,\.info$,\.swp$,\.bak$,\~$
" Quick Help: <F1>:help -:go up dir D:delete R:rename s:sort-by x:exec
" ============================================================================
../
./
Documents/
LeapDeveloperKit_2.3.1+31549_linux/
Leap_Motion_Installer_Packages_release_public_linux/
Moderncv Casual/
OneDrive-2015-11-24/
Resume/
g13-gui/
jpegs/
markdown-notes-linux-x64/
pebble_js_tutorial_1_1/
pios/
teamviewerqs/
xampp-linux-x64-5.6.14-4-installer.run*
.swo
1452760968416.jpg
1a412bb33cb0a60077579b8bc13b2237.log.gz
....
以下は、一般的な4kディレクトリの例です。
vim Videos/
" ============================================================================
" Netrw Directory Listing (netrw v150)
" /home/harry/Videos
" Sorted by name
" Sort sequence: [\/]$,\<core\%(\.\d\+\)\=\>,\.h$,\.c$,\.cpp$,\~\=\*$,*,\.o$,\.obj$,\.info$,\.swp$,\.bak$,\~$
" Quick Help: <F1>:help -:go up dir D:delete R:rename s:sort-by x:exec
" ============================================================================
../
./
EnVyUs vs NiP, Mirage - FACEIT Stage 3 Finals at Dreamhack Winter - Group B-O3pBF-3KmzM.mp4
The Tek 0201 - Is USA Like Nazi Germany-zrOo8LzvKvc.mp4
The Tek 0203 - YT Red, EU Net Neutrality Trouble, Drones Taking Jobs-IEdUcjBGyEw.mp4.part
The Tek 0204 - Logan's Favorite Episode of the Year-iga7kB1NhKY.mp4
VP vs TSM, Mirage - FACEIT Stage 3 Finals at Dreamhack Winter - Group A Winners Match-3jfepl5Of0o.mp4
.swp
私が理解しているように、Linux(または* Nix)の下のディレクトリは、「下」ファイルに関する情報を格納する「特殊」ファイルにすぎません。私のシステムでvim
これを行う唯一の方法は、nano
別の方法を使用して空のファイルを表示することです。内容を違うように読んでいるようです。
これは、Linuxでフォルダ(ディレクトリ)が何であるかを答える良いスタック交換の質問です。 Unixファイルシステムでは、ディレクトリはどのように実装されますか?