dosyaları bir kullanıcıdan diğerine tek bir makinede kopyalama


20

Herhangi bir dosya veya dizinleri bir kullanıcıdan bir başka kullanıcıya aynı makinede terminal üzerinden nasıl kopyalarım ?

USER1 giriş dizininde bir test.txt dosyası olduğunu varsayalım . Bu dosyayı makinemdeki USER2 giriş dizinine kopyalamam gerekiyor. Terminal üzerinden nasıl yapabilirim?

Yanıtlar:


26

sudoAyrıcalıklarınızın olduğunu varsayarak , aşağıdaki komutu yerine getireceğiz

sudo cp /home/USER1/FNAME /home/USER2/FNAME && sudo chown USER2:USER2 /home/USER2/FNAME

Dosya USER1'den USER2'ye kopyalanacak ve sonra / home / USER2 içindeki kopya sahibini USER2 olarak değiştirecektir.

sudoAyrıcalıklarınız yoksa , iki kullanıcının USER1 dizininde okuma izninizin olduğundan ve USER2 dizinine yazma izninizin olduğundan emin olmanız gerekir. Bu erişimlere sahipseniz, aşağıdaki komutu girebilirsiniz:

cp /home/USER1/FNAME /home/USER2/FNAME

Bu, söz konusu dosyayı kopyalar, ancak USER2 uygun izinlere sahip olmadan dosyayı işleyemeyebilir.


Bu, yalnızca KULLANICI1'in çok kullanıcılı bir sistemde geçerli olmayabilecek sudo erişimi olması durumunda işe yarar.
BostonHiker

Diğer seçenek, diğer kullanıcının onları almasına izin vermek için izinleri kendi klasöründe ayarlamak olacaktır, ancak bu seçenek mümkünse daha kolaydır.
Geary Shull,

@BostonHiker Kopyayı yapan kişinin USER1 veya USER2 olmadığını ve sudo ayrıcalıklarına sahip olduğunu varsaymıştım. Bu muhtemelen benim açımdan kötü bir varsayımdır.
Charles Green

@Charles Green - Lütfen varsayımlarınızı belirtmek için cevabınızı düzenleyin, aksi halde eksik / yanıltıcıdır.
BostonHiker

@BostonHiker Tamamlandı. Beni dürüst tuttuğun için teşekkürler.
Charles Green

6

Eğer sudo ayrıcalıklarına sahip değilseniz, ancak iki kullanıcıyla giriş yapabilirsiniz, sonra scp ile localhost kullanabilirsiniz:

scp file1 user2@localhost:/home/user2/

Bunun uzak bir ana makine ile ilgili olduğunu veya söz konusu makinede çalışan bir SSH / SFTP sunucusunun olduğunu düşündüren nedir?
David Foerster

1
SSH'nin kurulu olduğunu varsayarak
loudstil

5

KULLANICI1 olarak:

cp [filename] /tmp
chmod 777 /tmp/[filename]

USER2 olarak:

cp /tmp/[filename] .

KULLANICI1 olarak:

rm /tmp/[filename]

Siz daha fazla yükseltme terk edersiniz :)
Neeraj Jain

1

Ssh'nin kurulu olmadığını veya anahtarları / sırları paylaşmak istemediğinizi varsayalım.

Kullanıcı1, grup1'de ve kullanıcı2'nin grup2'de olduğunu ve her ikisinin de kullanıcı1! = Kullanıcı2 ve grup1! = Grup2 olduğunu varsayalım.

Group3s paylaşılan bir grup oluşturun.

addgrp group3

Kullanıcı3'ü ve kullanıcı2'yi grup3lere ekleyin.

Bir kullanıcının sahibi olduğu ancak grup3'ün grup sahipliğine sahip olduğu, karşılıklı olarak erişilebilir bir yerde bir dizin oluşturun.

#as user1,
mkdir $place/shared && chown user1.group3s $place/shared && chmod 770 $place/shared;
#as user1 or user2,
cp $file $place/shared && chgrp $place/shared/$file && chmod 660 $place/shared/$file

Ancak, yeni, paylaşılan grubu oluşturamadığınızı ve her iki kullanıcıyı da bu gruba yerleştiremediğinizi varsayalım.

Dizini oluşturun ve 770 izin verin,

mkdir $place/shared && chown user1.group1 $place/shared && chmod 770 $place/shared;

Ardından, root / admin olarak, grup sahipliğini diğer kullanıcının grubuyla değiştirin,

sudo bash
chgrp group2 $place/shared && chmod g+s $place/shared

Chmod g + s komutu, setgid bitini, dizine yerleştirilen dosyaların group2 olarak ayarlanmış grup sahipliğine sahip olacak şekilde ayarlar.


0

Buradaki diğer her cevap kök erişim gerektirir , aynı makinedeki herhangi bir kullanıcının dosyayı kopyalamasına izin verir veya şifre paylaşımı gerektirir. İşte olmayan bir yöntem:

USER2aşağıdaki komutları çalıştırın (Onu Bob diyelim) (siz değiştirebilirsiniz /tmphem kullanıcıların yazma izinlerine sahip olduğunuz herhangi dizin olan, ancak /tmpvarsayılan olarak bu süreç statüsünü kötü niyetli bir kullanıcının engelleyen yapışkan olduğu için idealdir. Bir dizin olunan Bob tarafından dünyaca okunabilir de çalışır):

[bob@computer ~]$ touch /tmp/test.txt
[bob@computer ~]$ chmod 622 /tmp/test.txt

Bu, dünyaca yazılabilir ancak okunabilir olmayan bir dosya oluşturur.

Ardından USER1(haydi Alice'i arayalım) koşmasını sağlayın (paranoyaksanız, Alice ilk önce dosyanın Bob'a ait olduğundan emin olmak için izinleri kontrol edebilir):

[alice@computer ~]$ dd if="$HOME/test.txt" of=/tmp/test.txt

Bu içeriğinin üzerine yazar /tmp/test.txt. Dosyanın bütünlüğünü kontrol etmek istiyorsanız, Alice ayrıca dosyanın bir kopyasını da oluşturmalıdır. Örneğin:

[alice@computer ~]$ openssl sha1 < "$HOME/test.txt" > /tmp/test.txt.sha1

Bunun yerine dosyayı dijital olarak veya bütünlüğünü garanti altına almak için başka bir yöntemle imzalayabilirsiniz.

Ve nihayet Bob dosyayı taşır ve sahipliğini alır:

[bob@computer ~]$ mv /tmp/test.txt "$HOME" 
[bob@computer ~]$ chmod 600 "$HOME/test.txt"

Bob isterse bütünlüğü kontrol edebilir. Eğer öyleyse, sadece Alice'in yazabileceği emin olmak için kontrol etmeli /tmp/test.txt.

[bob@computer ~]$ diff /tmp/test/txt.sha1 <(openssl sha1 < "$HOME/test.txt")

Dosya doğru kopyalandıysa, bu görüntüde çıktı olmamalıdır.


-1

Bir kullanıcıyı diğerine kopyalamaya gitmeden önce, su kullanıcısı olarak giriş yapmanız ve ardından cp komutunu kullanmanız gerekir.

sudo cp /home/shyam/Desktop/sparkhadoop_2.11-1.0.jar /home/hadoop/Desktop

Bu, mülkiyeti devretmez, USER2ancak rootsanki bırakır . -1
David Foerster

@DavidFoerster mülkiyeti devretmiyoruz, dosyayı bir kullanıcıdan başka bir kullanıcıya kopyaladık. root kullanıcısını kullanarak dosyayı aktarabiliriz. Tamam
Shyam Gupta
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.