ฉันเพิ่งเรียนรู้ว่า Linux มีsudo !!
คำสั่งที่ใช้sudo
กับคำสั่งที่ป้อนล่าสุดอย่างแท้จริง ฉันไม่เคยได้ยินเรื่องนี้เลย
นั่นคือการควบคุมร่วมกันหรือไม่? ฉันจะหาเอกสารเกี่ยวกับมันได้ที่ไหน
ฉันเพิ่งเรียนรู้ว่า Linux มีsudo !!
คำสั่งที่ใช้sudo
กับคำสั่งที่ป้อนล่าสุดอย่างแท้จริง ฉันไม่เคยได้ยินเรื่องนี้เลย
นั่นคือการควบคุมร่วมกันหรือไม่? ฉันจะหาเอกสารเกี่ยวกับมันได้ที่ไหน
คำตอบ:
นี่เป็นเพียงช็อตคัทบีช มันไม่ได้sudo!!
เป็นอย่างนั้น มันคือsudo !!
(จดบันทึกช่องว่าง)
!!
ในทุบตีเป็นพื้นการขยายตัวของคำสั่งก่อนหน้า
ดูที่ส่วน "การขยายประวัติ" ของหน้าคนทุบตี:
http://www.gnu.org/software/bash/manual/bashref.html#Event-Designators
เป็นจริงsudo !!
ซึ่งประกอบด้วยคำสั่งsudo
ด้วยซึ่งคุณอาจจะคุ้นเคยและdesignator เหตุการณ์ , !!
ซึ่งหมายถึงคำสั่งสุดท้ายที่ป้อน คุณสามารถหาข้อมูลเพิ่มเติมได้ในbash
หน้า man ภายใต้Event Designators
หัวข้อ
Event Designators
An event designator is a reference to a command line entry in the his‐
tory list. Unless the reference is absolute, events are relative to
the current position in the history list.
! Start a history substitution, except when followed by a blank,
newline, carriage return, = or ( (when the extglob shell option
is enabled using the shopt builtin).
!n Refer to command line n.
!-n Refer to the current command minus n.
!! Refer to the previous command. This is a synonym for `!-1'.
!string
Refer to the most recent command preceding the current position
in the history list starting with string.
!?string[?]
Refer to the most recent command preceding the current postition
in the history list containing string. The trailing ? may be
omitted if string is followed immediately by a newline.
^string1^string2^
Quick substitution. Repeat the previous command, replacing
string1 with string2. Equivalent to ``!!:s/string1/string2/''
(see Modifiers below).
!# The entire command line typed so far.
การแยกฟังก์ชั่นนี้เป็นหนึ่งในหลักการการออกแบบที่สวยงามที่สุดที่ทำให้ Linux / Unix มีประสิทธิภาพมากกว่าตัวเลือกอื่น ๆ โดยที่แต่ละโปรแกรมเป็นเกาะที่แยกออกจากการประชุมและความสามารถอิสระ
"ทำให้แต่ละโปรแกรมทำสิ่งหนึ่งและทำได้ดี"
แทนที่จะใช้ !! ภายใน sudo (หรือคำสั่งอื่น ๆ ) ซึ่งสามารถได้รับประโยชน์จากการทำซ้ำคำสั่งก่อนหน้า - มันถูกนำมาใช้ครั้งเดียว (ในเชลล์) และคำสั่งทั้งหมดจะได้ประโยชน์จากมัน ดังนั้นคุณสามารถทำได้:
$ echo !! # will echo the last command
$ time !! # will repeat and time the last command
$ strace !! # will repeat the last program while system-call tracing it
และอื่น ๆ
แต่มันไม่จบที่นี่ เปลือกทำอะไรได้มากกว่าการขยายประวัติศาสตร์ผ่านทาง! นักออกแบบเหตุการณ์ ก่อนที่จะดำเนินการคำสั่งของคุณมันจะขยายตัวตัวแปร, การขยายตัวตัวแทนชื่อไฟล์ (globbing), การทดแทนคำสั่ง, การเปลี่ยนเส้นทางไฟล์ / IO และอื่น ๆ อีกมากมาย ซึ่งสามารถยกระดับและใช้ในคำสั่งใด ๆ ที่ถูกเรียกใช้จากเชลล์
ข้อได้เปรียบที่สำคัญอีกอย่างหนึ่งคือถ้าคุณใช้เวลาในการเรียนรู้เชลล์ของคุณ ('man bash' ในกรณีนี้) คุณจำเป็นต้องเรียนรู้มันครั้งเดียวและคุณสามารถใช้ความสามารถอันทรงพลังเหล่านี้ได้ทุกที่ทุกเวลา เป็นการง่ายกว่าที่จะเรียนรู้หลักการและข้อตกลงที่ทรงพลังหนึ่งชุดแทนที่จะเรียนรู้วิธีจัดการบรรทัดคำสั่งในแต่ละโปรแกรมหรือยูทิลิตี้