txtファイルを使ってLinuxでパッケージを一括インストール

Linuxコマンド

自分がLinuxの最大のメリットだと思っていることの一つに,「コマンドラインで一発でアプリ管理ができる」ということだと思っています。

例えばArch系でDiscordをインストールしたいなと思ったら,「sudo pacman -S discord」でいけますよね。

せっかくコマンド操作が可能ならtxtファイルにあらかじめまとめておき,それを勝手にインストールしてくれるスクリプト組めないか,と思って調べてみたところ,結構簡単にできそうだったため,まとめてみました。

概要

Pythonをある程度使ったことがある方ならわかると思うのですが,Pythonには「requirements.txt」というファイルがプロジェクトに含まれていることがあり,pipの機能を使うことでこのファイルに書かれているライブラリを一括ダウンロードできる,という機能があります。

Web開発でよく用いられるNode.jsにも同様に,「package.json」に使用ライブラリを書いておくとnpm iだけですべて自動でインストールしてくれるという神機能があります。

これらの機能は複数人で作業するときや,複数のデバイスで同時に開発する際などに役立ちます。

でもこれって,開発だけに限った話ではないと思うんですよね。

複数台PCを持っていたとして,必ずその人がどのデバイスでも使うアプリはあるはずです(自分ならFirefox,SperTuxKart,VSCode,VLC,…)。

セットアップ時には毎回これらをインストールすると思うのですが,本当にそれ毎回覚えていますか?

sudo apt install アプリ① アプリ② アプリ③ …とつなげていけば,確かに一括ダウンロードできます。

しかし,本当に最初の時点ですべて必要パッケージ覚えていますか?という話です。

自分がまさにそうなのですが,最初に思いつく奴だけインストールし,あとで「あっ!あのアプリ入ってないじゃん!」と気付いてまたインストールするんですよね。

これって面倒ではないですか?

そこで,txtに予め必要なパッケージを記述しておき,それを一括インストールさせよう,というわけです。

手順

txtファイルの準備

まず,インストールしたいパッケージ名をまとめたtxtファイルを準備します。

今回はpackages.txtとします。

vlc
nvim
nodejs
copyq

各行に一つ一つ書いていきます。

スペース区切りでも問題ないようですが,各行一つのほうが圧倒的に見やすいと思います。

コマンド実行!

こういうことをする際はたいていUSB上にtxtファイルを用意していると思うので,そこから端末を開き,そこでコマンドを実行するのが一番簡単だと思います。

packages.txtが作業ディレクトリに存在することを確認したら,

cat packages.txt | xargs sudo apt install -y

これだけです。

ちなみに今回はこのような構成で実行しました。

こちらのコマンドでも全く同じことができます。

xargs -a packages.txt sudo apt install -y

実行後,アプリ一覧を見てみると,確かにインストールできていることがわかります。

コマンドミスった話

実は自分,恥ずかしながら最初はこのコードで動くと思っていました。

cat pacages.txt | sudo apt install -y

catでpackages.txtを参照し,その内容をaptコマンドに渡していますが,このコードでは動きません。

なぜ動かないのかというと,どうやらcatでの出力は標準入力であり,aptの引数として渡すことはできないらしいのです。

自分の中では引数と標準入力が一緒になっていた,というわけです。

この標準入力を引数として受け取るxargsコマンドと組み合わせることで,ちゃんとaptが認識してくれた,というわけです。

cat packages.txt | xargs sudo apt install -y

勉強になりました。

まとめ

packages.txtに必要パッケージを記述しておくことで,一気にパッケージをインストールすることができます。

cat packages.txt | xargs sudo apt install -y

便利なので,毎回使うパッケージがたくさんある場合は試してみてください!

コメント

タイトルとURLをコピーしました