Jupyter NotebookはPythonの手軽な実行環境として大変便利であり、愛用しています。Python意外の言語が追加出来る上にノートブック上でLinuxコマンド(マジックコマンド)も実行可能です。
実行例
以下の様にls
コマンドやcd
コマンドが実行出来ます。
lsコマンド
!ls
cdコマンド
%cd
pipコマンド
pipコマンドもマジックコマンドとして実行可能です。pandasをインストールする場合は以下のコマンドで実行可能です。Jupyter Notebookを使っている時に追加で必要なライブラリを追加する場合以下のコマンドを記載しておけばNotebookの共有時にも安心です。
!pip install pandas
sudoが必要なコマンドも実行
ここから本題です。管理者権限(sudo)で実行が必要なコマンドを実行してみます。ここではapt
を実行してみます。Pythonのライブラリでは時々別途OSのパッケージマネージャーでアプリケーションをインストールを求められる物1が有ります。Notebook上で実行出来ればインストール忘れを防げます。
ステップ1: そのまま実行
そのまま試しに!sudo apt update
を実行してみます。
!sudo apt update
以下の様な結果となりました。この状態ではパスワードは入力出来ません。
ステップ2: echoコマンドを使って文字列渡し
echoコマンドを使って文字列としてパスワードを渡してみます。sudoコマンドには-S
オプションを渡します。これでコマンドライン引数としてパスワードを渡せます。(実際は標準入力からパスワードを入力する方式)
!echo "passwd" | sudo -S apt udate
無事動きました。しかし、Notebook共有時に文字列を書き換える必要が有り煩雑になります。加えてこのままではパスワードが丸分かりであり、セキュリティー上好ましく有りません。パスワードが漏れてしまったりしてはパスワードの意味を成しません。。。
パスワードを外部ファイル渡しとする
パスワードをpasswd.txt
というファイルに記載し、そのファイルの中身を読み込んで渡す方式に変更します。こうすればパスワードが誤って漏洩する心配も有りません。ファイルの読み込みにはxargs
コマンドを用います。コマンドライン引数を作るコマンドです。ここでは-a
オプション(--arg-file=)を渡すことでファイルを指定しています。
!xargs -a passwd.txt | sudo apt update
無事実行出来ました。パスワードが漏れる心配が無くなった上にNotebookの共有時にパスワード部分を書き換える必要が無くなり煩雑な作業が無くなりました2。これで安心です。
Reference
- 逆引きUNIXコマンド/sudoコマンドのパスワードを自動的に入力する方法
- 【 xargs 】コマンド――コマンドラインを作成して実行する
- Jupyter Notebookでマジックコマンド一覧を確認する%lsmagic