2013-08-29 30 views
11

Có thể biết vị trí tệp .plist được tải vào lệnh launchctl không?Làm cách nào để biết vị trí tệp launchd.plist cụ thể?

Tên nhãn được liệt kê với "danh sách launchctl" và nội dung của nhãn có thể được xem bởi "danh sách launchctl LABEL", nhưng tôi không thể tìm thấy vị trí tệp .plist.

Tôi biết nó sẽ nằm trong/Library/LaunchAgent hoặc ~/Library/LaunchAgent hoặc một cái gì đó, nhưng tôi không muốn tìm kiếm xung quanh đường dẫn trong khi tất cả công việc được liệt kê với lệnh launchctl.

+0

Cảm ơn bạn trojanfoe, tôi không biết về trang web! –

Trả lời

4

Tên quy trình được sử dụng trong launchctl list được khai báo theo dạng plist. Trong khi plist nên ở vị trí được đề cập ở trên, họ có thể được hầu như bất cứ nơi nào.

Tôi tìm thấy plist tôi đang tìm kiếm với 'định vị. Tôi đang tìm kiếm org.postgresql.postgres locate *.plist | grep org.postgresql.postgres thu hẹp nó xuống đến 4 file

10

Vấn đề này đi lên rất nhiều và tiếc locatemdfind cả không hiển thị kết quả từ các thư mục thích hợp trên hệ thống của tôi. Tôi đặt các chức năng sau đây trong .bashrc của tôi vì vậy tôi có thể nhanh chóng tìm kiếm các thư mục mà launchctl tìm kiếm các tập tin plist.

launchctlFind() { 
    LaunchctlPATHS=(\ 
     ~/Library/LaunchAgents \ 
     /Library/LaunchAgents \ 
     /Library/LaunchDaemons \ 
     /System/Library/LaunchAgents \ 
     /System/Library/LaunchDaemons \ 
    ) 

    for curPATH in "${LaunchctlPATHS[@]}" 
    do 
     grep -r "$curPATH" -e "$1" 
    done 
    return 0; 
} 

Lưu ý rằng điều này chỉ kiểm tra trong thư mục nơi launchctl tìm kiếm tệp khi khởi động và đăng nhập. Nó có thể không tìm thấy mọi thứ bởi vì công việc có thể được người dùng tải bằng tay và/hoặc các quy trình khác.

+0

Tốt hơn là thay đổi "grep -r" thành "grep -R" để cho lệnh grep theo các liên kết tượng trưng. – wukong

1

Tính đến hệ điều hành MacOS 10.12.6 (không chắc chắn về các phiên bản trước đó) có thể gọi: launchctl dumpstate và bạn sẽ nhận được rất nhiều thông tin về tất cả các tiến trình đang chạy

Hãy tìm <LABEL> = { như dòng đầu tiên của thông tin liên quan để công việc mà

Dưới đây là một lót để có được tất cả các daemon hoạt động và đường dẫn plist của họ:

grep -B 1 -A 1 "active count = 1$" <<< "$(launchctl dumpstate)"

0

Kể từ launchctl list danh sách PID, một phương pháp là sử dụng lệnh lsof để xem tất cả các tệp đã tải của quá trình, ví dụ:

launchctl list | grep -o '^[0-9]\+' | xargs -n1 lsof -p | grep plist$ 

Một cách khác là chạy fs_usage lệnh và nạp lại file .plist, ví dụ

sudo fs_usage | grep -w launchd | grep -w plist 
0

Đây là lệnh để liệt kê tất cả nạp .plist tập tin và tập tin tương ứng của họ:

find /System/Library/Launch* /Library/Launch* ~/Library/Launch* -name '*.plist' -exec sh -c '/usr/libexec/PlistBuddy -c "Print Label" {} && echo {}' ';' | grep -wf <(launchctl list | grep -o "\S\+\..*$") -A1

hoặc phiên bản khác:

find /System/Library/Launch* /Library/Launch* ~/Library/Launch* -name '*.plist' -exec /usr/libexec/PlistBuddy -c "Print Label" {} ';' -print | grep -wf <(launchctl list | grep -o "\S\+\..*$") -A1

Giải thích:

  • find tất cả .plist tập tin trong các địa điểm sau: /System/Library/Launch*/Library/Launch*~/Library/Launch*
  • Sử dụng PlistBuddy lệnh in Label của tất cả tìm thấy .plist tập tin.
  • Sử dụng thông số -print của find để in đường dẫn đến tệp đó.
  • Tìm nạp một danh sách khác của tất cả các lệnh được tải vào launchd và sử dụng làm tệp mẫu cho grep -f.
  • Lọc cả hai danh sách và tìm các thành phần phổ biến và in nhãn cùng với đường dẫn của nó (-A1).