Làm thế nào tôi có thể tìm thấy một tuyên bố bí danh giả mạo?


37

Tôi đang cố gắng tìm nơi cụ thể aliasđã được tuyên bố. Tôi đã tìm kiếm tất cả những nơi thông thường mà tôi biết để tìm bí danh:

  • ~ / .bashrc
  • ~ / .bash_profile
  • / etc / bashrc
  • / etc / hồ sơ

Không có may mắn.

Tôi biết đó là aliasvì khi tôi làm which COMMAND, tôi nhận được:

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

Có cách nào để tìm những gì tập tin tuyên bố aliaschỉ biết aliastên?


3
Một câu hỏi liên quan về các biến môi trường thay vì bí danh. Về cơ bản, không có cách nào dễ dàng vì bí danh có thể được đặt ở bất cứ đâu. Hãy thử đặt set -xnhư đề xuất ở đầu của bạn và xem nếu điều đó thu hẹp nó cho bạn.
jw013

1
Bạn sẽ phải đặt set -xở đầu /etc/bash_profilehoặc /etc/bashrc. Tại sao không chỉ chạy bash -i -xhay bash -l -x?
Mikel

Câu trả lời:


30

Tôi sẽ xem xét /etc/profile.d/cho các vi phạm alias.

Bạn cũng có thể làm như sau để tìm thấy nó:

grep -r '^alias COMMAND' /etc

Điều này sẽ đệ quy grepthông qua các tập tin tìm kiếm một dòng bắt đầu bằng alias COMMAND.

Nếu vẫn thất bại, hãy đặt nó ở cuối của bạn ~/.bashrc

unalias COMMAND

26

Có một vài điều bạn có thể thử:

  1. sử dụng bash -vđể xem những dòng nào đang được đọc trong quá trình khởi động shell
  2. sử dụng bash -xđể xem những lệnh nào đang được chạy trong quá trình khởi động shell
  3. chỉ chạy với một tập tin khởi động

bash -v

Các -v tùy chọn làm cho bashin mỗi dòng từ mỗi tập tin kịch bản nó đọc như nó đọc nó.

Bắt đầu bằng cách chạy

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

Đợi 5-10 giây, sau đó nhấn Ctrl+C.

Điều này sẽ cung cấp cho bạn một tệp duy nhất được gọi bash-i.outlà giống như tất cả các tệp khởi động của bạn được hợp nhất (hoặc nối) với nhau.

Sau đó sử dụng lessđể mở tệp và tìm kiếm bí danh bằng cách sử dụng /aliasname.

Bây giờ, so sánh nơi bí danh xuất hiện liên quan đến các dòng khác trong tệp. Ví dụ, trên hầu hết các hệ thống, /etc/bash.bashrccó một nhận xét ở đầu nói /etc/bash.bashrc~/.bashrccũng có một nhận xét .

Nếu nó ở trên đỉnh của bạn ~/.bashrc, thì đó có thể là một tệp khởi động trong /etcđó xác định bí danh, nếu không thì nó nằm trong ~/.bashrctệp của bạn hoặc bao gồm thông qua sourcehoặc .(lệnh chấm).

Nếu điều đó không hiển thị bí danh, hãy thử

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

Mà nói với bash là một vỏ đăng nhập, mà đọc một số file khởi động khác nhau, ví dụ /etc/profile~/.bash_profilethay /etc/bash.bashrc~/.bashrc.

bash -x

Nếu bash -vkhông cung cấp cho bạn một câu trả lời chắc chắn, hãy thử chạy bash -x, trong đó in các lệnh mà shell đang chạy, thay vì các dòng mà shell của bạn đang đọc.

Phương pháp về cơ bản giống như trên trừ thay đổi -vthành -x. (Bạn có thể sử dụng cả hai cùng nhau nếu cần thiết.)

Chạy chỉ với một tệp khởi động

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

và xem nếu bạn có bí danh.

Hãy thử tương tự với rcfilethiết lập /etc/bash.bashrcnếu hệ thống của bạn có nó.

Vậy hãy thử đi

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

và làm tương tự với mọi tệp khởi động bash có profiletên của nó, ví dụ: thay đổi $HOME/.bash_profilethành /etc/profile.

Bất cứ cách nào làm cho bí danh xuất hiện cho bạn biết tệp bạn nên bắt đầu xem.


2

Có lẽ của bạn .xinitrc? Bạn cũng nên kiểm tra xem liệu bạn .bashrchoặc .bash_profilenguồn bất kỳ tập tin nào khác trong đó. Ví dụ: tôi giữ tất cả các bí danh của mình trong một tệp riêng được tham chiếu bởi lệnh này:

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

Một số câu hỏi cũng có thể giúp: Đây là cho người dùng thường xuyên hoặc root? Đó là lệnh nào? Linux có hương vị gì?


0

Tôi theo cách làm rất phổ biến là đưa các định nghĩa bí danh của mình vào

~/.bash_aliases

và sau đó gọi nó từ .bashrc với

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

tôi có thể đoán rằng bạn có nghĩa là .bash_aliases trong lệnh thứ hai của bạn thay vì .bash_alias không?
stagl
Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.