10 ການ ນຳ ໃຊ້ (!) ສັນຍາລັກຫລືຜູ້ປະຕິບັດງານທີ່ມີຄວາມລຶກລັບໃນ Linux Commands


ສັນຍາລັກຫລືຕົວປະຕິບັດການ ! ໃນ Linux ສາມາດໃຊ້ເປັນຕົວປະຕິບັດການ Logical Negation ເຊັ່ນດຽວກັນກັບການເກັບເອົາ ຄຳ ສັ່ງຈາກປະຫວັດສາດດ້ວຍ tweaks ຫຼືການ ດຳ ເນີນການສັ່ງ ຄຳ ສັ່ງທີ່ຜ່ານມາດ້ວຍການດັດແປງ. ຄຳ ສັ່ງທັງ ໝົດ ທີ່ຢູ່ດ້ານລຸ່ມໄດ້ຖືກກວດສອບຢ່າງຈະແຈ້ງໃນ Shell bash. ເຖິງແມ່ນວ່າຂ້ອຍບໍ່ໄດ້ກວດກາແຕ່ສ່ວນໃຫຍ່ຂອງສິ່ງເຫຼົ່ານີ້ຈະບໍ່ແລ່ນຢູ່ໃນຫອຍອື່ນ. ໃນທີ່ນີ້ພວກເຮົາເຂົ້າໄປໃນການ ນຳ ໃຊ້ສັນຍາລັກຫລືຜູ້ປະຕິບັດງານທີ່ ລະຫັດ!!!

ທ່ານອາດຈະບໍ່ຮູ້ເຖິງຄວາມຈິງທີ່ວ່າທ່ານສາມາດ ດຳ ເນີນການ ຄຳ ສັ່ງຈາກ ຄຳ ສັ່ງປະຫວັດສາດຂອງທ່ານ (ຄຳ ສັ່ງທີ່ຖືກປະຕິບັດແລ້ວ/ກ່ອນ ໜ້າ ນີ້). ເພື່ອເລີ່ມຕົ້ນກ່ອນອື່ນແມ່ນຊອກຫາເລກ ຄຳ ສັ່ງໂດຍການເຮັດ ຄຳ ສັ່ງ ‘ປະຫວັດສາດ’.

$ history

ປະຈຸບັນດໍາເນີນການຄໍາສັ່ງຈາກປະຫວັດສາດພຽງແຕ່ຕາມຈໍານວນທີ່ມັນປາກົດ, ໃນຜົນຜະລິດຂອງປະຫວັດສາດ. ບອກວ່າໃຊ້ ຄຳ ສັ່ງທີ່ປາກົດຢູ່ເບີ 1551 ໃນຜົນຜະລິດຂອງ ຄຳ ສັ່ງ 'ປະຫວັດສາດ'.

$ !1551

ແລະ, ມັນໃຊ້ ຄຳ ສັ່ງ (ຄຳ ສັ່ງສູງສຸດໃນກໍລະນີຂ້າງເທິງ), ທີ່ຖືກລະບຸໄວ້ໃນເລກທີ 1551. ວິທີການດຶງເອົາ ຄຳ ສັ່ງທີ່ຖືກປະຕິບັດໄປແລ້ວນີ້ແມ່ນມີປະໂຫຍດຫຼາຍເປັນພິເສດໃນກໍລະນີ ຄຳ ສັ່ງເຫຼົ່ານັ້ນຍາວ. ທ່ານພຽງແຕ່ຕ້ອງການທີ່ຈະໂທຫາມັນໂດຍໃຊ້!

ທ່ານອາດຈະໃຊ້ ຄຳ ສັ່ງທີ່ທ່ານເຄີຍເຮັດຜ່ານມາໂດຍ ລຳ ດັບຂອງມັນທີ່ເປັນ ຄຳ ສັ່ງ run ສຸດທ້າຍຈະເປັນຕົວແທນເປັນ -1, ຄຳ ສັ່ງສຸດທ້າຍເປັນ -2, ເຈັດອັນດັບສຸດທ້າຍເປັນ -7, ….

ທຳ ອິດປະຕິບັດ ຄຳ ສັ່ງປະຫວັດສາດເພື່ອໃຫ້ໄດ້ຮັບບັນຊີ ຄຳ ສັ່ງທີ່ຖືກປະຕິບັດຄັ້ງສຸດທ້າຍ. ມັນ ຈຳ ເປັນຕ້ອງ ດຳ ເນີນການ ຄຳ ສັ່ງປະຫວັດສາດ, ເພື່ອໃຫ້ທ່ານ ໝັ້ນ ໃຈວ່າບໍ່ມີ ຄຳ ສັ່ງໃດທີ່ຄ້າຍຄື rm command> file ແລະອື່ນໆພຽງແຕ່ໃຫ້ແນ່ໃຈວ່າທ່ານບໍ່ໄດ້ ດຳ ເນີນການ ຄຳ ສັ່ງອັນຕະລາຍໃດໆໂດຍບັງເອີນ. ແລະຫຼັງຈາກນັ້ນກວດເບິ່ງ ຄຳ ສັ່ງທີ່ຫົກ, ຄຳ ສັ່ງສຸດທ້າຍແປດແລະ ຄຳ ສັ່ງສຸດທ້າຍທີສິບ.

$ history
$ !-6
$ !-8
$ !-10

ຂ້ອຍ ຈຳ ເປັນຕ້ອງບອກເນື້ອໃນຂອງໄດເລກະທໍລີ ‘/ home/$USER/Binary/firefox’ ດັ່ງນັ້ນຂ້ອຍຈຶ່ງຖືກຍິງ.

$ ls /home/$USER/Binary/firefox

ຫຼັງຈາກນັ້ນຂ້າພະເຈົ້າໄດ້ຮູ້ວ່າຂ້າພະເຈົ້າຄວນໄດ້ຍິງ 'ເບິ່ງ' ວ່າມັນສາມາດປະຕິບັດໄດ້ຢູ່ບ່ອນໃດ? ສະນັ້ນຂ້ອຍຄວນພິມ ຄຳ ສັ່ງທັງ ໝົດ ອີກຄັ້ງ! ບໍ່ຂ້ອຍບໍ່ຕ້ອງການ. ຂ້າພະເຈົ້າພຽງແຕ່ຕ້ອງການຖືເອົາການໂຕ້ຖຽງສຸດທ້າຍຕໍ່ ຄຳ ສັ່ງ ໃໝ່ ນີ້ຄື:

$ ls -l !$

ທີ່ນີ້

ໃຫ້ເວົ້າວ່າຂ້ອຍໄດ້ສ້າງເອກະສານຂໍ້ຄວາມທີ 1.txt ໃນ ໜ້າ ຈໍ Desktop.

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

ແລະຫຼັງຈາກນັ້ນຄັດລອກມັນໄປທີ່ '/ home/avi/Downloads' ໂດຍໃຊ້ເສັ້ນທາງທີ່ສົມບູນຢູ່ສອງຂ້າງດ້ວຍ ຄຳ ສັ່ງ cp.

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

ຕອນນີ້ພວກເຮົາໄດ້ຜ່ານສອງການໂຕ້ຖຽງກັບ ຄຳ ສັ່ງ cp. ອັນ ທຳ ອິດແມ່ນ ‘/ home/avi/Desktop/1.txt’ ແລະທີສອງແມ່ນ ‘/ home/avi/Downloads’, ສາມາດຈັດການກັບພວກມັນແຕກຕ່າງກັນ, ພຽງແຕ່ ດຳ ເນີນການ echo [ການໂຕ້ຖຽງ] ເພື່ອພິມທັງສອງຂໍ້ໂຕ້ຖຽງແຕກຕ່າງກັນ.

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

ໝາຍ ເຫດການໂຕ້ຖຽງທີ 1 ສາມາດພິມເປັນ “! ^” ແລະສ່ວນທີ່ເຫຼືອຂອງຂໍ້ໂຕ້ຖຽງສາມາດພິມໄດ້ໂດຍການປະຕິບັດ “! [name_of_Command]: [Number_of_argument]” .

ໃນຕົວຢ່າງຂ້າງເທິງນີ້ ຄຳ ສັ່ງ ທຳ ອິດແມ່ນ 'cp' ແລະການໂຕ້ຖຽງທີ 2 ແມ່ນ ຈຳ ເປັນຕ້ອງໄດ້ພິມ. ເພາະສະນັ້ນ "! cp: 2" , ຖ້າມີ ຄຳ ສັ່ງໃດໆທີ່ເວົ້າວ່າ xyz ດຳ ເນີນການດ້ວຍ 5 ການໂຕ້ຖຽງແລະທ່ານ ຈຳ ເປັນຕ້ອງໄດ້ຮັບການໂຕ້ຖຽງທີ 4, ທ່ານອາດຈະໃຊ້ "! xyz: 4" , ແລະໃຊ້ມັນຕາມທີ່ທ່ານຕ້ອງການ. ທຸກໆການໂຕ້ຖຽງສາມາດເຂົ້າເບິ່ງໄດ້ໂດຍ “! *” .

ພວກເຮົາສາມາດປະຕິບັດ ຄຳ ສັ່ງທີ່ຖືກປະຕິບັດຄັ້ງສຸດທ້າຍບົນພື້ນຖານຂອງ ຄຳ ສຳ ຄັນ. ພວກເຮົາສາມາດເຂົ້າໃຈມັນໄດ້ດັ່ງຕໍ່ໄປນີ້:

$ 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]

ໃນທີ່ນີ້ພວກເຮົາໄດ້ໃຊ້ ຄຳ ສັ່ງດຽວກັນ (ລິງ) ແຕ່ວ່າມີສະຫວິດຕ່າງກັນແລະ ສຳ ລັບໂຟນເດີທີ່ແຕກຕ່າງກັນ. ຍິ່ງໄປກວ່ານັ້ນພວກເຮົາໄດ້ສົ່ງຜົນຜະລິດຂອງແຕ່ລະ ຄຳ ສັ່ງໃຫ້ '/ dev/null' ຍ້ອນວ່າພວກເຮົາບໍ່ໄດ້ຮັບມືກັບຜົນຜະລິດຂອງ ຄຳ ສັ່ງກໍ່ຄື console ຍັງສະອາດຢູ່.

ຕອນນີ້ປະຕິບັດ ຄຳ ສັ່ງແລ່ນຄັ້ງສຸດທ້າຍບົນພື້ນຖານ ຄຳ ສຳ ຄັນ.

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

ກວດເບິ່ງຜົນໄດ້ຮັບແລະທ່ານຈະປະຫລາດໃຈວ່າທ່ານ ກຳ ລັງໃຊ້ ຄຳ ສັ່ງທີ່ຖືກປະຕິບັດແລ້ວໂດຍພຽງແຕ່ ຄຳ ls .

ທ່ານສາມາດ ດຳ ເນີນການ/ປ່ຽນແປງ ຄຳ ສັ່ງ run ຄັ້ງສຸດທ້າຍຂອງທ່ານໂດຍໃຊ້ (!!) . ມັນຈະເອີ້ນ ຄຳ ສັ່ງທີ່ແລ່ນຄັ້ງສຸດທ້າຍດ້ວຍການປ່ຽນແປງ/ຂື້ນໃນ ຄຳ ສັ່ງປັດຈຸບັນ. ໃຫ້ທ່ານສະແດງສະຖານະການ

ມື້ສຸດທ້າຍຂ້ອຍແລ່ນສະຄິບ ໜຶ່ງ ເສັ້ນເພື່ອເອົາ IP ສ່ວນຕົວຂອງຂ້ອຍສະນັ້ນຂ້ອຍແລ່ນ,

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

ຫຼັງຈາກນັ້ນທັນທີທັນໃດ, ຂ້ອຍຄິດວ່າຂ້ອຍຕ້ອງການປ່ຽນເສັ້ນທາງຂອງຜົນໄດ້ຮັບຂອງ script ຂ້າງເທິງນີ້ເປັນ ip.txt, ດັ່ງນັ້ນຂ້ອຍຄວນເຮັດແນວໃດ? ຂ້ອຍຄວນປັບ ຄຳ ສັ່ງທັງ ໝົດ ອີກຄັ້ງແລະປ່ຽນເສັ້ນທາງທີ່ອອກໄປຫາແຟ້ມບໍ? ວິທີແກ້ໄຂທີ່ງ່າຍກໍ່ຄືການໃຊ້ລະຫັດການ ນຳ ທາງແລະໃສ່ປຸ່ມ > ip.txt ເພື່ອຫັນທິດທາງຜົນຜະລິດໄປເປັນແຟ້ມຄື.

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

ຂໍຂອບໃຈກັບຜູ້ຊ່ວຍຊີວິດ UP ທີ່ຢູ່ທີ່ນີ້. ຕອນນີ້ພິຈາລະນາສະພາບການຂ້າງລຸ່ມນີ້, ຄັ້ງຕໍ່ໄປທີ່ຂ້ອຍແລ່ນຢູ່ລຸ່ມສະຄິບ ໜຶ່ງ ເສັ້ນ.

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

ທັນທີທີ່ຂ້ອຍແລ່ນສະຄິບ, bash prompt ໄດ້ສົ່ງຂໍ້ຜິດພາດກັບຂໍ້ຄວາມ “ bash: ifconfig: ບໍ່ພົບ ຄຳ ສັ່ງ” , ມັນບໍ່ຍາກທີ່ຈະຄາດເດົາວ່າຂ້ອຍ ດຳ ເນີນການ ຄຳ ສັ່ງນີ້ໃນຖານະຜູ້ໃຊ້ທີ່ມັນຄວນ ດໍາເນີນການເປັນຮາກ.

ສະນັ້ນທາງແກ້ໄຂແມ່ນຫຍັງ? ມັນຍາກທີ່ຈະເຂົ້າສູ່ລະບົບຮາກແລະຫຼັງຈາກນັ້ນພິມ ຄຳ ສັ່ງທັງ ໝົດ ອີກຄັ້ງ! ເຊັ່ນດຽວກັນ (UP Navigation Key) ໃນຕົວຢ່າງສຸດທ້າຍບໍ່ໄດ້ມາຊ່ວຍກູ້ຢູ່ທີ່ນີ້. ດັ່ງນັ້ນ? ພວກເຮົາ ຈຳ ເປັນຕ້ອງໂທຫາ “ !!” ໂດຍບໍ່ມີການອ້າງອີງເຊິ່ງຈະເອີ້ນ ຄຳ ສັ່ງສຸດທ້າຍ ສຳ ລັບຜູ້ໃຊ້ນັ້ນ.

$ su -c “!!” root

ທີ່ນີ້ su ແມ່ນຜູ້ໃຊ້ປ່ຽນເຊິ່ງເປັນຮາກ, -c ແມ່ນເພື່ອ ດຳ ເນີນການ ຄຳ ສັ່ງສະເພາະທີ່ເປັນຜູ້ໃຊ້ແລະສ່ວນທີ່ ສຳ ຄັນທີ່ສຸດ !! ຈະຖືກທົດແທນດ້ວຍ ຄຳ ສັ່ງແລະ ຄຳ ສັ່ງສຸດທ້າຍ ຈະຖືກແທນທີ່ນີ້. ເອີ້! ທ່ານ ຈຳ ເປັນຕ້ອງໃຫ້ລະຫັດລັບຮາກ.

ຂ້ອຍໃຊ້ລະຫັດ !! ສ່ວນຫຼາຍແມ່ນຢູ່ໃນສະຖານະການດັ່ງຕໍ່ໄປນີ້,

1. ເມື່ອຂ້ອຍໃຊ້ ຄຳ ສັ່ງ apt-get ໃນຖານະເປັນຜູ້ໃຊ້ ທຳ ມະດາຂ້ອຍມັກຈະມີຂໍ້ຜິດພາດທີ່ບອກວ່າເຈົ້າບໍ່ມີສິດໃນການປະຕິບັດ.

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

ຄວາມຜິດພາດຂອງ Opps …ບໍ່ຕ້ອງກັງວົນການປະຕິບັດຂ້າງລຸ່ມນີ້ເພື່ອໃຫ້ມັນປະສົບຜົນ ສຳ ເລັດ ..

$ su -c !!

ວິທີດຽວກັນທີ່ຂ້ອຍເຮັດ ສຳ ລັບ,

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

ຜູ້ໃຊ້ OOPS ບໍ່ໄດ້ຮັບອະນຸຍາດໃຫ້ປະຕິບັດວຽກດັ່ງກ່າວ, ດັ່ງນັ້ນຂ້ອຍຈຶ່ງແລ່ນ ..

$ su -c 'service apache2 start'
or
$ su -c '/etc/init.d/apache2 start'
or
$ su -c 'systemctl start apache2'

ລະຫັດ

A. ເອົາທຸກເອກະສານອອກຈາກໄດເລກະທໍລີຍົກເວັ້ນຊື່ ໜຶ່ງ ໃນນັ້ນແມ່ນ 2.txt.

$ rm !(2.txt)

ຂ. ເອົາທຸກປະເພດເອກະສານອອກຈາກໂຟນເດີຍົກເວັ້ນແຕ່ເອກະສານຂະຫຍາຍເຊິ່ງເປັນ 'pdf'.

$ $ rm !(*.pdf)

ນີ້ພວກເຮົາຈະໃຊ້ລະຫັດ ເພື່ອໃຫ້ຖືກຕ້ອງຖ້າໄດເລກະທໍລີມີຢູ່ຫຼືບໍ່ປະຕິບັດຕາມດ້ວຍ Logical AND Operator (&&) ເພື່ອພິມທີ່ໄດເລກະທໍລີນັ້ນບໍ່ມີແລະ Logical OR Operator (||) ເພື່ອພິມໄດເລກະທໍລີແມ່ນມີຢູ່.

ຕາມເຫດຜົນແມ່ນ, ເມື່ອຜົນຂອງ [! -d/home/avi/Tecmint] ແມ່ນ 0, ມັນຈະປະຕິບັດສິ່ງທີ່ຢູ່ ເໜືອ Logical ແລະອື່ນໆມັນຈະໄປ Logical OR (||) ແລະປະຕິບັດສິ່ງທີ່ຢູ່ ເໜືອ Logical OR.

$ [ ! -d /home/avi/Tecmint ] && printf '\nno such /home/avi/Tecmint directory exist\n' || printf '\n/home/avi/Tecmint directory exist\n'

ຄ້າຍຄືກັນກັບສະພາບຂ້າງເທິງ, ແຕ່ວ່າບ່ອນນີ້ຖ້າໄດເລກະທໍລີທີ່ຕ້ອງການບໍ່ມີມັນຈະອອກຈາກ ຄຳ ສັ່ງ.

$ [ ! -d /home/avi/Tecmint ] && exit

ການປະຕິບັດໂດຍທົ່ວໄປໃນພາສາ Scripting ບ່ອນທີ່ຖ້າໄດເລກະທໍລີທີ່ຕ້ອງການບໍ່ມີ, ມັນຈະສ້າງມັນ.

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

ດຽວນີ້ ໝົດ ແລ້ວ. ຖ້າທ່ານຮູ້ຫຼືເຂົ້າໄປໃຊ້ບໍລິການອື່ນ ! ທີ່ມີຄ່າຄວນ, ທ່ານອາດຈະຢາກໃຫ້ພວກເຮົາແນະ ນຳ ທ່ານໃນ ຄຳ ຄິດເຫັນ. ຮັກສາການເຊື່ອມຕໍ່!