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