İçeriği olan mevcut bir klasörü 'taktığınızda' ne olur?


80

Şu anda /tmpiçinde bazı geçici dosyalar var. Sabit sürücümü ( /dev/sdc1) üstüne /tmptaktığımda, dosyaları sabit sürücüde görebilirim. /tmpSabit diskimin takılı olduğu asıl içeriğe ne olur ? /tmpSabit sürücü takılı iken asıl içeriğinde r / w işlemleri yapmak mümkün mü ?

python@lanix / $ df -h
Filesystem      Size  Used Avail Use% Mounted on
/dev/sda1       286G   43G  229G  16% /
none            4.0K     0  4.0K   0% /sys/fs/cgroup
udev            3.8G  4.0K  3.8G   1% /dev
tmpfs           766M  1.4M  765M   1% /run
none            5.0M     0  5.0M   0% /run/lock
none            3.8G   38M  3.8G   1% /run/shm
none            100M   24K  100M   1% /run/user
/dev/sdb1       7.5G  2.7G  4.9G  35% /mnt
/dev/sdc1       932G  242G  691G  26% /tmp

Yanıtlar:


117

Sabit diskim takılı olduğunda asıl / tmp içeriğine ne olur?

Neredeyse hiçbir şey. Onlar sadece görünümden gizlenmiştir, normal dosya sistemi geçişi ile ulaşılamazlar.

Sabit sürücü takılıyken asıl / tmp içeriği üzerinde r / w işlemleri yapmak mümkün müdür?

Evet. “Orijinal” inizde açık dosya tanıtıcıları olan işlemler /tmpbunları kullanmaya devam edecektir. Ayrıca başka bir yere bağlayarak "yeniden ortaya çıkmasını" sağlayabilirsiniz /.

# mount -o bind / /somewhere/else
# ls /somewhere/else/tmp  

İşte olanlar için daha iyi (umarım) bir his elde etmek için deneyebileceğiniz küçük bir deney.

Not: Bu tam olarak doğru olma çabası ya da gerçekte ne olduğuna dair ayrıntılı bir açıklama değildir. Sadece büyük resmi verecek kadar kesin olmalı.

Makinemde adı verilen bir kullanıcı meve evinde rastgele bir dizin oluşturdum, içinde bir dosya var:

me@home $ pwd
/home/me/tmp
me@home $ echo hello > some_file
me@home $ ls  
some_file
me@home $ cat some_file 
hello

Bu noktada, sıradışı bir şey değil - sadece düz bir dosya ile düz bir dizin. Bu oturumu olduğu gibi açık bırakıyorum, cwdiçindeki test dizini içinde.

Kök olarak küçük bir dosya sistemi oluşturup üzerine kurarım /home/me/tmp.

root@home # dd if=/dev/zero of=./fs bs=1M count=10
10+0 records in
10+0 records out
10485760 bytes (10 MB) copied, 0.00467318 s, 2.2 GB/s

root@home # mkfs -t ext2 ./fs 
mke2fs 1.42.12 (29-Aug-2014)
[... snip ...]
Writing superblocks and filesystem accounting information: done

root@home # mount ./fs /home/me/tmp

Sonra yeni bir terminal açtım meve etrafa baktım :

me@home #2 $ cd tmp
me@home #2 $ ls
lost+found
me@home #2 $ cat some_file
cat: some_file: No such file or directory
me@home #2 $ echo bye bye > some_file
-su: some_file: Permission denied

Yani, yarattığımız dosya açıkça orada değil. lost+foundDizin bir ext dosya sisteminin köküne göstergesidir. Ve yazma iznini kaybettim, bu yüzden kesinlikle orijinal dizin değil.

İlk meoturuma geri dönelim, dünyayı nasıl gördüğüne bakalım:

me@home $ echo something else > other_file

Yazma problemi yok.

me@home $ cat some_file other_file 
hello
something else

Orijinal dosya hala orada, yeni dosya sorunu olmadan yarattı.

Ha? Neler oluyor?

İlk oturum, üzerine başka bir dosya sistemi kurularak root tarafından yerleştirilmeden önce dizine girdi. Bu takma işlemi, orijinal dosya sistemini hiç etkilemez. Kabuk işlemi, orijinal dosya sistemindeki dizin için mükemmel bir geçerli tutamağa sahiptir ve onunla etkileşime devam edebilir. Tür koşturup oluyor altındaki halı bağlama noktası.

İkinci oturum, bağlama bırakıldıktan sonra dizine girdi. Böylece yeni, boş dosya sistemini görür. Ve sysadmin izinleri aldı, bu yüzden istenen boşluğu kullanamıyor ... düzeltelim.

root@home # chown me:users /home/me/tmp
me@home #2 $ echo bye bye > some_file
me@home #2 $ ls 
lost+found  some_file
me@home #2 $ cat some_file 
bye bye

1. seans halının altından kaçabilir mi? (Küflenmeye başladı.)

Elbette! Oturum 1, dosya sistemi ağacını montajdan çıkarırsa, bu tanıtıcıyı içeriden kaybeder ve montajı herkes gibi takip eder.

me@home $ cd
me@home $ pwd
/home/me
me@home $ cd tmp
me@home $ cat some_file other_file
bye bye
cat: other_file: No such file or directory

2. seans görünümüyle aynı, normale döndük.

Ama dosyaların kaybolmadığını nereden biliyorsunuz? Artık kimse aramıyor!

Bu, bağlama bağlarının kullanışlı olduğu anlardan biri. Zaten monte edilmiş bir dosya sistemini başka bir yere monte etmenize izin veriyorlar.

me@home $ mkdir ~/bind
root@home # mount -o bind /home/me /home/me/bind

(Evet, bir dosya sistemini "kendi içinde" bağlayabilirsiniz. Cool trick, ha?)

me@home $ ls bind/tmp
other_file  some_file
me@home $ cat bind/tmp/*
something else
hello

Yani gerçekten oradalar, harekete geçmeye hazırlar. Basitçe orjinal konumlarında görünmez / ulaşılamıyorlar, montaj onları normal dizin geçişlerinden gizliyor.


Bununla oynamanı tavsiye ediyorum, çalınan "hileyi" anladıktan sonra bu gerçekten karmaşık değil. Bir kez Got It ™ 'i seçtikten sonra, daha da halı çekmek için birleşik dosya sistemlerine bakın.

Bir Not olsa: üzerinde montaj /tmpveya /varönyükleme işlemi tamamlandıktan sonra gerçekten (veya çekirdek işletim sistemi dizinleri herhangi biri) iyi bir fikir değildir. Bir çok uygulama bu dizinlerde eyaletten çıkar ve etraflarında dağınık oyunlar oynarsanız ciddi şekilde kafaları karışabilir.


4
Bu harika bir cevap - sizden istediklerimin ötesine geçtiniz. Bağlama fikri de oldukça iyi! Detaylı cevap için teşekkürler. Şerefe.
kullanıcı

11
Bu, gizemli bir şekilde disk alanını kaybetmenin yaygın bir yoludur. Eğer bir montaj betiğinde herhangi bir nedenle başarısız olursa, kök dosya sistemindeki dizine veri yazılabilir. Yeniden başlatma denenirse, takma başarılı olabilir ve belki hiç kimse farketmeyecektir (örneğin, dosya sistemi tmp dosyaları veya günlükleri içeriyorsa), belki de çok fazla yer yer hariç.
Dan Sheppard

2
@DanSheppard Bu, montaj noktalarımın chmod 000 setini ayarlamasının hoşlanmasının bir nedeni.
Zan Lynx

Ayrıca monte -bind Could /home/meüzerinde /home/meyerine "bağlamak" klasörünün? Yani halının üzerine başka bir halı koyarım. Yoksa fsönce sökmek mi istersin ?
jiggunjer

@jiggunjer Bu unionseçenek yardımcı olabilir gibi görünüyor .
hliu
Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.