10 penggunaan yang luar biasa dan misterius (!) Simbol atau operator dalam perintah Linux

10 penggunaan yang luar biasa dan misterius (!) Simbol atau operator dalam perintah Linux

Itu '!' simbol atau operator di Linux dapat digunakan sebagai Negasi logis Operator serta untuk mengambil perintah dari sejarah dengan tweak atau untuk menjalankan perintah yang sebelumnya menjalankan dengan modifikasi. Semua perintah di bawah ini telah diperiksa secara eksplisit dalam shell bash. Meskipun saya belum memeriksa tetapi yang besar tidak akan berjalan di cangkang lain. Di sini kita masuk ke penggunaan yang luar biasa dan misterius '!' simbol atau operator di perintah linux.

1. Jalankan Perintah Dari Sejarah dengan Nomor Perintah.

Anda mungkin tidak menyadari fakta bahwa Anda dapat menjalankan perintah dari Anda sejarah Perintah (sudah/perintah yang dieksekusi sebelumnya). Untuk memulai pertama -tama temukan nomor perintah dengan menjalankan 'sejarah' memerintah.

$ history 

Sekarang jalankan perintah dari sejarah hanya dengan nomor yang muncul, dalam output sejarah. Katakanlah jalankan perintah yang muncul di nomor 1551 di output 'sejarah' memerintah.

$ !1551 

Dan, ia menjalankan perintah (perintah atas dalam kasus di atas), yang terdaftar di nomor 1551. Cara ini untuk mengambil perintah yang sudah dieksekusi sangat membantu khususnya dalam kasus perintah yang panjangnya. Anda hanya perlu menyebutnya menggunakan ![Nomor di mana ia muncul di output dari perintah sejarah].

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

Anda dapat menjalankan perintah yang telah Anda jalankan sebelumnya dengan urutan berjalan mereka menjadi perintah run terakhir akan direpresentasikan sebagai -1, kedua terakhir sebagai -2, ketujuh terakhir sebagai -7,.. .

Lari pertama sejarah perintah untuk mendapatkan daftar perintah yang dieksekusi terakhir. Itu perlu untuk berlari sejarah perintah, sehingga Anda dapat yakin bahwa tidak ada perintah seperti Perintah RM> File dan orang lain hanya untuk memastikan Anda tidak menjalankan perintah berbahaya secara tidak sengaja. Dan kemudian periksa perintah terakhir keenam, delapan perintah terakhir dan kesepuluh perintah terakhir.

$ history $ !-6 $ !-8 $ !-10 
Jalankan perintah terakhir yang dieksekusi dengan angka
3. Lulus argumen perintah terakhir yang kami jalankan ke perintah baru tanpa retyping

Saya perlu mencantumkan konten direktori '/home/$ user/biner/firefox'Jadi saya memecat.

$ ls/home/$ user/biner/firefox 

Kemudian saya menyadari bahwa saya seharusnya menembak 'ls -l'Untuk melihat file mana yang dapat dieksekusi di sana? Jadi haruskah saya mengetik 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 disahkan dalam perintah terakhir ke perintah baru ini.

Lulus argumen perintah terakhir yang dieksekusi ke yang baru
4. Cara menangani dua atau lebih argumen menggunakan (!)

Katakanlah saya membuat file teks 1.txt di desktop.

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

dan kemudian salin ke '/home/avi/unduhan'Menggunakan jalur lengkap di kedua sisi dengan cp memerintah.

$ cp/home/avi/desktop/1.txt/home/avi/unduhan 

Sekarang kami telah melewati dua argumen dengan cp memerintah. Pertama adalah '/home/avi/desktop/1.txt'Dan kedua adalah'/home/avi/unduhan', mari kita tangani secara berbeda, cukup jalankan echo [argumen] untuk mencetak kedua argumen secara berbeda.

$ echo “Argumen pertama adalah: !^”$ Echo“ Argumen ke -2 adalah: !CP: 2 " 

Catatan Argumen pertama dapat dicetak sebagai “!^" dan sisa argumen dapat dicetak dengan mengeksekusi “![Name_of_command]: [number_of_argument] ".

Dalam contoh di atas perintah pertama adalah 'cp'Dan argumen ke -2 diperlukan untuk mencetak. Karena itu “!CP: 2 ", Jika ada perintah berkata 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 oleh “!*".

Menangani dua argumen atau lebih
5. Jalankan perintah terakhir berdasarkan kata kunci

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

$ ls/home>/dev/null [perintah 1] $ ls -l/home/avi/desktop>/dev/null [perintah 2] $ ls -la/home/avi/unduhan>/dev/null [perintah 3 ] $ ls -la /usr /bin> /dev /null [Perintah 4] 

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

Sekarang jalankan perintah run terakhir berdasarkan kata kunci.

$ ! ls [perintah 1] $ ! ls -l [perintah 2] $ ! ls -la [perintah 3] $ ! ls -la [Perintah 4] 

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

Jalankan perintah berdasarkan kata kunci
6. Kekuatan dari !! Operator

Anda dapat menjalankan/mengubah perintah run terakhir Anda menggunakan (!!). Itu akan memanggil perintah run terakhir dengan alter/tweak dalam perintah saat ini. Mari kita tunjukkan skenarionya

Hari terakhir saya menjalankan skrip satu-liner untuk mendapatkan IP pribadi saya jadi saya jalankan,

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

Lalu tiba -tiba saya tahu bahwa saya perlu mengarahkan ulang output dari skrip di atas ke file aku p.txt, jadi apa yang harus aku lakukan? Haruskah saya mengetik ulang seluruh perintah lagi dan mengarahkan ulang output ke file? Solusi yang mudah untuk digunakan KE ATAS kunci navigasi dan tambahkan '> ip.txt' untuk mengarahkan kembali output ke file sebagai.

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

Terima kasih untuk Juruselamat Kehidupan KE ATAS Kunci navigasi di sini. Sekarang pertimbangkan kondisi di bawah ini, lain kali saya menjalankan di bawah skrip satu-liner.

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

Segera setelah saya menjalankan skrip, prompt bash mengembalikan kesalahan dengan pesan tersebut “Bash: ifconfig: Command Not Found”, Tidak sulit bagi saya untuk menebak saya menjalankan perintah ini sebagai pengguna di mana itu harus dijalankan sebagai root.

Jadi apa solusinya? Sulit untuk login untuk root dan kemudian ketik seluruh perintah lagi! Juga (Up Navigation Key) dalam contoh terakhir tidak datang untuk menyelamatkan di sini. Jadi? Kita perlu menelepon “!!" Tanpa kutipan, yang akan memanggil perintah terakhir untuk pengguna itu.

$ su -c "!!" akar 

Di Sini su adalah pengguna sakelar yang root, -C adalah menjalankan perintah spesifik sebagai pengguna dan bagian terpenting !! akan diganti dengan perintah dan perintah run terakhir akan diganti di sini. Ya! Anda perlu memberikan kata sandi root.

Kekuatan dari !! Kunci

Saya memanfaatkan !! Sebagian besar dalam skenario berikut,

1. Saat saya berlari apt-get Perintah sebagai pengguna normal, saya biasanya mendapatkan kesalahan yang mengatakan Anda tidak memiliki izin untuk mengeksekusi.

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

Kesalahan OPPS… Jangan khawatir menjalankan perintah di bawah ini untuk membuatnya berhasil…

$ su -c !! 

Cara yang sama saya lakukan,

$ service apache2 mulai atau $ /etc /init.D/APACHE2 MULAI ATAU $ SYSTEMCTL MULAI APACHE2 

Pengguna oops tidak berwenang untuk membawa tugas seperti itu, jadi saya jalankan…

$ su -c 'layanan apache2 start' atau $ su -c '/etc/init.d/apache2 start 'atau $ su -c' systemctl start apache2 ' 
7. Jalankan perintah yang mempengaruhi semua file kecuali ![NAMA FILE]

Itu ! (Tidak logis) dapat digunakan untuk menjalankan perintah pada semua file/ekstensi kecuali yang ada di belakang '!'.

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

$ rm !(2.txt) 

B. Hapus semua jenis file dari folder kecuali yang ekstensi yang 'pdf'.

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

Di sini kami akan menggunakan '! -D' untuk memvalidasi apakah direktori ada atau tidak diikuti oleh logis dan operator (&&) untuk mencetak direktori itu tidak ada dan logis atau operator (||) untuk mencetak direktori hadir.

Logika adalah, saat output [ ! -d/home/avi/tecmint] adalah 0, itu akan mengeksekusi apa yang ada di luar logis DAN kalau tidak, itu akan masuk logis atau (||) dan melaksanakan apa yang ada di luar logis ATAU.

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

Mirip dengan kondisi di atas, tetapi di sini jika direktori yang diinginkan tidak ada, ia akan keluar dari perintah.

$ [ ! -d/home/avi/tecmint] && keluar 
10. Buat direktori (uji tes) di direktori home Anda jika tidak ada.

Implementasi umum dalam bahasa skrip 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 tahu atau menemukan penggunaan lain '!' Yang perlu diketahui, Anda mungkin ingin memberi kami saran Anda dalam umpan balik. Tetap terhubung!