Saya jenis pemula untuk Linux, dan saya bertanya-tanya apakah atau tidak >
dan touch
memiliki efek yang sama. Maksud saya, apakah dua perintah berikut ini memiliki efek yang sama ?:
$ > file.txt
$ touch file.txt
Jika demikian, akan lebih baik mengetahui bahwa saya bisa mengetikkan `> file.txt 'untuk membuat file baru.
command-line
lmiguelvargasf
sumber
sumber
file.txt
sudah ada dan tidak kosong, tentu saja tidak.touch
file yang berisi data tidak akan terjadi apa-apa, tetapi jika Anda>
file itu akan dihapus.Jawaban:
Keduanya
touch
dan>
akan membuat file baru jika tidak ada. Seperti yang ditunjukkan oleh perintah terminal berikut ketika Andatouch
memiliki file yang ada, akses / waktu modifikasi terakhir diperbarui. Tetapi jika Anda>
ke file yang sudah ada itu terpotong dan waktu modifikasi terakhir diperbarui (waktu akses tidak). Catatan yang>
tidak menghapus / membatalkan tautan file. Inode tetap sama - itulah sebabnya>
/ atautruncate
biasanya digunakan untuk menghapus file log bahkan dengan pegangan file yang terbuka.Seperti disebutkan dalam komentar,
touch
adalah perintah eksternal dan hanya beroperasi pada file.>
adalah fitur bawaan shell yang melayani berbagai keperluan. Biasanya Anda akan melihatnya seperti dulucat source.fil > target.fil
.Bentuk panjang untuk mengosongkan file adalah:
Menggunakan
> emptme.fil
mencapai hal yang sama dalam format kompak untuk tidak mengarahkan apa pun ke file.sumber
> file.txt
baik untuk membersihkan file log.ln foo bar
, lalu menghapus dan membuat ulangfoo
,bar
masih memiliki konten sebelumnya).rm /var/log/nginx/access.log
sementara nginx membuka file itu akan memiliki 0 tautan tetapi inode akan tetap ada.lsof -c nginx | grep access.log
kemudian dengan pid,ls -l /proc/<pid>/fd/ | grep access.log
dan akhirnya cat / proc / <pid> / fd / <nama file dari perintah sebelumnya> `. Mengomentari meskipun ini sudah lama. Semoga masuk akalAda perbedaan mendasar antara keduanya.
Touch
adalah perintah yang digunakan untuk menandai waktu file. The>
simbol adalah redirector output standar.Penggunaan keduanya menjelaskan
Penggunaan Sentuhan
Jika file tidak ada, itu akan membuat file.
Sentuhan biasanya digunakan untuk membuat bendera. Misalnya jika Anda ingin menemukan semua file antara dua kali di sistem Anda, Anda dapat menggunakan urutan perintah ini:
Ini akan membuat file-file berikut (atau mengubah cap waktu jika ada):
Sekarang Anda dapat menggunakan find untuk menampilkan atau memproses semua file yang dimodifikasi pada jam tersebut (waktu antara kedua file waktu itu, yaitu antara 22:00 dan 23:00 pada 29 September 2016).
Ini adalah sebagian output dari perintah find di atas:
Penggunaan pengalihan Output
Simbol pengarahan ulang akan mengarahkan output standar ke file yang ditentukan. Tergantung pada pengaturan clobber / noclobber Anda jika bisa gagal. Noclobber hanya akan membuat file jika tidak ada.
Ada beberapa versi output redirection yang meliputi:
Kami dapat menggunakan
find
perintah kami di atas untuk mengarahkan ulang isi semua file yang dibuat dalam waktu yang ditentukan ke file yang bisa kami catat dan pelajari nanti:sumber
file.txt
ada dan tidak kosong, maka> file.txt
akan menghapus isinya tetapitouch file.txt
tidak. Tapi tidak ada yang menyebutkan itu>> file.txt
adalah pengganti yang baiktouch file.txt
- itu akan membuat file jika tidak ada (dengan asumsi Anda memiliki izin untuk melakukannya), tetapi itu tidak akan memotong file yang sudah ada. Lihat Apa perbedaan antara ">" dan ">>"?Usage of Output redirection
. Pemberitahuan dikatakan>>
=Redirect append>
.>> file.txt
merupakan pengganti yang bisa diterapkantouch file.txt
. (Fakta bahwa Anda adalah satu-satunya orang yang disebutkan>>
di semua adalah mengapa saya memposting komentar saya di bawah jawaban Anda, daripada di bawah pertanyaan.)>
adalah operator redirection output shell, yang digunakan untuk mengarahkan STDOUT dari perintah sebelumnya ke deskriptor file yang disebutkan setelah>
. Jika file ada, isinya akan terpotong, seperti file denganopen(2)
-ed denganO_TRUNC
flag, dan jika file tidak ada, itu akan dibuat.Penting untuk dicatat bahwa, operator pengalihan ini akan ditangani oleh shell sebelum perintah sebelumnya berjalan, jadi ini tidak tergantung pada perintah apa pun, dan ditangani oleh shell itu sendiri.
Perhatikan bahwa, beberapa shell (mis.
zsh
) Akan berperilaku berbeda dengan pengalihan kosong seperti:Solusi yang umum adalah menambahkan
:
(true
) perintah no-op:Secara tradisional, tujuan utama
touch
adalah untuk mengubah timestamp file, bukan membuat file.touch
membuat file, hanya ketika file yang disebutkan dalam argumen tidak ada, jika tidak mengubah waktu modifikasi file ke cap waktu saat ini. Anda juga dapat mengubah waktu akses, dan menggunakan waktu pembuatan inodetouch
.sumber
zsh
tidak mendukung pengalihan kosong - ini bertindak sangat mirip dengan mengarahkan ulangcat
tanpa argumen ke file. Pada dasarnya apa pun yang Anda ketik akan ditulis ke file hingga karakter EOF atau interupsi.zsh
Perilaku mirror ini dengan adil<file
, yang hanya mencetak konten file, seperti yangcat
akan dilakukan. Ini mungkin dapat dikonfigurasi, saya telah melihat<file
membuka file dalam pager.EOF
(seperti melakukancat >file.txt
seperti yang Anda katakan), di manabash
melakukan saja>file.txt
sudah cukup.touch
memperbarui waktu modifikasi dan waktu akses file. Ada opsi untuk memperbarui hanya satu atau yang lain. (2) Unix / Linux / POSIX tidak mendukung "waktu pembuatan inode", secara umum. Beberapa tipe sistem file mendukungnya, tetapi tidak ada cara universal untuk melihatnya, apalagi memodifikasinya. Bisakah Anda memberikan referensi yang mengatakan bahwa ada inkarnasitouch
yang memungkinkan pengguna untuk mengubah waktu pembuatan inode?