私は私がインストールしているすべてのプログラムを追跡したいので、コマンドにpacman -S
(-Sの後の重要なスペース)が含まれるたびにbashがコマンド文字列をファイルに追加したいと思います。私は現在関数を使用していますが、履歴に行き、関数と引用符で行を囲む必要があるので面倒です。履歴を確認できますが、一般的な解決策が役に立ちます。
1段階のインストールとログでこれを自動化する方法はありますか?
答え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再生を通じて全体のコマンド履歴を記録するために使用されます。これはあなたが望むことをすることができます。