Virtual Box使ってLinux触ってみた
初めに
Linux: OSの1つ。俺のパソコンはすでにwindowsというOSが宿っててそれ以外のOS詰め込むのはダメ(?)だからvirtualboxで仮想マシン動かして、それのOSにLinuxを採用
ubuntu: Linuxディストリビューションの1つ。他のディストリビューションとしてはRed Hat Enterprise LinuxとかCentOSとかがある。ディストリビューションにはそれ関係の(今回はLinux関係の)パッケージがまとまってるとかインストーラーが使えるとかメンテナンスを受けられるとかっていうメリットがある。
流れ
Ubuntuインストールイメージのダウンロード(https://www.ubuntulinux.jp/japanese)
ubuntu-ja-22.04-desktop-amd64.isoみたいなやつがイメージ
virtual boxインストール
virtual box起動して名前とか決めつつ、1のイメージを選択して仮想マシン稼働
タイプ=Linux、バージョン=Ubuntu(64bit)、プロセッサ数=2以上(2で動いた)、ファイルサイズ=8.6GB以上必要って言われた(今回は16GB)、skip unattended なんちゃらはチェックしなかった(すると若干楽になるのかも)
仮想マシンにUbuntuをインストール
インストール後:
Ubuntuのインストール中にアップデートをダウンロードするをチェック、ディスクを削除してUbuntuをインストールをチェック←警告あるけど、削除されるのはこの仮想マシンに割り当てられたストレージのみ、つまりもともと空のストレージだから大丈夫
Linux起動
コンピュータ起動からOSへのログインまでの流れ
BIOSまたはUEFIが起動
BIOS/UEFIとは、ハードウェアをチェックし、どれから起動するかなどの設定を読み込む
↑がブートローダを起動
ブートローダとはHDDなどのストレージに保存されているOS(カーネル)をメモリにコピーし、起動するためのモノ
例:GRUB
ブートローダから起動するカーネル(=OS)を選択
選択したカーネルがメモリにコピーされる
OSが起動する
ログイン
Linux操作
CUIへの切り替え方
Ctrl+Alt+fキー(F1~7)
今回はF1とF2がGUIのデスクトップだった。F3がCUIだった。
でも今回はそっちじゃなくてターミナル使う
Alt+Ctrl+T
電源を落とす前に
shutdownかhaltコマンドを打とう
sudo halt or sudo /sbin/shutdown now
シェルとは
カーネルを包み込むようなシェル(=殻)
ユーザーからの入力(=コマンド)を受け付け、アプリの起動、ジョブ制御、結果の出力などをする
複数のコマンドを打ちたいときにターミナルでコマンドを1つずつ打つのは面倒
→それらのコマンドをテキストファイルに書いて、それをシェルに読み込ませることで一気にコマンドを実行できる。このファイルをシェルスクリプトという。
ジョブ
Linuxでいう$、コマンドプロンプトでいう>>をプロンプトという
プロンプトが返ってきてないとコマンドは実行できない
→長い時間かかるコマンドを打つとプロンプトがなかなか返ってこない
↑これはフォアグランドジョブとしてそのコマンドを実行してるから
コマンドの末尾に「&」をつけるとバックグランドジョブとして実行される
バックグランドジョブは背面で実行されるからプロンプトがすぐ返ってくる
Ctrl + Z でフォアグランドジョブを停止できる
bg ジョブID で停止したジョブをバックグランドジョブとして再度実行できる
fg ジョブID で停止したジョブやバックグランドジョブをフォアグランドジョブとして再度実行できる
(ジョブIDとは、停止したときなどに表示される[1]など[ ]の中に書かれてる数字)
jobs で今動いてるジョブ一覧
環境変数とシェル変数
シェル変数:実行中のシェルないでのみ有効となる変数。シェル終了後は参照できない
環境変数:データ共有やプロセスの同左を変更するために利用する変数。シェル内で定義可能。
$変数名 で参照できる
シェル変数を作成してからexport で環境変数にできる(このときは$をつけない。参照じゃないから)
env で環境変数一覧
シェル組み込みコマンドと外部コマンド
シェル組み込みの方が優先して使われる
外部コマンドはどっかにインストールしてあるプログラムファイルから
外部コマンドをあえて使いたいときはインストールしてあるとこへのパスを指定する
⬆️ 例 シェル組み込みコマンド:普通に echo 外部コマンド: which echo でインストールされてる場所を確認→ /bin/echo そして /bin/echoなんちゃら で外部コマンドを使える
help echo :組み込みコマンドのほうのヘルプ
/bin/echo --help :外部コマンドの方のヘルプ
コマンド集
pwd 現在のディレクトリ名
echo 引数に指定した文字列を出力
cd 指定したディレクトリに移動
exit シェル終了
kill プロセスにシグナルを送る。-lでシグナル一覧。例: kill -9 12345 プロセスIDが12345のプロセスに9のシグナル(=sigkill)を送る。シグナルを指定しないとデフォルトのsigtermを送る。プロセスIDはps(後述)で確認できる。
ls ディレクトリの内容やファイルの情報。
-a:隠しファイルも表示。
-l:詳細情報
-t:更新時間順に並び替え
cp [コピー元] [コピー先] コピー元に指定したファイルをコピー先にコピー。コピー先がディレクトリなら、コピー元を複数選択可能。
mkdir ディレクトリ作成
rm 指定したファイルを削除。ディレクトリを削除するには-rオプションをつける。
cat 指定したファイルの内容を出力。複数指定可能。
mv [移動元] [移動先]
ps 実行されてるプロセス状況を表示。PID:ぷろせすID、TTY:プロセスに関連付けられたTTY端末、TIME:累積利用CPU時間、STAT:プロセスの状態、CMD:実行ファイル名
-a 全てのプロセス表示
-x 端末を利用していない全てのプロセス
-u プロセスのユーザー情報
-f プロセスの親子関係
which コマンドのパス(=場所)を確認できる。実行したいコマンドがインストールされていて利用できる場所にあるかを確認できる。
man マニュアルページを表示
リダイレクト
入力方法と出力先を変えることをリダイレクトという
デフォルトは入力がキーボード、出力は画面
入力をファイルにリダイレクトしたり、出力先をこれまたファイルにリダイレクトできる
入力リダイレクト
< をつける
例
rev < input.txt でinput.txtに書かれてるテキストがrevの入力になる
(rev 入力された文字列を逆順にする)
出力リダイレクト
> をつける
例
echo "hello world" > output.txt で画面に”hello world”とでるのではなく、output.txtに記述される
⚠️ > だとリダイレクト先のファイルの元の内容を全部けして、出力する リダイレクト先にもともと書いてあるモノを残しながら追記するには、 >> をつける
組み合わせ
rev < input.txt > output.txt で両方ともリダイレクトすることもできる
パイプ
| ←これのこと
コマンド1 | コマンド2 とするとコマンド1の出力がコマンド2の入力となる
例えば、 ls | grep bash とやるとファイル一覧( ls)からbashの文字列がある行のみを表示( grep)
パッケージ
アプリのソースコードの他にいろいろな便利なファイルがまとまったもの。
パッケージはリポジトリで保管されており、リポジトリはインターネット上にあったり、Linuxの中のディレクトリにあったりする。
パッケージをインストールするときは、まずそのリポジトリからパッケージリストを取得する
パッケージリストにはそのリポジトリに保管されてるパッケージの情報が載ってる
このリストを元にパッケージをインストールする
UbuntuではDEBパッケージというパッケージフォーマットをつかう
ちなみにRed Hat系のディストリビューションではrpmパッケージを使う
sudo apt update でパッケージリストを更新して取得する
sudo apt install パッケージ名 でインストール
sudo apt upgrade でアップデート。修正はいったときに。先に sudo apt update でリスト更新
sudo apt remove パッケージ名 でアンインストール。設定ファイル以外削除。
💡 aptコマンドを使うとパッケージの依存関係に基づいて勝手にうまいことやってくれるらしい
Vim
テキストファイルを編集するためなどに使われるエディタ
vi で起動できる
vi ファイル名 でファイルを開きながら起動できる
モード
コマンドモード:起動時のモード。他のモードへの移行やカーソル移動、文字削除など行う。
インサートモード:文字を入力するモード。コマンドモードから I をおすとこのモードに。 Esc でコマンドモードに戻る
exモード:exコマンドを利用するモード。ファイルを開いたり、保存、Vim終了時に使う。コマンドモードで : をおすとこのモードに。Esc でコマンドモードに戻る
コマンドモードとexモードはいろんな操作をできるからコマンド調べよう
シェルスクリプト
バッチ処理:複数の処理を1つにまとめて処理すること
複数のコマンドをまとめた処理を**シェルスクリプト(~.sh)**でできる
スクリプトを書くとき、始めにやるのがシェバンを書くこと
シェバン:スクリプトをどのインタプリタで実行するかを指定する行。 #! で開始、その後に利用するインタプリタのパス。
#!/bin/sh
ls -l test.sh でアクセス権限を見てみると、x(実行権限)がないので、 chmod u+x test.sh でユーザーに実行権限付与。
./test.sh でスクリプト実行。
この記事が気に入ったらサポートをしてみませんか?