10 kegunaan luar biasa dan misteri (!) Simbol atau pengendali dalam arahan linux

10 kegunaan luar biasa dan misteri (!) Simbol atau pengendali dalam arahan linux

The '!' simbol atau pengendali di linux boleh digunakan sebagai Penolakan logik Pengendali serta mengambil arahan dari sejarah dengan tweak atau untuk menjalankan arahan sebelum ini dengan pengubahsuaian. Semua arahan di bawah telah diperiksa secara eksplisit di shell bash. Walaupun saya belum memeriksa tetapi yang utama tidak akan berjalan di cangkang lain. Di sini kita pergi ke kegunaan yang menakjubkan dan misteri '!' simbol atau pengendali dalam arahan linux.

1. Jalankan arahan dari sejarah dengan nombor arahan.

Anda mungkin tidak menyedari hakikat bahawa anda boleh menjalankan arahan dari anda Sejarah Perintah (sudah/awal yang dilaksanakan) arahan). Untuk bermula terlebih dahulu cari nombor arahan dengan menjalankan 'Sejarah'Perintah.

$ sejarah 

Sekarang jalankan arahan dari Sejarah hanya dengan nombor di mana ia muncul, dalam output Sejarah. Katakanlah jalankan arahan yang muncul di nombor 1551 dalam output 'Sejarah'Perintah.

$ !1551 

Dan, ia menjalankan arahan (arahan atas dalam kes di atas), yang disenaraikan pada nombor 1551. Cara ini untuk mendapatkan semula perintah yang telah dilaksanakan sangat membantu dalam hal perintah -perintah yang panjang. Anda hanya perlu memanggilnya menggunakan ![Nombor di mana ia muncul dalam output perintah sejarah].

2. Jalankan arahan yang dilaksanakan sebelum ini sebagai perintah terakhir ke -2, perintah terakhir ke -7, dll.

Anda boleh menjalankan arahan yang telah anda jalankan sebelum ini dengan urutan berjalan mereka sebagai arahan larian terakhir akan diwakili sebagai -1, Kedua terakhir sebagai -2, Ketujuh terakhir -7,… .

Larian Pertama Sejarah perintah untuk mendapatkan senarai arahan yang dilaksanakan terakhir. Perlu dijalankan Sejarah perintah, supaya anda dapat memastikan bahawa tidak ada perintah seperti Perintah rm> fail dan yang lain hanya untuk memastikan anda tidak menjalankan arahan berbahaya secara tidak sengaja. Dan kemudian periksa perintah terakhir keenam, lapan arahan terakhir dan perintah terakhir kesepuluh.

$ sejarah $ !-6 $ !-8 $ !-10 
Jalankan arahan yang dilaksanakan terakhir dengan nombor
3. Lulus argumen perintah terakhir yang kita lari ke perintah baru tanpa mengimbas semula

Saya perlu menyenaraikan kandungan direktori '/rumah/$ pengguna/binari/firefox'Jadi saya menembak.

$ ls/rumah/$ pengguna/binari/firefox 

Kemudian saya menyedari bahawa saya sepatutnya melepaskan 'ls -l'Untuk melihat fail mana yang boleh dilaksanakan di sana? Oleh itu, saya harus menaip keseluruhan arahan! Tidak saya tidak perlukan. Saya hanya perlu membawa hujah terakhir kepada arahan baru ini sebagai:

$ ls -l !$ 

Di sini !$ akan membawa argumen yang diluluskan dalam arahan terakhir ke arahan baru ini.

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

Katakan saya membuat fail teks 1.txt di desktop.

$ sentuh/rumah/avi/desktop/1.txt 

dan kemudian menyalinnya ke '/rumah/avi/muat turun'Menggunakan jalan lengkap di kedua -dua belah pihak dengan cp perintah.

$ cp/home/avi/desktop/1.txt/home/avi/muat turun 

Sekarang kita telah lulus dua hujah dengan cp perintah. Pertama adalah '/rumah/avi/desktop/1.txt'dan kedua adalah'/rumah/avi/muat turun', mari kita mengendalikannya secara berbeza, hanya laksanakan echo [argumen] untuk mencetak kedua -dua hujah secara berbeza.

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

Perhatikan hujah pertama boleh dicetak sebagai "!^" dan seluruh hujah boleh dicetak dengan melaksanakan "![Name_of_command]: [number_of_argument] ".

Dalam contoh di atas perintah pertama adalah 'cp'dan hujah ke -2 diperlukan untuk mencetak. Oleh itu "!CP: 2 ", Sekiranya ada arahan yang dikatakan XYZ dijalankan dengan 5 argumen dan anda perlu mendapatkan hujah ke -4, anda boleh menggunakan "!xyz: 4 ", dan gunakannya seperti yang anda suka. Semua hujah boleh diakses oleh "!*".

Mengendalikan dua atau lebih argumen
5. Jalankan arahan terakhir berdasarkan kata kunci

Kami dapat melaksanakan perintah terakhir yang dilaksanakan berdasarkan kata kunci. Kita dapat memahaminya seperti 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 arahan yang sama (ls) Tetapi dengan suis yang berbeza dan untuk folder yang berbeza. Lebih -lebih lagi kami telah hantar ke output setiap arahan untuk '/dev/null'Seperti yang kita tidak akan berurusan dengan output perintah juga konsol tetap bersih.

Sekarang laksanakan arahan larian terakhir berdasarkan kata kunci.

$ ! ls [perintah 1] $ ! LS -L [COMMAND 2] $ ! ls -la [perintah 3] $ ! ls -la [perintah 4] 

Periksa output dan anda akan terkejut bahawa anda sedang menjalankan arahan yang telah dilaksanakan hanya dengan ls Kata kunci.

Jalankan arahan berdasarkan kata kunci
6. Kuasa !! Pengendali

Anda boleh menjalankan/mengubah arahan larian terakhir anda menggunakan (!!). Ia akan memanggil perintah larian terakhir dengan alter/tweak dalam perintah semasa. Membolehkan anda menunjukkan senario

Hari terakhir saya menjalankan skrip satu liner untuk mendapatkan IP peribadi saya jadi saya lari,

$ ip addr show | Grep Inet | grep -v 'inet6' | grep -v '127.0.0.1 '| awk 'print $ 2' | potong -f1 -d/ 

Kemudian tiba -tiba saya tahu bahawa saya perlu mengalihkan output skrip di atas ke fail ip.txt, jadi apa yang perlu saya lakukan? Sekiranya saya mengulangi keseluruhan arahan dan mengalihkan output ke fail? Baik penyelesaian yang mudah digunakan Naik kunci navigasi dan tambah '> ip.txt ' untuk mengalihkan output ke fail sebagai.

$ ip addr show | Grep Inet | grep -v 'inet6' | grep -v '127.0.0.1 '| awk 'print $ 2' | potong -f1 -d> ip.txt 

Terima kasih kepada Juruselamat Hidup Naik Kunci navigasi di sini. Sekarang pertimbangkan keadaan di bawah, kali seterusnya saya berjalan di bawah skrip satu liner.

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

Sebaik sahaja saya menjalankan skrip, Prompt Bash mengembalikan ralat dengan mesej "Bash: ifconfig: perintah tidak dijumpai", Tidak sukar bagi saya untuk meneka saya menjalankan perintah ini sebagai pengguna di mana ia harus dijalankan sebagai akar.

Jadi apa penyelesaiannya? Sukar untuk log masuk ke root dan kemudian taipkan keseluruhan arahan! Juga (Kunci Navigasi Up) dalam contoh terakhir tidak datang untuk menyelamatkan di sini. Jadi? Kita perlu menelefon "!!" tanpa petikan, yang akan memanggil arahan terakhir untuk pengguna itu.

$ su -c "!!"Root 

Di sini su adalah pengguna suis yang root, -c adalah untuk menjalankan arahan khusus sebagai pengguna dan bahagian yang paling penting !! akan digantikan dengan arahan dan arahan larian terakhir akan digantikan di sini. Yeah! Anda perlu memberikan kata laluan root.

Kuasa !! Kunci

Saya menggunakan !! kebanyakannya dalam senario berikut,

1. Semasa saya berlari apt-get perintah sebagai pengguna biasa, saya biasanya mendapat ralat yang mengatakan anda tidak mempunyai kebenaran untuk melaksanakannya.

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

Ralat Opps ... jangan bimbang melaksanakan perintah di bawah untuk berjaya ..

$ su -c !! 

Cara yang sama saya buat untuk,

$ perkhidmatan Apache2 Mula atau $ /etc /init.D/APACHE2 Mula atau $ Systemctl Mula Apache2 

Pengguna oops tidak diberi kuasa untuk membawa tugas sedemikian, jadi saya lari ..

$ su -c 'perkhidmatan apache2 start' atau $ su -c '/etc/init.D/APACHE2 Mula 'atau $ Su -c' Systemctl Mula Apache2 ' 
7. Jalankan arahan yang mempengaruhi semua fail kecuali ![NAMA FAIL]

The ! (Logik tidak) boleh digunakan untuk menjalankan arahan pada semua fail/lanjutan kecuali yang berada di belakang '!'.

A. Keluarkan semua fail dari direktori kecuali nama yang mana 2.txt.

$ rm !(2.txt) 

B. Keluarkan semua jenis fail dari folder kecuali satu pelanjutan yang 'pdf'.

$ $ rm !(*.pdf) 
8. Periksa sama ada direktori (katakan/home/avi/tecmint) wujud atau tidak? Printf jika direktori tersebut wujud atau tidak.

Di sini kita akan menggunakan '! -D ' untuk mengesahkan jika direktori wujud atau tidak diikuti oleh logik dan pengendali (&&) Untuk mencetak direktori itu tidak wujud dan logik atau pengendali (||) Untuk mencetak direktori hadir.

Logik adalah, apabila output dari [ ! -D/Home/Avi/Tecmint] adalah 0, ia akan melaksanakan apa yang terletak di luar logik Dan lain ia akan pergi ke logik atau (||) dan melaksanakan apa yang terletak di luar logik Atau.

$ [ ! -d/home/avi/tecmint] && printf '\ nno seperti/home/avi/tecmint direktori wujud \ n' || Direktori printf '\ n/home/avi/tecmint wujud \ n' 
9. Periksa sama ada direktori wujud atau tidak? Sekiranya tidak keluar dari arahan.

Sama dengan keadaan di atas, tetapi di sini jika direktori yang dikehendaki tidak wujud, ia akan keluar dari perintah.

$ [ ! -d/home/avi/tecmint] && keluar 
10. Buat direktori (katakan ujian) di direktori rumah anda jika tidak wujud.

Pelaksanaan umum dalam bahasa skrip di mana jika direktori yang dikehendaki tidak wujud, ia akan mencipta satu.

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

Itu sahaja buat masa ini. Sekiranya anda mengetahui atau melihat penggunaan lain '!' yang patut diketahui, anda mungkin ingin memberi kami cadangan anda dalam maklum balas. Terus bersambung!