GNU/Linux >> Belajar Linux >  >> Linux

10 Penggunaan Simbol atau Operator (!) yang Menakjubkan dan Misterius di Perintah Linux

'!' simbol atau operator di Linux dapat digunakan sebagai Logical Negation operator serta mengambil perintah dari riwayat dengan tweak atau menjalankan perintah yang dijalankan sebelumnya dengan modifikasi. Semua perintah di bawah ini telah diperiksa secara eksplisit di bash Shell. Meskipun saya belum memeriksa tetapi sebagian besar dari ini tidak akan berjalan di shell lain. Di sini kita masuk ke penggunaan yang menakjubkan dan misterius dari '!' simbol atau operator dalam perintah Linux.

1. Jalankan perintah dari riwayat dengan nomor perintah.

Anda mungkin tidak menyadari fakta bahwa Anda dapat menjalankan perintah dari riwayat command (perintah yang sudah/sebelumnya dieksekusi). Untuk memulai, pertama-tama temukan nomor perintah dengan menjalankan ‘riwayat ' perintah.

$ history

Sekarang jalankan perintah dari riwayat hanya dengan nomor yang muncul, dalam keluaran sejarah . Katakanlah jalankan perintah yang muncul di nomor 1551 dalam keluaran ‘sejarah ' perintah.

$ !1551

Dan, itu menjalankan perintah (perintah teratas dalam kasus di atas), yang terdaftar di nomor 1551 . Cara mengambil perintah yang sudah dijalankan ini sangat membantu khususnya jika perintah tersebut panjang. Anda hanya perlu memanggilnya menggunakan ![Nomor yang muncul di output perintah history] .

2. Jalankan perintah yang dieksekusi sebelumnya sebagai perintah terakhir ke-2, perintah terakhir ke-7, dll.

Anda dapat menjalankan perintah-perintah yang telah Anda jalankan sebelumnya dengan urutan menjalankannya karena perintah yang dijalankan terakhir akan direpresentasikan sebagai -1 , kedua terakhir sebagai -2 , ketujuh terakhir sebagai -7 ,….

Jalankan sejarah pertama kali perintah untuk mendapatkan daftar perintah yang terakhir dieksekusi. Penting untuk menjalankan sejarah perintah, sehingga Anda dapat yakin bahwa tidak ada perintah seperti rm command > file dan lainnya hanya untuk memastikan Anda tidak menjalankan perintah berbahaya secara tidak sengaja. Dan kemudian centang perintah terakhir Keenam, Perintah terakhir Delapan dan perintah terakhir Kesepuluh.

$ history
$ !-6
$ !-8
$ !-10
3. Lewati argumen dari perintah terakhir yang kita jalankan ke perintah baru tanpa mengetik ulang

Saya perlu membuat daftar isi direktori ‘/home/$USER/Binary/firefox ' jadi saya memecat.

$ ls /home/$USER/Binary/firefox

Kemudian saya menyadari bahwa saya seharusnya menembakkan 'ls -l ' untuk melihat file mana yang dapat dieksekusi di sana? Jadi haruskah saya mengetikkan seluruh perintah lagi! Tidak, saya tidak perlu. Saya hanya perlu membawa argumen terakhir ke perintah baru ini sebagai:

$ ls -l !$

Di sini !$ akan membawa argumen yang diteruskan dalam perintah terakhir ke perintah baru ini.

4. Bagaimana menangani dua atau lebih argumen menggunakan (!)

Katakanlah saya membuat file teks 1.txt di Desktop.

$ touch /home/avi/Desktop/1.txt

lalu salin ke ‘/home/avi/Downloads ' menggunakan jalur lengkap di kedua sisi dengan cp perintah.

$ cp /home/avi/Desktop/1.txt /home/avi/downloads

Sekarang kita telah melewati dua argumen dengan cp memerintah. Pertama adalah ‘/home/avi/Desktop/1.txt ‘ dan yang kedua adalah ‘/home/avi/Downloads ‘, mari kita tangani secara berbeda, jalankan saja echo [arguments] untuk mencetak kedua argumen secara berbeda.

$ echo “1st Argument is : !^”
$ echo “2nd Argument is : !cp:2”

Catatan argumen pertama dapat dicetak sebagai “!^” dan argumen lainnya dapat dicetak dengan mengeksekusi “![Name_of_Command]:[Number_of_argument]” .

Pada contoh di atas, perintah pertama adalah ‘cp ' dan argumen ke-2 diperlukan untuk mencetak. Karenanya “!cp:2” , jika ada perintah, ucapkan xyz dijalankan dengan 5 argumen dan Anda perlu mendapatkan argumen ke-4, Anda dapat menggunakan “!xyz:4” , dan gunakan sesuka Anda. Semua argumen dapat diakses dengan “!*” .

5. Jalankan perintah terakhir berdasarkan kata kunci

Kita dapat menjalankan perintah yang terakhir dieksekusi berdasarkan kata kunci. Kita dapat memahaminya sebagai berikut:

$ ls /home > /dev/null						[Command 1]
$ ls -l /home/avi/Desktop > /dev/null		                [Command 2]	
$ ls -la /home/avi/Downloads > /dev/null	                [Command 3]
$ ls -lA /usr/bin > /dev/null				        [Command 4]

Di sini kita telah menggunakan perintah yang sama (ls) tetapi dengan sakelar yang berbeda dan untuk folder yang berbeda. Selain itu kami telah mengirimkan output dari setiap perintah ke ‘/dev/null ' karena kita tidak akan berurusan dengan output dari perintah juga konsol tetap bersih.

Sekarang Jalankan perintah last run berdasarkan kata kunci.

$ ! ls					[Command 1]
$ ! ls -l				[Command 2]	
$ ! ls -la				[Command 3]
$ ! ls -lA				[Command 4]

Periksa output dan Anda akan terkejut bahwa Anda menjalankan perintah yang sudah dieksekusi hanya dengan ls kata kunci.

6. Kekuatan dari !! Operator

Anda dapat menjalankan/mengubah perintah yang terakhir dijalankan menggunakan (!!) . Ini akan memanggil perintah run terakhir dengan alter/Tweak pada perintah saat ini. Mari tunjukkan skenarionya

Hari terakhir saya menjalankan skrip satu baris untuk mendapatkan IP pribadi saya, jadi saya menjalankan,

$ ip addr show | grep inet | grep -v 'inet6'| grep -v '127.0.0.1' | awk '{print $2}' | cut -f1 -d/

Lalu tiba-tiba saya menemukan bahwa saya perlu mengarahkan ulang output dari skrip di atas ke file ip.txt , jadi apa yang harus aku lakukan? Haruskah saya mengetik ulang seluruh perintah lagi dan mengarahkan output ke file? Solusi mudahnya adalah dengan menggunakan UP tombol navigasi dan tambahkan '> ip.txt' untuk mengarahkan output ke file sebagai.

$ ip addr show | grep inet | grep -v 'inet6'| grep -v '127.0.0.1' | awk '{print $2}' | cut -f1 -d/ > ip.txt

Terima kasih kepada Juru Selamat hidup UP tombol navigasi di sini. Sekarang perhatikan kondisi di bawah ini, lain kali saya menjalankan skrip satu baris di bawah ini.

$ ifconfig | grep "inet addr:" | awk '{print $2}' | grep -v '127.0.0.1' | cut -f2 -d:

Segera setelah saya menjalankan skrip, bash prompt mengembalikan kesalahan dengan pesan “bash: ifconfig: command not found” , Tidak sulit bagi saya untuk menebak bahwa saya menjalankan perintah ini sebagai pengguna yang seharusnya dijalankan sebagai root.

Jadi apa solusinya? Sulit untuk login ke root dan kemudian ketik seluruh perintah lagi! Juga (Tombol Navigasi ATAS ) dalam contoh terakhir tidak datang untuk menyelamatkan di sini. Jadi? Kita perlu memanggil “!!” tanpa tanda kutip, yang akan memanggil perintah terakhir untuk pengguna tersebut.

$ su -c “!!” root

Di sini su adalah mengganti pengguna yang merupakan root, -c adalah menjalankan perintah khusus sebagai pengguna dan bagian terpenting !! akan digantikan oleh perintah dan perintah yang dijalankan terakhir akan diganti di sini. Ya! Anda perlu memberikan kata sandi root.

Saya menggunakan !! kebanyakan dalam skenario berikut,

1. Saat saya menjalankan apt-get perintah sebagai pengguna biasa, saya biasanya mendapatkan kesalahan yang mengatakan Anda tidak memiliki izin untuk mengeksekusi.

$ apt-get upgrade && apt-get dist-upgrade

Opps error…jangan khawatir jalankan perintah di bawah ini untuk membuatnya sukses..

$ su -c !!

Cara yang sama saya lakukan untuk,

$ service apache2 start
or
$ /etc/init.d/apache2 start
or
$ systemctl start apache2

Pengguna OOPS tidak berwenang untuk melakukan tugas seperti itu, jadi saya jalankan..

$ su -c 'service apache2 start'
or
$ su -c '/etc/init.d/apache2 start'
or
$ su -c 'systemctl start apache2'
7. Jalankan perintah yang mempengaruhi semua file kecuali ![FILE_NAME]

! (Logis TIDAK ) dapat digunakan untuk menjalankan perintah pada semua file/ekstensi kecuali yang berada di belakang '!' .

J. Hapus semua file dari direktori kecuali yang namanya 2.txt .

$ rm !(2.txt)

B. Hapus semua jenis file dari folder kecuali yang berekstensi ‘pdf ‘.

$ $ rm !(*.pdf)
8. Periksa apakah direktori (katakanlah /home/avi/Tecmint) ada atau tidak? Printf jika direktori tersebut ada atau tidak.

Di sini kita akan menggunakan '! -d' untuk memvalidasi apakah direktori ada atau tidak diikuti oleh Operator Logis DAN (&&) untuk mencetak direktori itu tidak ada dan Logis OR Operator (||) untuk mencetak direktori yang ada.

Logikanya adalah, ketika output dari [ ! -d /home/avi/Tecmint ] adalah 0 , itu akan mengeksekusi apa yang ada di luar Logis DAN jika tidak maka akan masuk ke Logical OR (||) dan jalankan apa yang ada di luar Logis ATAU .

$ [ ! -d /home/avi/Tecmint ] && printf '\nno such /home/avi/Tecmint directory exist\n' || printf '\n/home/avi/Tecmint directory exist\n'
9. Periksa apakah direktori ada atau tidak? Jika tidak keluar dari perintah.

Mirip dengan kondisi di atas, tapi disini jika direktori yang diinginkan tidak ada maka akan keluar dari perintah.

$ [ ! -d /home/avi/Tecmint ] && exit
10. Buat direktori (misalnya tes) di direktori home Anda jika tidak ada.

Implementasi umum dalam Bahasa Scripting di mana jika direktori yang diinginkan tidak ada, itu akan membuatnya.

[ ! -d /home/avi/Tecmint ] && mkdir /home/avi/Tecmint

Itu saja untuk saat ini. Jika Anda mengetahui atau menemukan penggunaan lain dari '!' yang perlu diketahui, Anda mungkin ingin memberi kami saran Anda di umpan balik. Tetap terhubung!


Linux
  1. Perintah Linux - Gambaran Umum dan Contoh

  2. Cara Menyimpan Perintah Linux Dan Menggunakannya Sesuai Permintaan

  3. Menjalankan Perintah Linux di Latar Belakang dan Latar Depan

  1. Tonton perintah dan tugas dengan perintah jam tangan Linux

  2. A sampai Z Perintah Linux

  3. 5 penggunaan perintah mv di terminal linux

  1. Perintah Linux:pekerjaan, bg, dan fg

  2. 5 perintah Linux yang tidak pernah saya gunakan

  3. Perintah gema Linux