Sudo, oturum açan kullanıcıyı (aslında Sudo'yu çalıştıran) bulmak için kullanabileceğiniz bir ortam değişkeni "SUDO_USER" oluşturur.
Sudo'nun kök saldığını varsayarsak (diğer kullanıcılara erişmek için Sudo'yu kullanmak mümkündür), aşağıdaki iki adımı otomatikleştirmek için bir komut dosyası yazabilirsiniz.
cp source target
chown $SUDO_USER target
(Yalnızca kök dosyaları dağıtabileceğinden, kök olmayan bir kullanıcıya sudo uygularsanız bu çalışmaz.)
Otomatikleştirmek biraz iş olacak. Kaynak tek bir dosyaysa ve hedef bir dizin değilse, işiniz yapılır. Soruyu sorduğunuzu varsayıyorum, çünkü sorun sadece daha karmaşık durumlarda gerçek bir sorun, örn.
cp /path/source/some*files /path/target/directory/
Hangi dosyaların ve hangi dizinlerin geçildiğini, hangilerinin önceden var olduğunu, hangilerinin üzerine yazıldığını ve yalnızca başarıyla kopyalanan dosyaların sahipliğini değiştirmek için karmaşık bir komut dosyası yazılabilir.
Bu iş zaten yapıldı. cpio
Şunu kullanabilirsiniz - Kökten sudo'ya sonra, dosyaları kopyalamak için cpio kullanın. cpio'nun kopyalanacak dosyaların bir listesine ihtiyacı vardır, bu yüzden iki adımlı bir işlemdir. Aşağıda ls
kopyalanacak dosyaların listesini oluşturmak için kullanıyorum .
ls /path/source/some*files | cpio -pdm --owner $SUDO_USER /path/target/directory/
-pdm
Vasıta "Geçiş modu, dosya değişiklik zamanları gerektiği gibi dizinleri oluşturma koruyun"
--owner $SUDO_USER"
belirtilen kullanıcının dosyalara sahip olmasına neden olur.
Son işlenen, cpio'nun dosyaları depolaması gereken dizindir.
Cpio awesomeness hakkında daha fazla bilgi edinmek için buradaki CPIO kılavuz sayfasına gidin
Bunu tek bir sudo komutuyla yapmak da mümkündür. Kullanıcılarınızın dosyalara erişim haklarına sahip olduğunu varsayarsak, sudo dosyasını yalnızca cpio bölümü için kullanın, örneğin:
ls /path/source/some*files | cpio -pdm --owner $USER /path/target/directory/
Yukarıdaki durumda $ SUDO_USER yerine $ USER kullanıyorum çünkü Sudo çalıştırılmadan önce değerlendiriliyor. Alternatif olarak, kullanıcının dosyaları listeleme erişimi yoksa, bir sarmalayıcı komut dosyasına yerleştirin ve sarmalayıcıyı çalıştırmak için sudo kullanın. Bu zorlaşabilir, ancak en basit durumda Sarıcı iki argüman alır: bir kaynak ve bir hedef.
Bu "cp_as_user" sarmalayıcısına gider:
ls $1 | cpio -pdm --owner $SUDO_USER $2
Ardından sargıyı şu şekilde kullanın:
sudo cp_as_user "/ path / to / bazı * dosyalar" / path / to / target / dizin
sudo cat /etc/foo.txt > ~/foo.txt
. Dosyalar yalnızca bir nedenden ötürü kök tarafından okunabilir olma eğilimindedir, bu nedenle kopyaları kök olmayan kullanıcılar tarafından okunabilir hale getirirken bu nedenle aklınızda bulundurmayı unutmayın.