เวลาecho $LOGNAME
หรือlogname
คำสั่งที่รันตามปกติจะได้ผลลัพธ์เดียวกันดังนี้:
pandya@pandya-desktop:~$ echo $LOGNAME
pandya
pandya@pandya-desktop:~$ logname
pandya
ดังนั้นมีความแตกต่างระหว่างพวกเขา?
เวลาecho $LOGNAME
หรือlogname
คำสั่งที่รันตามปกติจะได้ผลลัพธ์เดียวกันดังนี้:
pandya@pandya-desktop:~$ echo $LOGNAME
pandya
pandya@pandya-desktop:~$ logname
pandya
ดังนั้นมีความแตกต่างระหว่างพวกเขา?
คำตอบ:
จากตัวแปรสภาพแวดล้อม ,
$LOGNAME
เหมือนกับ$USER
ที่ให้
ชื่อของผู้ใช้ที่เข้าสู่ระบบในปัจจุบัน ตัวแปรนี้ถูกตั้งค่าโดยระบบ คุณอาจไม่ควรเปลี่ยนค่าด้วยตนเอง
จาก man logname
logname - พิมพ์ชื่อเข้าสู่ระบบของผู้ใช้
มีการใช้งานแตกต่างกันตามตัวอย่างต่อไปนี้:
pandya@pandya-desktop:~$ sudo su
root@pandya-desktop:/home/pandya# echo $LOGNAME
root
root@pandya-desktop:/home/pandya# logname
pandya
root@pandya-desktop:/home/pandya# exit
exit
pandya@pandya-desktop:~$
ที่นี่คุณสามารถเห็นความแตกต่างหลังจากล็อกอินเป็นรูทในเทอร์มินัล
$LOGNAME
ให้ชื่อของผู้ใช้ที่เข้าสู่ระบบในปัจจุบันใน terminal (เช่นroot
)logname
พิมพ์ชื่อเข้าสู่ระบบของผู้ใช้ที่เข้าสู่ระบบเซสชั่น (เช่นpandya
)ชื่อบันทึกยูทิลิตี้เสียใน 16.04 ซึ่งเห็นได้ชัดว่ามีวัตถุประสงค์เพราะเป็นไปได้ที่จะแฮ็กค่าที่ส่งคืนซึ่งอาจเป็นข้อบกพร่องด้านความปลอดภัย https://bugzilla.gnome.org/show_bug.cgi?id=747046 ฉันใช้ logname ในบางสคริปต์และพบว่ามีประโยชน์เพราะมันคืนค่าเดิม (ชื่อเข้าสู่ระบบของฉัน) ไม่ว่าฉันจะเรียกมันมาจาก ระดับของฉันเองหรือจากการร้องขอ sudo ในขณะที่ตัวแปรสภาพแวดล้อม $ USER และ $ LOGNAME ทำไม่ได้ ฉันไม่กังวลเกี่ยวกับการแฮ็กข้อมูลลงในคอมพิวเตอร์ของฉันและแก้ไขค่าที่ส่งคืน อนิจจา .... ฉันพบวิธีแก้ปัญหาแล้ว ฉันสร้างไฟล์ในโฮมไดเร็กตอรี่ของฉันเช่นนั้น
echo $USER > ~/.logname
เมื่อฉันต้องการเข้าถึง logname ของฉัน (เช่นการกำหนดตัวแปร Bash g_logname) ฉันจะทำดังนี้:
declare g_logname="$(<~/.logname)";
สิ่งนี้ใช้ได้กับฉันไม่ว่าจะเป็นตัวฉันเองหรือในระดับรูตผ่าน sudo ซึ่งรักษาการมอบหมาย "~" เป็นโฮมไดเร็กตอรี่ของฉัน ฉันสามารถสร้างไฟล์. logname สำหรับโฮมไดเร็กตอรี่ของผู้ใช้แต่ละคนบนระบบ ใช่บางคนสามารถแฮ็คเข้าสู่คอมพิวเตอร์ของฉันและเปลี่ยนไฟล์เหล่านี้ แต่ฉันไม่ได้กังวลเกี่ยวกับเรื่องนั้น ฉันแค่อยากให้สคริปต์ทำงาน