나는 내가 설치하고 있는 모든 프로그램을 추적하고 싶기 때문에 명령에 pacman -S
(-S 뒤의 중요한 공백)이 포함될 때마다 bash가 명령 문자열을 파일에 추가하기를 원합니다. 현재 함수를 사용하고 있는데 히스토리에 가서 함수와 따옴표로 줄을 묶어야 하기 때문에 귀찮습니다. 기록을 확인할 수 있지만 일반적인 솔루션이 유용할 것입니다.
한 단계의 설치 및 로그로 이를 자동화할 수 있는 방법이 있습니까?
답변1
나는 당신이 달성하려는 것이 불가능하지는 않더라도 매우 어렵다고 생각합니다. 원하는 것을 수행하는 래퍼 함수를 만들고 실제 명령 대신 래퍼를 호출하는 별칭을 만들더라도 모두 오류가 발생합니다. 일반적 sudo pacman -S
으로 컨텍스트를 전환하여 모든 기능과 별칭을 파괴하는 sudo를 실행합니다 .
그러나 모든 것이 손실되는 것은 아닙니다. 명시적 설치를 사용하여 설치된 모든 패키지를 나열할 수 있으므로 pacman -Qe
언제든지 시스템을 다시 설치하거나 환경을 다른 시스템에 복사하려는 경우 목록을 파일로 가져오고 파일을 다음으로 변경할 수 있습니다. 대상 컴퓨터에서 pacman을 실행하여 모든 패키지를 설치합니다.
문서 제작:
pacman -Qe | cut -d ' ' -f 1 | tr "\n" " " >the-file.txt
pacman -Qe
: 명시적으로 설치된 패키지를 모두 나열합니다.cut -d ' ' -f 1
: 패키지 버전을 제거하고 이름만 유지하는 것입니다.tr "\n" " "
: 개행 문자를 공백으로 변경하는 것입니다.>the-file.txt
: 출력을 파일로 리디렉션하고 필요에 따라 파일 이름과 경로를 변경할 수 있습니다.
공백으로 구분된 목록이 the-file.txt로 출력된 후 파일을 대상 시스템으로 전송하고 다음을 실행합니다.
sudo pacman -Sy - <the-file.txt
보라, 팩맨은 목록에 있는 모든 패키지를 설치하고 있으며 동일한 결과를 얻게 될 것이다.
--needed
최신 패키지를 다시 설치하지 않도록 pacman에 매개변수를 추가 할 수도 있습니다 pacman -S --needed ...
.
새 시스템을 원격으로 작동하는 경우 파일 전송을 건너뛰고 결과를 ssh로 파이프하면 원격 시스템으로 계속 진행됩니다.
pacman -Qe | cut -d ' ' -f 1 | tr "\n" " " | ssh -t user@host "sudo pacman -S --needed -"
- SSH를 사용하여 의사 터미널을 할당하십시오
-t
. 그렇지 않으면 sudo가 실패합니다.
행운을 빌어요.
답변2
다음을 사용하는 경우 bash
:
trap `echo $BASH_COMMAND | fgrep "pacman - S" >> /home/logfile
.bash_profile
또한 모든 대화형 셸에서 실행될 수 있도록 귀하 또는 유사한 환경에 존재하기를 원합니다 .
물론 이는 입력한 내용만 캡처하며 bash
백그라운드에서 실행되는 프런트엔드와 같은 다른 방식으로 실행되는 내용은 캡처하지 않습니다.pacman
이는 실행하는 다른 모든 명령에 대해 성능에 영향을 미치므로 fgrep
질문에 대한 답변이기는 하지만 반드시 패키지 추적 목표를 달성하는 최선의 방법은 아닙니다.
또한보십시오:https://superuser.com/q/175799
사용하고 싶다면 zsh
매뉴얼에서 해당 preexec
기능을 찾아보세요 zsh
.
답변3
구경하다sudosh2재생을 통해 전체 명령 내역을 기록하는 데 사용됩니다. 이것은 당신이 원하는 것을 할 수 있습니다.