GNU/Linux >> Belajar Linux >  >> Linux

Memindahkan file di Linux tanpa mv

mv yang rendah hati command adalah salah satu alat berguna yang Anda temukan di setiap kotak POSIX yang Anda temui. Tugasnya didefinisikan dengan jelas, dan melakukannya dengan baik:Memindahkan file dari satu tempat dalam sistem file ke sistem file lainnya. Tetapi Linux tidak ada artinya jika tidak fleksibel, dan ada opsi lain untuk memindahkan file. Menggunakan alat yang berbeda dapat memberikan keuntungan kecil yang sangat cocok dengan kasus penggunaan tertentu.

Sebelum menyimpang terlalu jauh dari mv , lihat hasil default perintah ini. Pertama, buat direktori dan buat beberapa file dengan izin yang disetel ke 777:

$ mkdir example
$ touch example/{foo,bar,baz}
$ for i in example/*; do ls /bin > "${i}"; done
$ chmod 777 example/*

Anda mungkin tidak memikirkannya seperti ini, tetapi file ada sebagai entri, yang disebut node indeks (umumnya dikenal sebagai inode ), dalam sistem file. Anda dapat melihat inode apa yang ditempati file dengan perintah ls dan --inode pilihan:

$ ls --inode example/foo
7476868 example/foo

Sebagai percobaan, pindahkan file tersebut dari direktori contoh ke direktori Anda saat ini, lalu lihat atribut file:

$ mv example/foo .
$ ls -l -G -g --inode
7476868 -rwxrwxrwx. 1 29545 Aug  2 07:28 foo

Seperti yang Anda lihat, file asli—bersama dengan izin yang ada—telah "dipindahkan", tetapi inodenya tidak berubah.

Terminal Linux

  • 7 emulator terminal teratas untuk Linux
  • 10 alat baris perintah untuk analisis data di Linux
  • Unduh Sekarang:lembar contekan SSH
  • Lembar contekan perintah Linux tingkat lanjut
  • Tutorial baris perintah Linux

Begitulah cara mv alat diprogram untuk memindahkan file:Biarkan inode tidak berubah (kecuali file dipindahkan ke sistem file yang berbeda), dan pertahankan kepemilikan dan izinnya.

Alat lain menyediakan opsi yang berbeda.

Salin dan hapus

Pada beberapa sistem, tindakan pemindahan adalah tindakan pemindahan yang sebenarnya:Bit dihapus dari satu titik di sistem file dan dipindahkan ke titik lain. Perilaku ini sebagian besar tidak disukai. Tindakan pemindahan sekarang berupa penetapan ulang atribut (sebuah inode sekarang menunjuk ke lokasi yang berbeda dalam organisasi file Anda) atau penggabungan dari tindakan penyalinan yang diikuti dengan tindakan penghapusan.

Tujuan filosofis dari desain ini adalah untuk memastikan bahwa, jika pemindahan gagal, file tidak akan terpotong.

cp perintah, tidak seperti mv , membuat objek data baru di sistem file Anda. Ini memiliki lokasi inode baru, dan tunduk pada umask aktif Anda. Anda dapat meniru gerakan menggunakan cp dan rm (atau sampah jika Anda memilikinya) perintah:

$ cp example/foo .
$ ls -l -G -g --inode
7476869 -rwxrwxr-x. 29545 Aug  2 11:58 foo
$ trash example/foo

foo . yang baru file dalam contoh ini mendapat 775 izin karena umask lokasi secara khusus mengecualikan izin menulis:

$ umask
0002

Untuk informasi lebih lanjut tentang umask, baca artikel Alex Juarez tentang izin file.

Kucing dan hapus

Mirip dengan menyalin dan menghapus, menggunakan cat (atau tac , dalam hal ini) perintah memberikan izin yang berbeda ketika file "dipindahkan" Anda dibuat. Dengan asumsi lingkungan pengujian baru tanpa foo di direktori saat ini:

$ cat example/foo > foo
$ ls -l -G -g --inode
7476869 -rw-rw-r--. 29545 Aug 8 12:21 foo
$ trash example/foo

Kali ini, file baru dibuat tanpa izin sebelumnya. Hasilnya sepenuhnya tunduk pada pengaturan umask, yang tidak memblokir bit izin untuk pengguna dan grup (bit yang dapat dieksekusi tidak diberikan untuk file baru terlepas dari umask), tetapi itu memblokir bit tulis (nilai dua) dari yang lain. Hasilnya adalah file dengan izin 664.

Rsinkron

rsync command adalah alat serbaguna yang kuat untuk mengirim file antara host dan lokasi sistem file. Perintah ini memiliki banyak opsi yang tersedia untuknya, termasuk kemampuan untuk membuat tujuannya mencerminkan sumbernya.

Anda dapat menyalin dan kemudian menghapus file dengan rsync menggunakan --remove-source-files opsi, bersama dengan opsi lain apa pun yang Anda pilih untuk melakukan sinkronisasi (yang umum dan tujuan umum adalah --arsip ):

$ rsync --archive --remove-source-files example/foo .
$ ls example
bar  baz
$ ls -lGgi
7476870 -rwxrwxrwx. 1 seth users 29545 Aug 8 12:23 foo

Di sini Anda dapat melihat bahwa izin dan kepemilikan file dipertahankan, stempel waktu telah diperbarui, dan file sumber telah dihapus.

Sebuah kata peringatan: Jangan bingung opsi ini untuk --delete , yang menghapus file dari tujuan Anda direktori. Menyalahgunakan --hapus dapat menghapus sebagian besar data Anda, dan sebaiknya hindari opsi ini kecuali di lingkungan pengujian.

Anda dapat mengganti beberapa default ini, mengubah izin dan pengaturan modifikasi:

$ rsync --chmod=666 --times \
--remove-source-files example/foo .
$ ls example
bar  baz
$ ls -lGgi
7476871 -rw-rw-r--. 1 seth users 29545 Aug 8 12:55 foo

Di sini, umask tujuan dihormati, jadi --chmod=666 opsi menghasilkan file dengan 664 izin.

Manfaatnya lebih dari sekadar izin. rsync perintah memiliki banyak opsi yang berguna (tidak sedikit di antaranya adalah --kecualikan bendera sehingga Anda dapat mengecualikan item dari operasi pemindahan besar) yang menjadikannya alat yang lebih tangguh daripada mv sederhana memerintah. Misalnya, untuk mengecualikan semua file cadangan saat memindahkan kumpulan file:

$ rsync --chmod=666 --times \
--exclude '*~' \
--remove-source-files example/foo .

Setel izin dengan pemasangan

instal command adalah perintah salin yang secara khusus ditujukan untuk pengembang dan sebagian besar dipanggil sebagai bagian dari rutinitas instalasi kompilasi perangkat lunak. Itu tidak terkenal di kalangan pengguna (dan saya sering bertanya-tanya mengapa itu mendapat nama yang intuitif, hanya menyisakan akronim dan nama hewan peliharaan untuk manajer paket), tetapi instal sebenarnya adalah cara yang berguna untuk meletakkan file di tempat yang Anda inginkan.

Ada banyak opsi untuk instal perintah, termasuk --backup dan --bandingkan perintah (untuk menghindari "memperbarui" salinan file yang lebih baru).

Tidak seperti cp dan kucing , tapi persis seperti mv , pasang perintah dapat menyalin file sambil mempertahankan stempel waktunya:

$ install --preserve-timestamp example/foo .
$ ls -l -G -g --inode
7476869 -rwxr-xr-x. 1 29545 Aug  2 07:28 foo
$ trash example/foo

Di sini, file disalin ke inode baru, tetapi mtime tidak berubah. Namun, izinnya disetel ke instal default 755 .

Anda dapat menggunakan instal untuk mengatur izin, pemilik, dan grup file:

$ install --preserve-timestamp \
--owner=skenlon \
--group=dialout \
--mode=666 example/foo .
$ ls -li
7476869 -rw-rw-rw-. 1 skenlon dialout 29545 Aug  2 07:28 foo
$ trash example/foo

Pindahkan, salin, dan hapus

File berisi data, dan file yang sangat penting berisi Anda data. Belajar mengelolanya dengan bijak itu penting, dan sekarang Anda memiliki perangkat untuk memastikan bahwa data Anda ditangani persis seperti yang Anda inginkan.

Apakah Anda memiliki cara yang berbeda dalam mengelola data Anda? Beri tahu kami ide Anda di komentar.


Linux
  1. Cara Mengonversi File ke Encoding UTF-8 di Linux

  2. Cara Melihat atau Mengubah ACL di File Linux

  3. Transfer File Android untuk Linux – Kirim File ke Linux Tanpa Batas Ukuran

  1. Salin file di terminal Linux

  2. Apa itu file jarang di Linux

  3. Memindahkan file di Linux ke C

  1. Pindahkan file di terminal Linux

  2. Menyalin file di Linux

  3. Cara mengekstrak file .gz dan .tar.gz di Linux