Command course# ตำแหน่งลัด


Posted in:
gumara's picture

วันนี้กลับมาพบกับ อ.มะระ อีกครั้งในวิชา Command-line ครับ สำหรับวันนี้อาจารย์จะพาไปรู้จักตำแหน่งลัดต่างๆครับ ซึ่งจะมีประโยชน์มากๆในการใช้งานครับ

นักเรียนที่ใจร้อนอยากลงมือใช้คำสั่งแล้วใจเย็นครับ ครั้งหน้าได้แนะนำคำสั่งแรกกันแล้วแน่นอน

ตำแหน่งลัดที่จะนำมาแนะนำจะมีดังนี้ครับ
~ : จะเป็นตำแหน่งเอาไว้แทนโฟลเดอร์บ้านของเราครับ
. : จะใช้แทนตำแหน่งของโฟลเดอร์ที่เรากำลังทำงานอยู่ ณ ปัจจุบันครับ
.. : หมายถึงโฟลเดอร์ที่อยู่เหนือเราไปหนึ่งขั้นครับ
ตัวอย่างการใช้งานตำแหน่งลัดนะครับ สมมุติเราต้องการก๊อบไฟล์ไปไว้ที่โฟลเดอร์บ้าน แทนที่จะต้องบอกว่า ก๊อบไฟล์ ไว้ที่ /home/gumara เราก็สามารถบอกว่า ก๊อบไฟล์ ไว้ที่ ~ แบบนี้เลยครับ สะดวกมาก

นึกออกแค่นี้ครับ มีอย่างอื่นอีกไม๊หว่า เสนอกันที

. กับ $home

. กับ $home ต่างกันอย่างไรครับ

จะพิมพ์ว่

จะพิมพ์ว่า ~ กับ $home น่ะครับ ต่างกันอย่างไรครับ

gumara's picture

เหมือนกัน

เหมือนกันนะผมว่า หรือจริงๆมันมีอะไรแตกต่างรึป่าวใครบอกที

somjate's picture

Re: จะพิมพ์ ...

จะพิมพ์ว่า ~ กับ $home น่ะครับ ต่างกันอย่างไรครับ

ไม่ค่อยแม่นซะด้วย แต่ขอมั่วหน่อยครับ ...

ให้ผลลัพธ์เหมือนกัน แต่ถ้าใช้งานจริงผมก็เลือก ~ เพราะสั้นกว่า แต่ที่แตกต่างกันที่เห็นๆก็คือ ~ เป็น Reserve Key ส่วน home คือค่าตัวแปรในระบบ เวลาเรียกใช้ตัวแปรจะต้องมี $ นำหน้า ส่วนมากจะประยุกต์ใช้ใน script ต่างๆ


~username

ถ้าจะอ้างถึง home directory ของชาวบ้าน ก็ใช้ ~username ครับ เช่น sudo rm -r ~gumara :P

gumara's picture

แล้วมาลบบ

แล้วมาลบบ้านผมแล้วคืนนี้จะไปนอนไหนล่ะคับเนี่ย

gumara's picture

คิดว่า $home

คิดว่า $home ที่เป็นค่าตัวแปรจะสามารถเปลี่ยนค่าตัวแปรได้ แต่ ~ คงไม่สามารถเปลี่ยนได้ ล่ะมั๊งครับ

ลองนี่นะครับ

$ echo ~
$ HOME=/tmp sh
$ echo ~
$ exit
$ echo ~

$HOME

$home ไม่มีนะครับ มีแต่ $HOME

ความแตกต่างคือ $HOME เป็นตัวแปร environment ส่วน ~ เป็น shortcut ของ shell ซึ่งเป็น command interpreter

เท่าที่ผมจำได้ ~ ดูเหมือนจะมีครั้งแรกใน C shell (csh) ของ BSD Unix ก่อนที่ shell อื่น ๆ จะใช้ตามจนกลายเป็นมาตรฐานกลาย ๆ ส่วนตัวแปรระบบ $HOME นั้น มีในทุกโพรเซสของยูนิกซ์ โปรแกรมที่เป็น binary ใด ๆ ที่ไม่ใช่ shell script ก็สามารถอ่านค่ามาใช้ได้ ในขณะที่ ~ เป็น feature ของเชลล์เท่านั้น

รูป ~user ก็เช่นกัน และเป็นที่มาของรูป URL http://website.com/~user ที่ใช้กันในอินเทอร์เน็ตด้วย

somjate's picture

Re: $HOME

ตรวจสอบค่าตัวแปรด้วยคำสั่ง export จริงด้วยครับไม่มีตัวแปรชื่อ home มีแต่ตัวแปรชื่อ HOME แต่ว่าผมทดสอบด้วยคำสั่ง cd $home มันทำไมถึงโดดมาบ้านตัวเองได้ล่ะครับ แปลกดีนิ ...

ไม่ยากครั

ไม่ยากครับ สั่งแบบนี้เฉย ๆ ก็คือกลับบ้าน:

$ cd

ทีนี้

$ echo $home

$ echo "cd $home"
cd
$ cd $home
..กลับบ้าน..

ผมจะสั่งว่า "cd $pluto" ก็กลับบ้านผมเหมือนกัน ^_^

บน AIX

บน AIX ใช้ // แทน ~ ได้เช่นกัน ไม่แน่ใจ ubuntu ใช้ได้เหมือนกันมั้ย ยังไม่ได้ลอง

แนะเครื่องหมาย ` (เรียกว่า back quote) เอาไว้ครอบคำสั่งที่จะทำการประมาลผลย่อย .. งง หล่ะสิ .. ดูตัวอย่างครับ

ตัวอย่างการนับจำนวน process ชื่อ java

num=`ps -ef | grep java | wc -l`
echo Number of java process = `expr $num - 1`

ตัวอย่างข้างบนได้คำสั่งเพิ่มอีกคือ
ps ใช้แสดง process ที่ run อยู่
grep + ข้อความ ใช้คัดเอาเฉพาะบรรทัดที่มีข้อความนั้น
wc -l ใช้นับบรรทัด
expr ใช้คำนวนตัวเลข

peatbuntu's picture

มีตัวอย่า

มีตัวอย่างง่ายกว่านั้น
ถ้าคุณจะติดตั้ง headers ของเคอร์เนล
แทนที่จะสั่ง "sudo apt-get install linux-headers-2.6.20-15(หรือ -16)"
เราก็สั่ง "sudo apt-get install linux-header-`uname -r`"แทน
ถ้าเราลองสั่ง uname -r ดู จะได้รุ่นของเคอร์เนล

klinsc's picture

thx

ขอบคุณครับ ^^

Post new comment

The content of this field is kept private and will not be shown publicly.
  • Web page addresses and e-mail addresses turn into links automatically.
  • Lines and paragraphs break automatically.
  • Allowed HTML tags: <i> <center> <span> <a> <em> <strong> <cite> <code> <ul> <ol> <li> <dl> <br> <dt> <dd> <object> <embed> <hr> <img> <blockquote> <b> <u> <del> <div> <p> <table> <tr> <td> <font>

More information about formatting options