20201018のLinuxに関する記事は5件です。

[Linux]基本コマンドまとめ

カーソルの移動など

Ctrl + f     // 一文字forward
Ctrl + b     // 一文字back
Ctrl + a     // 行の先頭へ移動
Ctrl + e     // 行の最後へ移動
esc + f      // 一単語forward ※ escを押した後
esc + b      // 一単語back    ※ escを押した後
Ctrl + h     // 左の文字削除
Ctrl + d     // 右の文字削除
Ctrl + u     // カーソル位置から先頭行まで削除
Ctrl + k     // カーソル位置から行末まで削除
Ctrl + y     // 最後に削除した内容を挿入
Ctrl + c     // 強制終了
Ctrl + s     // 画面表示のロック(キーボードから文字の入力を受付ない)
Ctrl + q     // 画面表示のロック解除
Tab          // コマンドやパスを補完してくれる

基本コマンド

ls [option][ディレクトリ・ファイル名]      // 一覧表示
$ ls *.php                             // 拡張子が phpの一覧を表示
$ ls /z???                             // zから始まり 
$ ls -l                                // 詳細を表示する
$ ls -F                                // ファイル種別を表示する @:シンボリックリンク, *:実行可能ファイル, 記号なし:通常ファイル

mkdir [option] <作成するディレクトリ名>    // ディレクトリ作成
$ mkdir -p test/2020/10/10             // -pをつけると同時にディレクトリ作成してくれる
$ rmdir <ディレクトリ名>                 // 空のディレクトリ

cat [fileのパス]                        // ファイルの中身を表示

less [fileのパス]                       // ファイルの中身をスクロール表示  
スペースキー, f                // 1画面下へスクロール
b                                      // 1画面上へスクロール
j                                      // 1行下へスクロール
k                                      // 1行上へスクロール
q                                      // qコマンドを終了
/<文字列>                               // 下に向かって検索
?<文字列>                               // 上に向かって検索

touch [file名]                         //空のファイルを作成 
rm    [option] [file名]                //ファイルやディレクトリを削除する 
$ rm -r dirr                           //ディレクトリの中身もまとめて削除

mv [file名1][file名2]              //ファイル名を変更
mv [file名][移動先のディレクトリ名]   //ファイルを移動
※ 移動先がディレクトリかファイルで挙動が変わる

cp [コピー元][コピー先]
* 上書きしてしまう。安全にやるなら -i オプションをつける。

find <検索開始ディレクトリ><検索条件><アクション>
$ find . -name README.md -print 

ハードリンクとシンボリックリンク

ハードリンク

・一つのファイルに複数の名前をつける
・元のファイルを削除しても消えない
・全てのハードリンクがなくなったときに消える

シンボリックリンク

・リンク先のパスが書かれた特殊なファイル   // ショートカットなど
・シンボリックリンクを残したまま、ファイルの実態を消したり移動したりすると参照できなくなる

ln [option][リンク元ファイル][ファイル名]
$ ln file1 file2              // オプションなしだとハードリンクをはる
$ ln -s file1 file2
  • このエントリーをはてなブックマークに追加
  • Qiitaで続きを読む

Dockerfileの作り方(基礎)

はじめに

Dockerは多くのIT開発企業で導入されている環境構築を楽にする技術です。
DockerfileはDockerImageの設計図のようなものです。
Dockerfileを自身で作成することで構築したい環境のDocker imageを作成できます。

Dockerfile、DockerImage、コンテナの関係

Dockerfile => DockerImage => コンテナ の順に作成します。

DockerImageの作成方法
Dockerfileが存在するディレクトリで docker build .

コンテナの作成方法
docker run (DockerImage名 or ID)

Dockerfileのインストラクション

  • FROM
  • RUN
  • CMD
  • ENTRYPOINT
  • COPY
  • ADD
  • ENV
  • WORKDIR

Dockerfile作成手順

FROM

ベースとなるイメージを決定するインストラクションです。
Dockerfileの最初に記述します。
FROMの後には基本的にOSを記述します。

FROM OS(Docker imageから選ぶ)

例)FROM ubuntu:latest
例)FROM ruby:2.5

RUN

FROMで記述したOSに対応するコマンドを実行するインストラクションです。
RUN毎にLayerが作成されます。(DockerImageは層を積み重ねていくように作成されます。)

RUN OSに対応するコマンド

例)FROM ubuntu:latest
   RUN touch test
=> DockerImageにはubuntuのLayerにtouch testのLayerが追加で作成されます。
(testというファイルを作成するDockerImageを作成しています。)

例)FROM ubuntu:latest
   RUN apt-get update && apt-get install -y \
       curl\
       nginx
=> DockerImageにはubuntuのLayerにcurlとnginxという2つのパッケージをインストールするLayerが追加作成されます。
(apt-get updateはインストールするパッケージを新しいものにするために記述し、apt-get installはパッケージをインストールするために記述します。)
(-yはインストール中にyesかnoかの質問をされても、全てyesとして進むために使用し、バックスラッシュはパッケージを見やすくするための改行のために使用しています。)

DockerfileをbuildしてDockerImageを一度作成したものはキャッシュされるため、追加で下に下にとRUNを記述していくことでbuildの時間を少なくすることができます。
※ただし、Layerは少ない方が望ましいため、最終的には、例のように&&や、\を用いた記述のように、RUNの記述をまとめて、RUNを少なくするようにします。

CMD

コンテナの実行コマンドを指定するインストラクション。
Dockerfileの最後に記述します。

CMD OSに対応するコマンド

例)FROM ubuntu:latest
   RUN apt-get update && apt-get install -y \
       curl\
       nginx
   CMD ["/bin/bash"]
=> Dockerfileをbuildし、DockerImageを作成した後、docker runによりコンテナ作成・実行した際に、/bin/bashが実行されるようになります。

ENTRYPOINT

CMDに近い役割を持つインストラクションです。

CMDはDockerImageを実行(docker run)する際に、コマンドを上書きできるものです。(例:docker run lsとすると上記CMD説明時の例ではbashではなく、lsが実行される。)

ENTRYPOINTを使うと、コマンドの上書きできなくなり、CMDはENTRYPOINTのオプションを記述する形となります。

ENTRYPOINT OSに対応するコマンド

例)FROM ubuntu:latest
   RUN apt-get update && apt-get install -y \
       curl\
       nginx
   ENTRYPOINT ["ls"]
   CMD ["--help"]
=> ENTRYPOINTにlsコマンドを記述することでdocker runの際にlsコマンド以外のコマンドが実行できなくなり、CMDはオプションの--helpが指定されています。

COPY

Dockerfileの入っているディレクトリ(BuildContextと言います)の中にあるファイルをDockerImageにコピーするインストラクションです。

Copy BuildContext内のファイル名

例)FROM ubuntu:latest
   RUN mkdir /new_dir
   COPY test /new_dir
   CMD ["/bin/bash"]
=> Dockerfileをbuildした際、DockerImageに/new_dirというディレクトリを作成し、/new_dirにtestというファイルがコピーさせるLayerがutubtuのLayerに追加作成されます。
   このDockerImageからコンテナを作成した際には、コンテナ内に/new_dirというディレクトリとtestというファイルが作成されています。

ADD

COPYのコマンドと似ていて、同じくコピーができるインストラクションです。

ADDとCOPYとの違い
ADDは圧縮ファイルをコピーした際、コピーと解凍の両方を行います。
COPYは単純なコピーのみです。
圧縮ファイルをコピー・解凍する時にはADD、圧縮ファイルが関係ない単純なコピーにはCOPYを使います。

Copy BuildContext内のファイル名

例)FROM ubuntu:latest
   ADD sample.tar /
   CMD ["/bin/bash"]
=> Dockerfileをbuildした際、DockerImageにsample.tarを/(ルート直下)にコピー・解凍するLayerを作成されます。
   コンテナを作成した際に、コンテナのルート直下にsample.tarが解凍されたものが作成されています。

ENV

環境変数を設定するインストラクションです。

ENV 環境変数

例)FROM ubuntu:latest
   ENV key1 value
   CMD ["/bin/bash"]
=> コンテナ作成時にkey1=valueという環境変数が設定されるDockerImageが作成されます。

WORKDIR

インストラクションの実行ディレクトリを変更するインストラクションです。

WORKIDIR ディレクトリ

例)FROM ubuntu:latest
   RUN mkdir sample_folder
   WORKDIR /sample_folder
   RUN touch sample_file
=> sample_folderというディレクトリを作り、sample_folder内でsample_fileを作成するLayerとなります。
  (WORKDIRを使ったことで、コンテナ内に作成した/sample_folderの中でRUNの実行ができます。)

参考

Udemy

かめれおん講師 「米国AI開発者がゼロから教えるDocker講座」

https://www.udemy.com/share/103aTRAEAdd1pTTHoC/

有料ですが、初学者の私にも非常に理解しやすかったです。

最後に

本投稿が初学者の復習の一助となればと幸いです。

  • このエントリーをはてなブックマークに追加
  • Qiitaで続きを読む

LPIC Level1のためにVagrant+VirtualboxでUbuntuを仮想環境として構築した時の手順。

今更ながら

LPIC面白そうだし受けてみるか!ということでひとまず、

1週間でLPICの基礎が学べる本 第3版 徹底攻略シリーズ

を読んで、

Linux教科書 LPICレベル1 Version5.0対応

で出題範囲のインプットをしながらping-tの問題を解いている最中です。

まぁ問題を暗記して解けるようにはなりそうだけど、少し問題の構造を変えられたら解けなくなりそうだし、動かさずに覚えるのは難しそうだと感じたので動かそう!という目的で構築しました。

何かしら前例があるだろうと思って検索してみると、以下のような動画で実際に同じような環境でCentOSを動かしていたので、Ubuntuを動かす場合の環境構築をしてみました。

新入社員研修のプロが伝授!LPIC-1学習ポイント

そもそもこれらは何?

Virtualbox

Virtualboxって何?

Oracleが管理しているOSSの仮想環境を構築するためのソフトです。

使うメリットはあるの?

じゃあ仮想環境を作ると何が嬉しいの?という疑問が生まれると思いますが、一つのOSの上で複数のOSを取り扱うことができるようになる、というものが一般的でしょう。
例えば、多くの場合、本番環境と開発環境は異なります。
必要なパッケージやOSによる差異など異なる要素は様々ですが、これらを実際にローカルの開発環境で動かしたい、となった時に使うものです。

また、仮想環境で何か致命的なミスを起こしたとしても、その環境が元のOSに影響を及ぼしたりすることはありません。
これらのメリットを享受するために仮想化が使われています。

Vagrant

Vagrantって何?

VMWareやVirtualboxとかの仮想化ソフトの操作を、代行してくれるソフトです。
今回はこれを使って構築することで本来必要なOS(Ubuntuのイメージのダウンロードなど)の操作をVagrantを通して管理ができるようになります。

それは分かった。何のメリットがあるの?Virtualboxだけで良くない?

vagrantfileに基づいた仮想環境の管理がコマンドでできるようになります。

ありとあらゆる所でここのメリットは語られているのであまり深くは触れませんが、これこそがVagrantを使う大きなメリットの一つです。
チームメンバーなどと共有する時や、こういった記事形式で何か仮想環境を立てたい時に1からVMの構成を手順書などに書くのは面倒です。
それなら特定の構成を書いたファイルを取ってきて、コマンド叩いたら完成!の方が他のスピードも上がります。

あと個人的に勉強したかった

環境構築

環境

  • OSX Catalina 10.15.7
  • VBoxManage 6.0.14r133895
  • Vagrant 2.2.10
  • VirtualBox 6.1.14

VirtualBox

公式ページからパッケージをダウンロードします。

インストールします。
VirtualBoxの設定はこれで終わりです。

Vagrant

公式ページにアクセスし、Downloadをクリック。

それぞれのプラットフォームごとのバージョンがダウンロード可能になっているのでダウンロード。

ダウンロードしたパッケージをインストール。

すると無事にインストールができているはずなのでターミナルで以下のように進める。

# ディレクトリ作成と移動
$ mkdir Ubuntu && cd Ubuntu

# Vagrantにインストールされているリストの確認
# 恐らく何もないよ!とでます
$ vagrant box list

# フォルダ内にUbuntuのvagrantfileのダウンロード、及びプロビジョニング開始
$ vagrant init ubuntu/trusty64
$ vagrant up

# ubuntu/trusty64 (virtualbox, 20190514.0.0)
$ vagrant box list

# 以下のコマンドでポート情報などが出るのでここでの情報を元にログインする
$ vagrant ssh-config

# sshログインする
# user,passwordは共にvagrant
$ ssh -p 2222 vagrant@localhost

これで実はUbuntuをターミナル上で動かせます。
事実Virtualboxを見てみると以下のように仮想環境が動いています。

これで実際にコマンドを入力して楽しめます。
やったね!

では、お疲れ様でした。

  • このエントリーをはてなブックマークに追加
  • Qiitaで続きを読む

Linux備忘録[自分用]

  • このエントリーをはてなブックマークに追加
  • Qiitaで続きを読む

Linux備忘録[リンク集]

  • このエントリーをはてなブックマークに追加
  • Qiitaで続きを読む