Ini adalah tulisan kedua saya terkait Seri Linux Programming. Tulisan ini akan membahas sedikit lebih detail tentang manipulasi file di Linux. Mungkin ada beberapa perintah — sudah dibahas pada tulisan sebelumnya — yang akan dibahas ulang.

Ilustrasi: Linux Programming.
Ilustrasi: Linux Programming.

Daftar Perintah untuk Manipulasi File di Linux

1. echo

Perintah echo pada linux digunakan untuk menampilkan teks pada terminal. Misalnya kita ingin mencetak tulisan Halo dunia!,

echo "Halo dunia!"

Output:

Output echo 'Halo dunia!'.
Output echo "Halo dunia!".

Selain menampilkan teks secara langsung, perintah echo juga bisa digunakan untuk menampilkan isi dari variabel,

nama="Dede Irwanto"

echo "Halo, nama saya $nama"
Output perintah echo menampilkan isi variabel.
Output perintah echo menampilkan isi variabel.
Eksplorasi perintah echo dengan operator pengalihan (redirection).

echo bisa digabungkan dengan operator pengalihan seperti: > dan/atau >> untuk menuliskan teks pada sebuah file. Misalkan kita ingin menuliskan Halo dunia! pada file halo.txt,

echo "Halo dunia!" > halo.txt
Output file halo.txt
Output file halo.txt

📝 Sebagai catatan: Gunakan operator > dengan hati-hati karena akan menimpa seluruh isi file.

Perbedaan operator > dengan >>

Operator > akan menimpa semua isi file dengan teks baru. Misalnya pada file halo.txt tadi.

Isi file sebelumnya,

Isi file halo.txt sebelumnya
Isi file halo.txt sebelumnya

Tulis teks baru dengan operator >,

echo "Halo dunia 2" > halo.txt
Isi file halo.txt sesudahnya
Isi file halo.txt sesudahnya

Terlihat teks sebelumnya sudah ditimpa teks yang baru. Lantas bagaimana jika kita ingin menambahkan teks baru tanpa menimpa teks sebelumnya?

Untuk kasus ini, kita bisa menggunakan operator >>.

echo "Halo dunia 3" >> halo.txt
Isi file halo.txt dengan operator >>
Isi file halo.txt dengan operator >>

Teks ditambahkan pada baris baru tanpa menghapus isi file sebelumnya.


2. cat (concatenate)

Perintah ini digunakan untuk menampilkan isi file secara keseluruhan. Karena menampilkan seluruh isi file sekaligus, perintah ini kurang cocok untuk teks panjang. Apalagi dengan ukuran monitor yang kecil. Selain itu, tidak ada juga fitur scroll sehingga isi kalimat bagian atas akan terpotong.

Misalnya, kita akan menampilkan isi file CREDITS ini,

cat CREDITS
Isi file CREDITS dengan perintah cat
Isi file CREDITS dengan perintah cat

Masalah:

Isi file pada bagian atas terpotong dan kita tidak bisa melakukan scroll up.

Menampilkan isi file yang lebih interaktif

Untuk mengatasi permasalahan di atas, kita bisa mengkombinasikan perintah cat dengan less atau more menggunakan pipeline (|).

cat CREDITS | more
Isi file CREDITS dengan kombinasi perintah cat, more dan pipeline.
Isi file CREDITS dengan kombinasi perintah cat, more dan pipeline.

atau,

cat CREDITS | less
Isi file CREDITS dengan kombinasi perintah cat, less dan pipeline.
Isi file CREDITS dengan kombinasi perintah cat, less dan pipeline.

Secara umum, kedua perintah di atas memiliki fungsi yang sama, yaitu menampilkan teks dengan lebih interaktif — bisa melakukan navigasi, pencarian, dan sebagainya — namun terdapat beberapa perbedaan fitur antara keduanya.

Fiturmoreless
NavigasiHanya ke depan (forward)Bisa ke depan dan belakang (forward & backward)
Search (pencarian)Hanya ke depan (/)Bisa ke depan (/) dan ke belakang (?)
Jump (lompat)Tidak bisaLompat ke awal file (g), lompat ke akhir file (G)
Ulangi pencarianHanya bisa ke depan (n)Bisa ke depan (n) dan ke belakang (N)
Keluarqq
Tabel perbandingan fitur pada more dan less

3. head

Perintah ini digunakan untuk menampilkan beberapa baris awal teks pada sebuah file. Misalnya kita ingin menampilkan 20 baris awal pada file CREDITS,

head -n 20 CREDITS

Output:

Isi file CREDITS dengan kombinasi perintah head
Isi file CREDITS dengan kombinasi perintah head

4. tail

Perintah ini digunakan untuk menampilkan beberapa baris akhir teks pada sebuah file. Misalnya kita ingin menampilkan 30 baris akhir dari file CREDITS,

tail -n 30 CREDITS

Output:

Isi file CREDITS dengan kombinasi perintah tail
Isi file CREDITS dengan kombinasi perintah tail

Selain itu, perintah ini juga sering digunakan untuk mamantau log error pada sebuah aplikasi. Misalnya jika kita ingin melihat log error pada nginx,

tail -f /var/log/nginx/error.log

Secara otomatis perintah di atas akan menampilkan log error secara real time.


5. grep

Perintah ini sering dikombinasikan dengan pipeline (|) dan perintah lainnya seperti cat, tail, dsb. untuk memfilter kata kunci tertentu.

Sebagai contoh, kita ingin memfilter teks dengan kata kunci intel pada file CREDITS,

cat CREDITS | grep intel

Output:

Isi file CREDITS dengan kombinasi cat, pipeline, dan grep
Isi file CREDITS dengan kombinasi cat, pipeline, dan grep

6. file

Perintah ini digunakan untuk mendeteksi tipe/jenis dari sebuah file. Misalkan pada file CREDITS, walaupun file ini tidak memiliki ekstensi seperti: .txt, .jpg, .png, dsb. kita tetap bisa mendeteksi tipe dari file ini.

file CREDITS

Output:

Tipe dari file CREDITS
Tipe dari file CREDITS

File CREDITS tersebut bertipe text dengan Encoding UTF-8. Teks di dalamnya merupakan Unicode, yang artinya mendukung karakter dari banyak bahasa, simbol atau karakter non-ASCII seperti emoji, dll. Perintah file mendeteksi jenis file berdasarkan content bukan ekstensi. Sehingga, walaupun ekstensinya diubah atau dihapus, tidak akan mempengaruhi hasil dari pendeteksian jenis file tersebut.


7. tee

Perintah ini akan membaca input dari stdin (standard input) lalu menampilkan outputnya ke layar dan menuliskannya ke sebuah file. Berbeda dengan operator pengalihan (redirection), tee tidak akan menyembunyikan output pada layar sehingga kita tetap bisa melihatnya.

Perhatikan contoh berikut:

Misalkan kita ingin menampilkan isi dari direktori /home/dee lalu menuliskannya ke sebuah file bernama home.txt,

ls -l | tee home.txt

Output:

Output dari perintah tee
Output dari perintah tee

Cek isi file home.txt,

cat home.txt
Isi dari file home.txt
Isi dari file home.txt

8. printf

Perintah ini memiliki fungsi yang sama dengan echo yaitu untuk menampilkan teks pada layar. Namun printf lebih fleksibel karena bisa menampilkan teks dengan format tertentu (mirip seperti C-style).

Misalkan kita ingin menampilkan teks dengan tab (\t) dan new line (\n),

printf "Nama lengkap \t: Dede Irwanto\nTanggal lahir \t: 30-05-1992\n"

Output:

Output teks dengan printf
Output teks dengan printf

9. find

Perintah ini digunakan untuk mencari letak suatu file berdasarkan nama atau ukuran.

Sintaks dasar pencarian berdasarkan nama file,

find lokasi_pencarian -name "nama_file"

Sintaks dasar pencarian berdasarkan ukuran file,

find lokasi_pencarian -size +/-ukuran_file

Misalkan kita akan mencari file bernama CREDITS pada semua lokasi (.),

find . -name "CREDITS" 

Output:

Output pencarian file CREDITS dengan perintah find.
Output pencarian file CREDITS dengan perintah find.

Atau pencarian pada folder Documents berdasarkan ukuran file lebih dari 100 kilobyte,

find Documents/ -size +100k

Output:

Output pencarian file lebih dari 100 kilobyte.
Output pencarian file lebih dari 100 kilobyte.

Atau untuk pencarian kurang dari 100 byte,

find Documents/ -size -100b

Output:

Output pencarian file kurang dari 100 byte.
Output pencarian file kurang dari 100 byte.

Selain itu, kita juga bisa menambahkan aksi tertentu seperti: -fprint (menuliskan outputnya pada sebuah file) atau -delete (menghapus file).

find Documents/ -size -100b -fprint file_found.txt
Isi file_found.txt
Isi file_found.txt

Atau dengan opsi -delete,

find Documents/ -name "kawan*" -delete
Perintah find dengan opsi -delete
Perintah find dengan opsi -delete

10. whereis

Perintah ini digunakan untuk mencari lokasi dari sebuah file binary. Misalnya kita ingin mencari lokasi dari text editor vi.

whereis vi

Output:

Output whereis vi
Output whereis vi

Dari output di atas, terlihat bahwa file binary vi terletak di direktori /usr/bin.


11. « EOF

Perintah ini sering dikombinasikan dengan cat dan redirection untuk membuat file yang berisi teks multiline (langsung dari terminal atau shell skrip). Teknik ini dikenal dengan Here Document (heredoc).

Sebenarnya, kita bisa saja membuat teks multiline (pada sebuah file) dengan echo atau printf. Namun hal ini rasanya kurang praktis. Sebagai contoh:

Penulisan teks multiline dengan echo,

echo "Ini baris pertama" > file.txt
echo "Ini baris kedua" >> file.txt
echo "Ini baris ketiga" >> file.txt

Output:

Teks multiline dengan echo
Teks multiline dengan echo

Atau dengan printf,

printf "Ini baris pertaman\nIni baris kedua\nIni baris ketiga\n" > file1.txt

Output:

Teks multiline dengan printf
Teks multiline dengan printf

Jika hanya berisi 1-3 baris saja, tentu ini tidak jadi masalah, namun bagaimana jika jumlah baris lebih dari 10?

Pertimbangkan untuk menggunakan « EOF (heredoc)

Salah satu alternatif yang perlu dipertimbangkan ketika ingin menuliskan teks dengan jumlah baris yang cukup banyak (lebih dari 10) adalah menggunakan << EOF (heredoc).

Teks multiline dengan << EOF,

cat << EOF > file2.txt

Setelah menjalankan perintah di atas, kita tingal mengetikkan teks — dengan baris yang cukup banyak — kemudian mengetikkan EOF untuk mengakhirinya.

Teks multiline dengan << EOF
Teks multiline dengan << EOF

Lihat isi dari file2.txt,

Isi file2.txt
Isi file2.txt

Penutup

Rasanya pembahasan ini sudah cukup panjang (dan mungkin membosankan) sehingga tulisan lainnya — terkait manipulasi file — seperti: wildcard, permission, dan sebagainya akan dibahas pada bagian tersendiri.

Sekian, semoga bermanfaat.

CMIIW.