ฉันจะค้นหาประกาศนามแฝงปลอมได้อย่างไร


37

ฉันพยายามที่จะหาที่เฉพาะเจาะจงaliasได้รับการประกาศ ฉันได้ค้นหาสถานที่ตามปกติทั้งหมดที่ฉันรู้ว่าจะหาชื่อแทน:

  • ~ / .bashrc
  • ~ / .bash_profile
  • / etc / bashrc
  • / etc / รายละเอียด

โดยไม่มีโชค

ฉันรู้ว่ามันเป็นaliasเพราะเมื่อฉันทำwhich COMMANDฉันได้รับ:

alias COMMAND='/path/to/command'
    /path/to/command

มีวิธีการค้นหาไฟล์ที่ประกาศaliasเพียงรู้aliasชื่อหรือไม่?


3
คำถามที่เกี่ยวข้องเกี่ยวกับตัวแปรสภาพแวดล้อมแทนของนามแฝง โดยทั่วไปไม่มีวิธีที่ง่ายเนื่องจากสามารถตั้งชื่อแทนได้ทุกที่ ลองวางset -xตามคำแนะนำที่ด้านบนของคุณและดูว่ามันแคบลงสำหรับคุณ
jw013

1
คุณจะต้องใส่set -xที่ด้านบนของหรือ/etc/bash_profile /etc/bashrcทำไมไม่ทำงานเพียงbash -i -xหรือbash -l -x?
มิเคล

คำตอบ:


30

ฉันจะมองในสำหรับการกระทำผิดกฎหมาย/etc/profile.d/alias

คุณสามารถทำสิ่งต่อไปนี้เพื่อค้นหา:

grep -r '^alias COMMAND' /etc

นี้จะซ้ำผ่านไฟล์มองหาจุดเริ่มต้นสอดคล้องกับgrepalias COMMAND

หากสิ่งอื่นล้มเหลวให้วางสิ่งนี้ไว้ที่ส่วนท้ายของคุณ ~/.bashrc

unalias COMMAND

26

มีบางสิ่งที่คุณสามารถลองได้:

  1. ใช้bash -vเพื่อดูว่าบรรทัดใดที่กำลังอ่านในระหว่างการเริ่มต้นเชลล์
  2. ใช้bash -xเพื่อดูว่าคำสั่งใดถูกเรียกใช้ระหว่างการเริ่มต้นเชลล์
  3. รันด้วยไฟล์เริ่มต้นเพียงไฟล์เดียว

ทุบตี -v

-v ตัวเลือกที่จะทำให้การbashพิมพ์แต่ละบรรทัดจากแฟ้มสคริปต์ทุกอ่านเป็นมันอ่านมัน

เริ่มต้นด้วยการวิ่ง

bash -i -v >bash-i.out 2>&1

รอประมาณ 5-10 Ctrl+Cวินาทีแล้วกด

สิ่งนี้จะทำให้คุณมีไฟล์เดียวที่เรียกbash-i.outว่าเป็นเหมือนไฟล์เริ่มต้นทั้งหมดของคุณที่ผสาน (หรือตัดแบ่ง) เข้าด้วยกัน

จากนั้นใช้ในการเปิดไฟล์และค้นหานามแฝงใช้less/aliasname

ตอนนี้เปรียบเทียบว่านามแฝงปรากฏที่เกี่ยวข้องกับบรรทัดอื่น ๆ ในไฟล์ได้อย่างไร ตัวอย่างเช่นในระบบส่วนใหญ่/etc/bash.bashrcมีความคิดเห็นที่ด้านบนที่ระบุว่า/etc/bash.bashrcและ~/.bashrcมีหนึ่งด้วย

หากอยู่เหนือส่วนบนของคุณ~/.bashrcอาจเป็นไฟล์เริ่มต้น/etcที่กำหนดนามแฝงไม่เช่นนั้นจะอยู่ใน~/.bashrcไฟล์ของคุณหรือไฟล์ซึ่งรวมถึงผ่านsourceหรือ.(คำสั่ง dot)

หากไม่แสดงนามแฝงลอง

bash -l -v >bash-l.out 2>&1

ที่บอกทุบตีจะเป็นเปลือกเข้าสู่ระบบซึ่งอ่านแฟ้มเริ่มต้นบางอย่างที่แตกต่างกันเช่น/etc/profileและ~/.bash_profileแทนและ/etc/bash.bashrc~/.bashrc

ทุบตี -x

หากbash -vไม่ได้ให้คำตอบที่ชัดเจนให้ลองเรียกใช้bash -xซึ่งพิมพ์คำสั่งที่เชลล์ใช้อยู่แทนที่จะเป็นบรรทัดที่เชลล์อ่านอยู่

วิธีการคือพื้นเช่นเดียวกับข้างต้นยกเว้นการเปลี่ยนแปลงไป-v -x(คุณสามารถใช้ทั้งสองอย่างพร้อมกันหากจำเป็น)

เรียกใช้ด้วยไฟล์เริ่มต้นเพียงไฟล์เดียว

bash -i --rcfile="$HOME/.bashrc"

และดูว่าคุณมีนามแฝง

ลองเหมือนกันกับการrcfileตั้งค่า/etc/bash.bashrcหากระบบของคุณมี

จากนั้นลอง

bash -l --rcfile="$HOME/.bash_profile"

และทำเช่นเดียวกันกับทุกไฟล์ทุบตีเริ่มต้นที่มีprofileในชื่อของมันเช่นการเปลี่ยนแปลงไป$HOME/.bash_profile/etc/profile

วิธีใดที่ทำให้นามแฝงปรากฏขึ้นจะบอกไฟล์ที่คุณควรเริ่มต้นดู


2

บางทีคุณ.xinitrc? คุณควรตรวจสอบเพื่อดูว่าคุณ.bashrcหรือ.bash_profileแหล่งที่มาของไฟล์อื่น ๆ ในพวกเขา ตัวอย่างเช่นฉันเก็บนามแฝงทั้งหมดของฉันในไฟล์แยกต่างหากที่อ้างอิงโดยคำสั่งนี้:

[ -f ~/.bash_alias ] && source $HOME/.bash_alias

บางคำถามที่อาจช่วยด้วย: นี่สำหรับผู้ใช้ปกติหรือรูทหรือไม่ คำสั่งใดมัน รสชาติของ Linux คืออะไร


0

ฉันปฏิบัติตามแนวทางปฏิบัติทั่วไปของการวางคำจำกัดความของนามแฝงลงใน

~/.bash_aliases

แล้วเรียกสิ่งนั้นจาก. bashrc ด้วย

[ -f ~/.bash_aliases ] && source $HOME/.bash_aliases

ฉันเดาได้ไหมว่าคุณหมายถึง. bash_aliases ในคำสั่งที่สองของคุณแทนที่จะเป็น. bash_alias?
stagl
โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.