20210509のLinuxに関する記事は10件です。

LPICレベル1合格体験記

まえがき LPICレベル1に合格したので、自分がやった勉強や、おすすめの本を紹介させていただきます。 目次 自己紹介 使用した教材 受験結果 おわりに 自己紹介 情報系の学部を卒業し、現在M1。 研究室のPCがLinuxだけど、使うLinuxコマンドはcdコマンドぐらい。 mv,rm,lsなどの基本的なコマンドは知っているが、使ったことはない。 使用した教材 使用した教材は、 ①あずき本 Linux教科書 LPICレベル1 Version5.0対応 ②スピマス Linux教科書 LPIC レベル1 スピードマスター問題集 Version5.0対応 ③LPICレベル1 Version5.0対応 問題集 です。 勉強のやり方としては、 1. スピマスの問題と③の一問一答を一通りやって、ある程度覚える 2. スピマスの模試とあずき本の模試を解いて、あずき本の章末問題(とても少ない)も一応確認 3. 試験日まで苦手な問題を中心に復習 という感じでやりました。 ③の本には一問一答と模擬試験がありますが、スピマスとあずき本の模擬試験で十分そうだったので、一問一答の箇所しかやっていません。 101試験の勉強の最初の方は、ping-tというよく紹介されている有名なサイトで問題を解いて勉強していましたが、いちいちブラウザを開くのが面倒なので使うのをやめました。 ping-tのレベルが6/40あたりになる程度しかやっていません。 ③の本は紹介されているのを見たことがないですが、kindleで安かった(750円)ので購入してみたところ、あずき本にもスピマスにもない問題が沢山あり、とても参考になりました。 kindleで読みやすいように問題の次のページにすぐ解答が書かれている点も良く、オススメです。 本番では、スピマスで見たことのある問題が多数出題されたように思います。 ③でしか見たことない問題もいくつかありました。 受験結果 101試験は770/800 102試験は710/800 という結果でした。 101試験は1ヶ月 102試験は2週間 で合格しました。 多くの方が使っているping-tをほぼ使わなかった点が不安でしたが、余裕を持って合格することができました。 おわりに 初投稿で読みづらい点が多いと思います。すいません?‍♂️ 次はAWS-SAAを受けようと思っているので、受かったらまた合格体験記を書こうと思います。 読んでいただきありがとうございました。
  • このエントリーをはてなブックマークに追加
  • Qiitaで続きを読む

【動画あり】whonixで仮想マシンを匿名化しよう

Whonixとかいう最強の匿名化OS ※詳しいことは動画で説明しています。 1.whonixダウンロード 2.whonixをvirtualboxにいれる ファイル→「ファイル仮想アプライアンスインストール」 3.whonix-gateway設定 初期アカウント user : changeme sudo apt-get-update-plus dist-upgrade パッケージを最新 sudo apt-get install -y im-config ibus-mozc fonts-ipafont fonts-vlgothic ※im-configは入力メソッド設定 sudo apt-get install -y kde-l10n-ja mozc-utils-gui mozc-server ibus-mozc uim-mozc ※kde-l10n-jaは入力を日本語化 4.whonixのtorrcの設定 nano /etc/tor/torrc ※細かい過去動画を参照してください 5.kalilinuxとWhonixを連携 ネットワークを【内部ネットワーク】に変更 名前はWhonix IPアドレス『10.152.152.50』 サブネットネットマスク『255.255.192.0』 デフォルトゲートウェイ『10.152.152.10』 DNSサーバー『10.152.152.10』 https:// check.torproject.org/
  • このエントリーをはてなブックマークに追加
  • Qiitaで続きを読む

MySQLのDB確認・作成コマンド【一覧】

mysqlに関するコマンドを毎度のこと調べてたので、『mysqlならここからコピペや!!』って感じで、自分用に見やすくまとめてみました。 要するに“コピペ用”です? MySQL接続コマンド ? MySQLのサービスに入る mysql -u root -p ? 入れなかった場合 //mysqlの起動 sudo service mysqld start //MySQLの再起動 sudo service mysqld restart //MySQLの確認 sudo service mysqld status //MySQLの停止 sudo service mysqld stop MySQLデータベースの作成 ・ 削除 ? データベースの作成と削除 //データベースの作成 create database データベース名; //データベースの削除 drop database データベース名; ? その他の作成と削除 //テーブルの作成 create table テーブル名(カラム名 データ型, カラム名 データ型); //テーブルの削除 drop from テーブル名; //データの削除 delete from テーブル名; (注意) ハイフン( - )が入るものは作れない。 アンダーバー( _ )ならOK。 MySQLデータベース確認 ? データベース名一覧表示(テーブルも同様) show databases; ? 現在のデータベース表示 select database(); ? データベース内のテーブル一覧表示 show tables from データベース名; ? データベース内のカラム一覧表示 show columns from テーブル名 from データベース名; MySQL格納データ確認 ? データベースに接続する use データベース名; ? 格納データを表示する select * from テーブル名; 自分用にまとめたものですが、何かの役に立てば幸いです!?
  • このエントリーをはてなブックマークに追加
  • Qiitaで続きを読む

Linuxの基本コマンド

linuxのコマンドを学習したのでまとめます。 <lsコマンド>   ファイルやディレクトリの参照。   →ls [オプション][ファイル]  [オプション]   -a 隠しファイルも含めて出力。   -l 長形式で出力。   -t 最終更新時間によってソートをして出力。   -r 逆順のソートをして出力。  [ファイル]   ファイルやディレクトリを指定した場合、指定したデイレクトリ内にあるファイルやディレクトリを表示する。   ・ワイルドカードを使った絞り込み    * 任意の文字列を示す。(何文字入ってもok)    ? 一個につき一文字を示す。(文字数がわかっている場合に使用する) <cpコマンド>   ファイルのコピー   →cp [オプション][コピー元ファイル][コピー先ファイル]   例) cp a-file b-file aファイルをbファイルへコピーする。  [オプション]   -i 処理の確認。(上書きの確認)   -r ディレクトリのコピー。(ディレクトリ内にある全てのディレクトリやファイルもコピーされる)   -p コピー元ファイルの情報を保存。(所有者や属性、更新日時など)   ・コピー先ファイルが存在しないファイルの場合は新たにファイルが作成される。コピー先ファイルが既に存在する場合は上書きされる。 <mvコマンド>   ファイルの移動   →mv [オプション][移動元ファイル][移動先ファイル]   例) mv a-file b-file aファイルをbファイルへ移動する。  [オプション]   -i 実行前に確認。   -f 確認なしに強制実行。   ・移動先のファイルがない場合は移動元のファイル名が変更される。(ディレクトリの場合も同様) <rmコマンド>   ファイルの削除   →rm [オプション][ファイル名]   例)rm a-file aファイルを削除  [オプション]   -i 実行前に確認。   -f 確認なしに強制実行。   -r ディレクトリの削除。(ディレクトリを削除するとディレクトリ内にあるディレクトリやファイルも削除される)
  • このエントリーをはてなブックマークに追加
  • Qiitaで続きを読む

cloudready を linux で準備

linuxで  unzip cloudready-free-89.3.3-64bit.zip それから dd if=./cloudready-free-89.3.3-64bit.bin of=/dev/sdb bs=16k それから これを USBポートにつけるだけで起動しますね インスタントラーメンのように手軽い
  • このエントリーをはてなブックマークに追加
  • Qiitaで続きを読む

Xubuntu21.04にJuliaをインストールしてHelloWorldを出力する + Virtual Box で Julia が 動作しなかった話

初めに 「低スペックノートPCに Xubuntu21.04 を minimal install して fish を入れたお話」で作成したLinux環境に、Juliaをインストールし、HelloWorldを出力するまでの手順を書いた記事です。 上記リンクの記事同様、Virtual Box を利用して画面をキャプチャしています。 お使いのPCによっては VirtualBox 内で Julia が 動作しませんので ご注意ください! (本物の低スぺノートPCだと動作しました) そのあたりの話は本記事の「対話型実行形式(REPL)で Hello World (ここから)」の折り畳みに記載しています。 OSとJuliaのバージョンについて OS : Xubuntu21.04 Julia : 1.6.1 OSにはXubuntuを使用していますがUbuntu系統なら手順は基本的に同じです。 Juliaとは マサチューセッツ工科大学で開発されたプログラミング言語 科学計算分野で注目されている 高速で動作する われわれは、自由度が高いライセンスが適用された、オープンソースの言語を求めている。C言語の速度と、Rubyのダイナミズムを求めている。同図像性を持ち、Lispのように真のマクロを使用できるが、Matlabのような分かりやすくなじみ深い数学的記法を利用できる言語を求めている Why We Created Julia では上記のように(原文:英語)で書かれています。 本編 Juliaのインストール インストール手順は以下の通りです。 wgetによる実行ファイルの取得 tarコマンドによる実行ファイルの解凍, juliaのインストール インストールしたjuliaに対してリンクを作る wgetで実行ファイルを取得する 「Download Julia」から「Generic Linux on x86」の「64-bit」のURLを取得する。 (お使いの環境によってARM版や32bit版にしてください。) 2021年5月 現在のURLは次のものになります。(これをコピーしていただいて構いません) https://julialang-s3.julialang.org/bin/linux/x64/1.6/julia-1.6.1-linux-x86_64.tar.gz ターミナルを起動し次のコマンドを入力します。 $ wget https://julialang-s3.julialang.org/bin/linux/x64/1.6/julia-1.6.1-linux-x86_64.tar.gz 「julia-1.6.1-linux-x86_64.tar.gz」が取得できました。 tarコマンドによる実行ファイルの解凍, juliaのインストール 次のtarコマンドで解凍し、juliaをインストールします。 $ tar -xvf julia-1.6.1-linux-x86_64.tar.gz インストールしたjuliaに対してリンクを作る 次のlnコマンドでリンクを作ります。 $ sudo ln -s /home/user/julia-1.6.1/bin/julia /usr/local/bin/julia パス内の user は環境によって異なります。 次のコマンドでjuliaのが動作することを確認しておきます。 $ julia --version これでjuliaのインストールに関しては終了です。 Hello World を出力する 次の二つの方法で出力を確認します。 対話型実行形式(REPL) ファイル実行形式 対話型実行形式(REPL)で Hello World ターミナルから julia で REPL に入れます。 VirtualBox内ではこんな感じに... 次の画像は Virtual Box 内で遭遇したエラーになります。 原文 ERROR: Your CPU does not support the CX16 instruction, which is required by this version Julia! This is often due to running inside of a virtualized environment, Please read https://docs.julialang.org/en/v1/devdocs/sysimg/ for more. 日本語訳 エラー:CPUは、このバージョンのJuliaで必要なCX16命令をサポートしていません。これは多くの場合、仮想環境内で実行されていることが原因です。詳細については https://docs.julialang.org/en/v1/devdocs/sysimg/ をお読みください。 バージョンを落としたりインストーラを変えたりしてみましたがダメでした。 私にはこれの解決方法がいまいちわからなかったため、実行時の画面に関してはWindowsOSに入れたJuliaでキャプチャします。 println()で文字列を出力します。 println("Hello world !") ファイル実行形式で Hello World 一度 REPL を抜けて juliaファイル を作りに行きます。 ctrl+D もしくは exit() で抜けられます。 方法は何でもいいので hello.jl を作成します。内容は先ほどのと同じです。 hello.jl println("Hello world !") bash に juliaコマンド と juliaファイル を投げつけます。 $ julia hello.jl はい、無事(?)に REPLでもファイルでも Hello World を出力できました。 最後に 環境を構築していくのって楽しいですよね。 Docker入れてその上で...っていうのも考えたのですが、動作するかが不安だったので保留にしています。 Dockerを導入できそうでしたら、そちらも記事にしたいと思います。 その場の勢いで書いて投稿しましたので、不備がありましたらお知らせください。 参考 ダウンロード:Download Julia インストール:How to Install Julia on Ubuntu コード:Getting Start juliaについて:Juliaとは?プログラミング言語を初心者にもわかりやすく解説 tarファイル:.tar.gz【拡張子】とは tarコマンド:tarコマンドについて詳しくまとめました 【Linuxコマンド集】 lnコマンド, linkについて:【初心者でもわかる】Linuxでのリンクファイルの作成方法と使い方
  • このエントリーをはてなブックマークに追加
  • Qiitaで続きを読む

パスワード認証付きdocker-registryを導入する

業務でdocker-registryを導入する機会があり、復習のため再度デプロイします。 環境はAWS/EC2を使用しました。 docker-registryとは何か コンテナイメージを格納する場所です。docker-registry自体もコンテナイメージとして提供されています。 環境 【クライアント】 $ cat /etc/redhat-release CentOS Linux release 7.9.2009 (Core) $ docker --version Docker version 20.10.3, build 48d30b5 【サーバ】 $ uname -a Linux ip-192-168-100-209.ap-northeast-1.compute.internal 4.14.231-173.360.amzn2.x86_64 #1 SMP Mon Apr 19 23:20:22 UTC 2021 x86_64 x86_64 x86_64 GNU/Linux $ docker --version Docker version 20.10.4, build d3cb89e ※ドキュメントによるとdocker-registryが稼働するホストのdockerバージョンは1.6.0以上が望ましいと記載があります。試す場合はdockerのバージョンをあらかじめ確認しましょう。 やりたいこと docker-registryのデプロイ docker-registryにパスワードを設定する docker-registryのアクセスログを出力する データの永続化を行う 1. docker-registryのデプロイ イメージのpull 使用するのはdocker公式に記載のあるregistryです。cliだと以下で確認できます 【サーバ作業】 $ docker search registry --filter is-official=true --no-trunc NAME DESCRIPTION STARS OFFICIAL AUTOMATED registry The Docker Registry 2.0 implementation for storing and distributing Docker images 3274 [OK] # --filter is-official=trueで公式イメージのみを出力 # --no-truncで出力を省略しない デプロイ 以下でデプロイします。registryが使用するポートは5000であるため、忘れずに指定します。 $ docker run -d -p 5000:5000 --name registry registry:2 ... Status: Downloaded newer image for registry:2 9c35e33e6b6cf5035731c2172b0b0ecfcd20e1ac17c5e598675f7fcaaedba035 # -d デタッチ。バックグラウンドで動作させる 最後にイメージIDが出てきたら成功です。確認してみましょう。 $ docker images registry:2 REPOSITORY TAG IMAGE ID CREATED SIZE registry 2 1fd8e1b0bb7e 2 weeks ago 26.2MB $ docker container ps --no-trunc CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES 9c35e33e6b6cf5035731c2172b0b0ecfcd20e1ac17c5e598675f7fcaaedba035 registry:2 "/entrypoint.sh /etc/docker/registry/config.yml" 2 minutes ago Up 2 minutes 0.0.0.0:5000->5000/tcp registry 先ほどのログと同じImageIDが出てきました。問題なさそうです。 nginxコンテナをデプロイ 問題なくpush,pullできるかを確認するため、例としてnginx公式イメージからコンテナをたてます。 【クライアント作業】 ### イメージ確認 $ docker search nginx --filter is-official=true NAME DESCRIPTION STARS OFFICIAL AUTOMATED nginx Official build of Nginx. 14814 [OK] ### nginxコンテナをデプロイ $ docker run -i -d -p 8080:80 --name test-nginx nginx:latest Status: Downloaded newer image for nginx:latest 21e118a574751848dd2b2c1a28d20852d5348004c9909b5539a8cb32f1d7d9e0 ### 確認 $ docker container ps --no-trunc | grep nginx 21e118a574751848dd2b2c1a28d20852d5348004c9909b5539a8cb32f1d7d9e0 nginx:latest "/docker-entrypoint.sh nginx -g 'daemon off;'" About a minute ago Up About a minute 0.0.0.0:8080->80/tcp test-nginx $ docker images nginx:latest REPOSITORY TAG IMAGE ID CREATED SIZE nginx latest 62d49f9bab67 3 weeks ago 133MB ### 疎通確認 $ curl localhost:8080 -I HTTP/1.1 200 OK Server: nginx/1.19.10 Date: Wed, 05 May 2021 06:02:33 GMT Content-Type: text/html Content-Length: 612 Last-Modified: Tue, 13 Apr 2021 15:13:59 GMT Connection: keep-alive ETag: "6075b537-264" Accept-Ranges: bytes 問題なさそうですね。このイメージをpushしてみます。デプロイしたコンテナはイメージ削除をするため削除しましょう $ docker rm -f test-nginx test-nginx registryへのpush,pull テスト用と識別するためにタグを付けます。 タグのフォーマットは以下となりますので、環境に合わせて名づけましょう。今回はホスト名にEC2のpublic DNSをつけています ### リポジトリで管理する場合 <ホスト名>:<ポート番号>/<リポジトリ>/<イメージ名>:<タグ> ### リポジトリで管理しない場合 <ホスト名>:<ポート番号>/<イメージ名>:<タグ> フォーマットにしたがってタグを付けます $ docker image tag nginx ec2-52-197-137-171.ap-northeast-1.compute.amazonaws.com:5000/nginx:test $ docker images | grep nginx nginx latest 62d49f9bab67 3 weeks ago 133MB ec2-52-197-137-171.ap-northeast-1.compute.amazonaws.com:5000/nginx test 62d49f9bab67 3 weeks ago 133MB pushします $ docker push ec2-52-197-137-171.ap-northeast-1.compute.amazonaws.com:5000/nginx:test The push refers to repository [ec2-52-197-137-171.ap-northeast-1.compute.amazonaws.com:5000/nginx] Get https://ec2-52-197-137-171.ap-northeast-1.compute.amazonaws.com:5000/v2/: http: server gave HTTP response to HTTPS client エラーになりました。 https接続しなければ行けないところでhttp接続をしていたためにエラーが出た様です。 証明書を作成する必要があるのですが、今回はhttpで接続できるようにします。 httpsで接続する方法は別の機会に投稿したいと思っています。 クライアントにdaemon.jsonを追加 ドキュメントに記載の方法で行います。安全な方法ではないためご承知おきください。pull,pushするサーバで以下を実施します。 $ vi /etc/docker/daemon.json $ cat /etc/docker/daemon.json { "insecure-registries" : ["ec2-52-197-137-171.ap-northeast-1.compute.amazonaws.com:5000"] } ### 反映のため、サービス再起動 $ sudo systemctl restart docker 再度pushします $ docker push ec2-52-197-137-171.ap-northeast-1.compute.amazonaws.com:5000/nginx:test The push refers to repository [ec2-52-197-137-171.ap-northeast-1.compute.amazonaws.com:5000/nginx] 64ee8c6d0de0: Layer already exists 974e9faf62f1: Layer already exists 15aac1be5f02: Layer already exists 23c959acc3d0: Layer already exists 4dc529e519c4: Layer already exists 7e718b9c0c8c: Layer already exists test: digest: sha256:42bba58a1c5a6e2039af02302ba06ee66c446e9547cbfb0da33f4267638cdb53 size: 1570 できました! 手元のイメージを削除し、↑でpushしたイメージが使用できるか試しましょう $ docker rmi nginx:latest $ docker rmi ec2-52-197-137-171.ap-northeast-1.compute.amazonaws.com:5000/nginx:test $ docker images | grep nginx $ ### imageのpull $ docker pull ec2-52-197-137-171.ap-northeast-1.compute.amazonaws.com:5000/nginx:test test: Pulling from nginx f7ec5a41d630: Pull complete aa1efa14b3bf: Pull complete b78b95af9b17: Pull complete c7d6bca2b8dc: Pull complete cf16cd8e71e0: Pull complete 0241c68333ef: Pull complete Digest: sha256:42bba58a1c5a6e2039af02302ba06ee66c446e9547cbfb0da33f4267638cdb53 Status: Downloaded newer image for ec2-52-197-137-171.ap-northeast-1.com ### nginxコンテナの起動、確認 $ docker run -i -d -p 8080:80 --name test-nginx-again ec2-52-197-137-171.ap-northeast-1.compute.amazonaws.com:5000/nginx:test af5f53d7387c66d0dc42e05b2231c03cbf0dd599b2f91ddd2dc769d3770c0180 $ curl localhost:8080 -I HTTP/1.1 200 OK Server: nginx/1.19.10 Date: Wed, 05 May 2021 06:33:06 GMT Content-Type: text/html Content-Length: 612 Last-Modified: Tue, 13 Apr 2021 15:13:59 GMT Connection: keep-alive ETag: "6075b537-264" Accept-Ranges: bytes 無事pushできました! 2. docker-registryにパスワードを設定する デフォルトではdocker-registryにパスワードは設定されていませんが、以下の方法で設定可能です。今回はhtpasswdを利用します silly token htpasswd またこういった設定をregistryに対して行うには以下の2つがあげられます 公式イメージに環境変数を設定する 設定ファイルを適用させる 今回は後者を使いたいと思います。 設定ファイルを作る 設定ファイルを作り、docker-registryに適用させます。ドキュメントの例から必要そうな設定をコピペしました。 【サーバ作業】 ※ EC2を停止したためpublic DNSが変わっていますが、同環境です。 config.yml version: 0.1 auth: htpasswd: realm: basic-realm path: /auth/htpasswd htpasswdファイルが必要なため、ホスト側で作成してコンテナと共有するようにします $ htpasswd -c -b -B test.htpasswd test test Adding password for user test # -c 新規htpasswdファイル作成 # -b コマンドラインからのパスワードを受け取る # -B bcrypt方式を使う。bcryptはハッシュパスワード生成方式の一つ では立ち上げてみましょう 新しいregistryをデプロイ 重複を避けるため、ホストの5001番ポートを使用します ### 立ち上げ docker run -d -p 5001:5000 --restart=always --name registry-htpasswd \ -v `pwd`/config.yml:/etc/docker/registry/config.yml \ -v `pwd`/test.htpasswd:/auth/htpasswd \ registry:2 afe3cad9f424352ba4768aab734f989cabf148b66e887eda2d076a5d8e319968 ### 確認 $ docker ps CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES afe3cad9f424 registry:2 "/entrypoint.sh /etc…" 46 seconds ago Restarting (1) 14 seconds ago registry-htpasswd 9c35e33e6b6c registry:2 "/entrypoint.sh /etc…" 7 hours ago Up 41 minutes 0.0.0.0:5000->5000/tcp registry Restartingが出力されました。しばらく待ってもrunningとならないため、調査を実施します。 コンテナのログを見てみる docker logsコマンドで見てみましょう $ docker logs registry-htpasswd configuration error: error parsing /etc/docker/registry/config.yml: No storage configuration provided Usage: registry serve <config> [flags] Flags: -h, --help=false: help for serve Additional help topics: configuration error: error parsing /etc/docker/registry/config.yml: No storage configuration provided Usage: registry serve <config> [flags] Flags: -h, --help=false: help for serve Additional help topics: configuration error: error parsing /etc/docker/registry/config.yml: No storage configuration provided Usage: registry serve <config> [flags] Flags: -h, --help=false: help for serve ... # あとはこれの繰り返し config.ymlのstorage設定が足りていない様です。さらにあたりを付けるために、最初にデプロイしたregistryのconfig.ymlを見てみます config.ymlを見てみる ### 対象確認 $ docker ps CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES afe3cad9f424 registry:2 "/entrypoint.sh /etc…" 7 minutes ago Restarting (1) 26 seconds ago registry-htpasswd 9c35e33e6b6c registry:2 "/entrypoint.sh /etc…" 7 hours ago Up 48 minutes 0.0.0.0:5000->5000/tcp registry ### registryの中に入る $ docker exec -it registry sh / # ### config.ymlを見る / # cat /etc/docker/registry/config.yml version: 0.1 log: fields: service: registry storage: cache: blobdescriptor: inmemory filesystem: rootdirectory: /var/lib/registry http: addr: :5000 headers: X-Content-Type-Options: [nosniff] health: storagedriver: enabled: true interval: 10s threshold: 3 ### 抜ける / # exit こちらにもstorage設定がありました。いろいろ設定がありますが、ひとまずstorage設定を入れてみます。 再度設定ファイルを作成する config.yml version: 0.1 storage: cache: # ディスクキャッシュの格納場所。コンテナのメモリ領域を使用する。 blobdescriptor: inmemory filesystem: # ローカルのファイルシステムを使用 rootdirectory: /var/lib/registry # /var/lib/registryにコンテナイメージを格納 auth: htpasswd: realm: basic-realm path: /auth/htpasswd 再デプロイ 再びデプロイしてみます ### restarting状態のコンテナ削除 $ docker rm -f registry-htpasswd registry-htpasswd ### デプロイ $ docker run -d -p 5001:5000 --restart=always --name registry-htpasswd \ > -v `pwd`/config.yml:/etc/docker/registry/config.yml \ > -v `pwd`/test.htpasswd:/auth/htpasswd \ > registry:2 2d1b34cc45c484aab15ac2abff4f75c16d3d4bc42c8ec25fc2aa39272da30a43 ### 確認 $ docker ps CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES 2d1b34cc45c4 registry:2 "/entrypoint.sh /etc…" 3 seconds ago Up 2 seconds 0.0.0.0:5001->5000/tcp registry-htpasswd 9c35e33e6b6c registry:2 "/entrypoint.sh /etc…" 7 hours ago Up About an hour 0.0.0.0:5000->5000/tcp registry 今度はうまく行ってそうです。ログイン、push,pullを試してみましょう。 認証の確認をする まずパスワードを使用しないパターンを試します 【クライアント作業】 ### 5001番ポートもhttp通信を許可する $ sudo vi /etc/docker/daemon.json $ cat /etc/docker/daemon.json { "insecure-registries" : [ "ec2-3-113-20-153.ap-northeast-1.compute.amazonaws.com:5000", "ec2-3-113-20-153.ap-northeast-1.compute.amazonaws.com:5001" ] } $ sudo systemctl restart docker ### タグを5001番ポートに変更 $ docker image tag ec2-52-197-137-171.ap-northeast-1.compute.amazonaws.com:5000/nginx:test ec2-3-113-20-153.ap-northeast-1.compute.amazonaws.com:5001/nginx:test ### ログイン $ docker login ec2-3-113-20-153.ap-northeast-1.compute.amazonaws.com:5001 Username: test Password: Error response from daemon: Get http://ec2-3-113-20-153.ap-northeast-1.compute.amazonaws.com:5001/v2/: dial tcp 3.113.20.153:5001: connect: connection refused どういうわけか失敗。また調査をします。 Registry APIを通して疎通確認をする docker-registryはhttpメソッドを使って情報を取得できます(ここ)。GETでレジストリ一覧を確認し、疎通確認をしてみます。 ### 5000番ポートのregistryの場合 $ curl http://ec2-3-113-20-153.ap-northeast-1.compute.amazonaws.com:5000/v2/_catalog {"repositories":["nginx"]} ### 5001番ポートのregistryの場合 $ curl http://ec2-3-113-20-153.ap-northeast-1.compute.amazonaws.com:5001/v2/_catalog curl: (7) Failed connect to ec2-3-113-20-153.ap-northeast-1.compute.amazonaws.com:5001; 接続を拒否されました 5000番の方はAPIと通信可能なため、daemonファイルは間違っていなさそうです。それではconfig.ymlに足りない内容があるのでしょうか config.ymlを編集 ドキュメントを確認したところ、httpオプションのaddrパラメータは設定が必須であったため、追記します。 【サーバ作業】 config.yml version: 0.1 storage: cache: blobdescriptor: inmemory filesystem: rootdirectory: /var/lib/registry http: addr: :5000 # 5000番でコネクションを受け付ける auth: htpasswd: realm: basic-realm path: /auth/htpasswd 接続 再度接続してみます。 【クライアント作業】 $ docker login ec2-54-250-153-222.ap-northeast-1.compute.amazonaws.com:5001 Username: test Password: .... Login Succeeded うまくいきました。pushしてみます $ push ec2-54-250-153-222.ap-northeast-1.compute.amazonaws.com:5001/alpine:test The push refers to repository [ec2-54-250-153-222.ap-northeast-1.compute.amazonaws.com:5001/alpine] b2d5eeeaba3a: Pushed test: digest: sha256:def822f9851ca422481ec6fee59a9966f12b351c62ccb9aca841526ffaa9f748 size: 528 問題なくできました! ちなみに認証情報は~/.docker/config.jsonにdocker login時に保存されています。その認証情報を消してpullすると以下の様に失敗します。 $ cat ~/.docker/config.json { "auths": { "ec2-54-250-153-222.ap-northeast-1.compute.amazonaws.com:5001": { "auth": "dGVzdDp0ZXN0" } } } $ rm -f ~/.docker/config.json $ docker pull ec2-54-250-153-222.ap-northeast-1.compute.amazonaws.com:5001/alpine:test Error response from daemon: Head http://ec2-54-250-153-222.ap-northeast-1.compute.amazonaws.com:5001/v2/alpine/manifests/test: no basic auth credentials ログインする前に上記のファイルを用意しておくとdocker loginを省略できます。 3. docker-registryのアクセスログを出力する 開発、運用ではログ確認は必須なので出力方法を確認します。先ほどのconfig.ymlに適用します。 【サーバ作業】 config.yml version: 0.1 log: accesslog: disabled: false # アクセスログを有効にするか。falseで有効にする level: warn # ログレベル。error,warn,info,debugより選択 formatter: text # 出力方式。text,json,logstashより選択 fields: environment: test # ログにこのkey:valueが記載される storage: cache: blobdescriptor: inmemory filesystem: rootdirectory: /var/lib/registry http: addr: :5000 auth: htpasswd: realm: basic-realm path: /auth/htpasswd それでは同じくコンテナを起動します。5002番ポートに新しく立ち上げました。 $ docker run -d -p 5002:5000 --restart=always --name registry-accesslog \ > -v `pwd`/config.yml:/etc/docker/registry/config.yml \ > -v `pwd`/test.htpasswd:/auth/htpasswd \ > registry:2 da913907d63db081a4187e82eef2aaca50fe4064bbcb513792979f2e1aea76ff $ docker ps | grep 5002 da913907d63d registry:2 "/entrypoint.sh /etc…" 9 seconds ago Up 8 seconds 0.0.0.0:5002->5000/tcp registry-accesslog ログインからのpushでアクセスログを確かめてみましょう 【クライアント作業】 $ docker login ec2-54-250-153-222.ap-northeast-1.compute.amazonaws.com:5002 Username: test Password: ... Login Succeeded $ docker push ec2-54-250-153-222.ap-northeast-1.compute.amazonaws.com:5002/alpine:test The push refers to repository [ec2-54-250-153-222.ap-northeast-1.compute.amazonaws.com:5002/alpine] b2d5eeeaba3a: Pushed test: digest: sha256:def822f9851ca422481ec6fee59a9966f12b351c62ccb9aca841526ffaa9f748 size: 528 ドキュメントによるとアクセスログは標準出力に出るそうです。pushした時のログをdocker logsで見てみましょう 【サーバ作業】 $ docker logs registry-accesslog ... time="2021-05-08T13:42:54.239202664Z" level=warning msg="No HTTP secret provided - generated random secret. This may cause problems with uploads if multiple registries are behind a load-balancer. To provide a shared secret, fill in http.secret in the configuration file or set the REGISTRY_HTTP_SECRET environment variable." environment=test go.version=go1.11.2 instance.id=024cd523-5f2b-4808-9437-d0cbe5a6d11a version=v2.7.1 ... xxx.xxx.xxx.xxx - - [08/May/2021:13:45:55 +0000] "GET /v2/ HTTP/1.1" 401 87 "" "docker/20.10.3 go/go1.13.15 git-commit/46229ca kernel/3.10.0-1160.15.2.el7.x86_64 os/linux arch/amd64 UpstreamClient(Docker-Client/20.10.3 \\(linux\\))" いろいろ省略していますが、最初の例ではenvironment:testが表示され、二つ目の例ではアクセスログが出力されています。 4. データの永続化を行う イメージのpushを行いましたが、コンテナを削除するとそのデータは消えてしまいます。データを残すためにはコンテナとホストでデータ(ディレクトリ)を共有する必要があります。 docker runを行うタイミングでディレクトリ共有してみます。   【サーバ作業】 $ docker run -d -p 5003:5000 --restart=always --name registry-volume \ > -v `pwd`/config.yml:/etc/docker/registry/config.yml \ > -v `pwd`/test.htpasswd:/auth/htpasswd \ > -v `pwd`/data:/var/lib/registry \ > registry:2 aaacfe335903929d783c5003ec554b4e351f362df67760a8b29c6b11d0a5b46a ここにイメージをpushします。 【クライアント作業】 $ docker login ec2-54-250-153-222.ap-northeast-1.compute.amazonaws.com:5003 Login Succeeded $ docker push ec2-54-250-153-222.ap-northeast-1.compute.amazonaws.com:5003/alpine:test The push refers to repository [ec2-54-250-153-222.ap-northeast-1.compute.amazonaws.com:5003/alpine] b2d5eeeaba3a: Pushed $ curl -u test:test http://ec2-54-250-153-222.ap-northeas t-1.compute.amazonaws.com:5003/v2/_catalog {"repositories":["alpine"]} 問題なくpushできました。dataディレクトリも共有されています $ ll total 8 -rw-rw-r-- 1 ec2-user ec2-user 299 May 8 13:35 config.yml drwxrwxr-x 3 ec2-user ec2-user 20 May 8 14:13 data -rw-rw-r-- 1 ec2-user ec2-user 66 May 5 09:18 test.htpasswd $ tree data/ data/ mqq docker mqq registry mqq v2 tqq blobs x?? mqq sha256 x?? tqq 54 x?? x?? mqq 540db60ca9383eac9e418f78490994d0af424aab7bf6d0e47ac8ed4e2e9bcbba x?? x?? mqq data x?? tqq 6d x?? x?? mqq 6dbb9cc54074106d46d4ccb330f2a40a682d49dda5f4844962b7dce9fe44aaec x?? x?? mqq data x?? mqq de x?? mqq def822f9851ca422481ec6fee59a9966f12b351c62ccb9aca841526ffaa9f748 x?? mqq data mqq repositories mqq alpine tqq _layers x?? mqq sha256 x?? tqq 540db60ca9383eac9e418f78490994d0af424aab7bf6d0e47ac8ed4e2e9bcbba x?? x?? mqq link x?? mqq 6dbb9cc54074106d46d4ccb330f2a40a682d49dda5f4844962b7dce9fe44aaec x?? mqq link tqq _manifests x?? tqq revisions x?? x?? mqq sha256 x?? x?? mqq def822f9851ca422481ec6fee59a9966f12b351c62ccb9aca841526ffaa9f748 x?? x?? mqq link x?? mqq tags x?? mqq test x?? tqq current x?? x?? mqq link x?? mqq index x?? mqq sha256 x?? mqq def822f9851ca422481ec6fee59a9966f12b351c62ccb9aca841526ffaa9f748 x?? mqq link mqq _uploads 28 directories, 8 files 一度コンテナを削除し、pullできるか確認してみます。イメージは削除済みです。 【サーバ作業】 $ docker rm -f registry-volume $ docker run -d -p 5003:5000 --restart=always --name registry-volume \ -v `pwd`/config.yml:/etc/docker/registry/config.yml \ -v `pwd`/test.htpasswd:/auth/htpasswd \ -v `pwd`/data:/var/lib/registry \ registry:2 【クライアント作業】 ### リポジトリの有無を確認 $ curl -u test:test http://ec2-54-250-153-222.ap-northeast-1.compute.amazonaws.com:5003/v2/_catalog ### 再度pullできるか確認 $ docker pull ec2-54-250-153-222.ap-northeast-1.compute.amazonaws.com:5003/alpine:test test: Pulling from alpine 540db60ca938: Already exists Digest: sha256:def822f9851ca422481ec6fee59a9966f12b351c62ccb9aca841526ffaa9f748 Status: Downloaded newer image for ec2-54-250-153-222.ap-northeast-1.compute.amazonaws.com:5003/alpine:test ec2-54-250-153-222.ap-northeast-1.compute.amazonaws.com:5003/alpine:test 問題なくできました。コンテナのデータを残しておくために、必要なデータはホストや外部サーバと共有しましょう 最後に パスワード認証が必要なdocker-registryを導入できました。 次はhttps接続できるようにしたいと思います。 参考 registryデプロイ https://docs.docker.com/registry/deploying/ タグ設定 https://docs.docker.com/engine/reference/commandline/tag/#tag-an-image-for-a-private-repository http接続のためのdocker-daemon設定 https://docs.docker.com/registry/insecure/ パスワードを設定 https://docs.docker.com/registry/deploying/#native-basic-auth https://docs.docker.com/registry/configuration/#htpasswd ストレージ設定 https://docs.docker.com/registry/configuration/#storage https://github.com/docker/docker.github.io/blob/master/registry/storage-drivers/filesystem.md ログ設定 https://docs.docker.com/registry/configuration/#log ボリューム共有 https://docs.docker.com/registry/deploying/#customize-the-storage-location 参考にさせていただきました。ありがとうございます。 https://qiita.com/Brutus/items/da63d23be32d505409c6
  • このエントリーをはてなブックマークに追加
  • Qiitaで続きを読む

〜駆け出しのLinux復習〜 標準入力、標準出力、標準エラー出力、リダイレクトについて

※2021年5月11日追記 この記事はまだ不完全です!より良質な内容に変えていきたいと考えていますのでご了承ください! (具体的にはコメント欄を御覧ください。これから編集作業に入っていきます) 駆け出しエンジニアです。 今回も「新しいLinuxの教科書」で学習した内容を基にアウトプットしてみようと思います。 時間をかけて慎重に書いていますが、間違いなどがありましたらご指摘いただけると幸いです! 今回は標準入出力について深堀り?します! 正直これらのワードは最初にLinuxを学習した時にも出てきたので覚えてはいましたが、イマイチピンときてない感じだったので。。。笑 メニュー項目 標準入力 標準出力 標準エラー出力 リダイレクト これらについて取り扱います! ざっくりと概要 ここでいう「入力」「出力」とは「データの流れる経路」を表します。 標準入力(stdin): standard input。ざっくり言うとキーボードが繋がっている 標準出力(stdout): standard output。ざっくり言うとディスプレイが繋がっている 標準エラー出力(stderr): standard error output。ざっくり言うとディスプレイが繋がっている リダイレクト: 標準入出力先を変更すること。 私も誤解していたのが、標準入出力というのはあくまで「経路」であるということです。 キーボードが繋がっているからと言って、キーボードの入力内容のことを標準入力と言うのではない、ということです。 標準入出力の繋ぎ方に関してはシェルで自由に制御することが可能です。 標準入力にファイルを繋ぎ変えることも、標準出力、標準エラー出力にファイルを繋ぎ変えることも可能です。(=リダイレクト) というより、Linuxの世界ではキーボードやディスプレイすらファイルとして扱うようです・・・ そういう意味では、ファイルを繋ぎ替えるとかではなく、そもそも標準入出力に繋がっているのは「ファイル」であると言えます。 In Linux, Everything is a File 標準入力のリダイレクト catコマンドを例にとります。 ざっくりとこれまでの私のcatコマンドの認識は、「引数に指定したファイルの中身を表示してくれる」でした。 これは間違いではないのですが、よりLinuxっぽく?と言うのでしょうか。そのような解釈をしてみたいと思います。 引数無しのcat catコマンドに引数を何も渡さずに実行すると、キーボードの入力待ちになり入力した内容を表示するようになります。 $ cat # 入力待ちになる $ cat hello # 入力すると・・・ hello # 入力した内容が表示される!(ctrl + d で終了できます!) この挙動を踏まえて、catのマニュアルを見てみました。 $ man cat するとDESCRIPTIONの項目に以下の内容が記されていました。 The cat utility reads files sequentially, writing them to the standard output. ・・・省略・・・ If file is a single dash (`-') or absent, cat reads from the standard input. ざっくりと訳すと、「ファイルを読み込んで標準出力へ出力するよ。ファイルが'-'か空の場合は、標準入力から読み込むよ」と言っています。 先程はファイルを空で渡したことになるので、標準入力から読み込んで標準出力へ出力したということになります。 ファイルの場合を考える 冒頭あたりで、標準入出力にはファイルを繋ぐこともOKということを述べました。(繰り返しますがLinuxでは全てがファイルです。この記事では便宜上キーボードやディスプレイとファイルを分けて説明しています) ここでリダイレクトが登場します。 標準入力をリダイレクトしてみる(入力リダイレクト) 標準入力をリダイレクトする場合は、 < これを使います。 catコマンドに対して、キーボードではなくファイルを標準入力につなぐ場合は以下のようになります。 $ cat hoge.txt # 普通に渡すとこう これはhoge.txtの中身です $ cat < hoge.txt # hoge.txtを標準入力につなぐ!!! これはhoge.txtの中身です 出力結果が何も変わりません。同じです。 つまり厳密には「cat < hoge.txt という形で標準入力をリダイレクトし、標準出力へ出力する」というのが本来の動きになるのですが、 「catコマンドはその利便性のためにその手間が不要になっている」ということになるようです。 標準出力のリダイレクト(出力リダイレクト) 利用用途例:コマンドの実行結果をファイルに保存する 使い方 > #これを使います $ コマンド > ファイル #コマンド結果の行き先がファイルに向いてるイメージで覚えます echoコマンドを例にとります。 $ echo “Hello World! Hellooooo” > echo.txt #標準出力をecho.txtへリダイレクト # 何も出力されない $ cat echo.txt #echo.txtの中身を見ると Hello World! Hellooooo このような感じで実行結果をファイルに保存させることができます! ちなみにファイルは自動的に作成されますが、同じ名前のファイルが存在した場合、新しく上書きされますので注意 $ cat echo.txt Hello World! Hellooooo $ echo “HELLO WORLD” > echo.txt #別の文字列で同じファイルにリダイレクトすると HELLO WORLD #内容が上書きされてしまう 上書きは恐ろしいので・・・ 上書きではなく「追記」という出力方法も選べます。 >> #コマンドの実行結果を追記するにはこれ $ コマンド >> ファイル $ cat echo.txt HELLO WORLD $ echo “追記だよ” >> echo.txt #追記させる HELLO WORLD #元の内容も残っている 追記だよ 例えば環境変数をファイルに追加したい時、そのファイルを開いてエディターで編集しなくとも、 echoコマンドで標準出力をそのファイルにリダイレクトすることでコマンドライン上で追記の処理を行う、というような使い方ができそうですね! また追記とは言っても新規ファイルを指定した場合はちゃんと自動で作成してくれます。 またシェル側で上書きを阻止する設定も行えるようです。 標準エラー出力 標準エラー出力は、プログラムのエラーメッセージを出力するものです。 標準出力と標準エラー出力はどちらもざっくりとディスプレイに繋がっていると冒頭で述べました。 これだと、両者の見分けがつかないように感じます。が、どうでしょうか。 たとえば存在しないファイルにcatコマンドしたとすると $ cat unexist.txt cat: unexist.txt: No such file or directory 「そんなファイルもディレクトリもねーよ」と言われてしまいます。 同じ内容で標準出力をリダイレクトしてみます。 $ cat unexist.txt > example.txt cat: unexist.txt: No such file or directory 同じ様にエラー文は画面に出力されましたが、example.txtは空ファイルで作成されています。 つまり標準出力と標準エラー出力は別々のチャネル(経路)になっているということです。 (標準出力はファイルに繋がって、標準エラー出力はディスプレイに繋がっていた) 標準エラー出力のリダイレクト 2> #これを使う 2>> # 上書きさせたくない場合は $ コマンド 2> ファイル 何故2という数字が出るのかというと、次の項目で出てきますが各入出力には対応する番号が存在します。 エラー出力には2という番号が割り振られているので、それが理由だと思います。 試しに存在しないファイルをcatコマンドに渡し、標準エラー出力をリダイレクトしてみます。 エラー出力をリダイレクトするので、エラー文は表示されず、リダイレクト先に格納されるはずです。 $ cat unexist.txt 2> error.txt #エラー出力をリダイレクト 何もエラーが表示されませんでした。 error.txtが作成されているので中身をチェックします。 $ cat error.txt cat: unexist.txt: No such file or directory 期待通りファイルの中にエラー文が出力されていました! 標準出力と標準エラー出力を別ファイルにリダイレクト(いっぺんに) 標準出力と標準エラー出力それぞれのリダイレクトを同時に指定することも可能です。 $ コマンド > 標準出力のリダイレクト 2> 標準エラー出力のリダイレクト #このように続けて同時に指定できる 標準入出力には番号がある 先程も少しだけ触れましたが、標準入出力には番号が対応しています。 標準入力:0 標準出力:1 標準エラー出力:2 標準エラー出力のリダイレクトに 2> を使ったように、試しに標準出力を敢えて 1> としてリダイレクトさせたところ、問題なくいけました。 $ ls -l 1> list.txt #これでも問題なく標準出力のリダイレクトができました。 出力とエラーを同じファイルにリダイレクトしたい $ コマンド > 標準出力リダイレクト 2>&1 このように標準出力のリダイレクト先に続けて2>&1とすると、標準エラー出力も同じリダイレクト先に指定できます。 /dev/null /dev/nullとは・・・? スペシャルファイルと呼ばれる。(ls -lで確認すると種別が”c”になっている。) すごく簡単に言うと、「全て無に還す」って感じなのかなと思っています。 入力先にしても、出力先にしても、何も返ってこない。というのが/dev/nullです。 使用用途は・・・? 私はまだそれが必要と感じる場面に恐らく遭遇していないのではとも感じます。いやどうなんだろ。気付いてないだけかもしれない。笑 使用ケースとしては、コマンドの出力を画面に表示させたくない場合に、標準出力を/dev/nullを指定してリダイレクトさせることで対応する。というのがあるみたいです。 試しにechoしてみます。 $ echo “Hello” > /dev/null #何も表示されない 標準出力だけでなく、標準エラー出力でも同じことが可能です。もちろん両方も。 出力の内容やエラー以外の目的でコマンドを実行する時に、余計な表示を阻止するというような用途になるみたいです。 よく使われるみたいなので、しっかり覚えておこうと思います。 最後に ここまで読んでくださりありがとうございました。 「新しいLinuxの教科書」を読んで学習した内容をより頭に定着させるために、誰かに教える立場になったつもりでアウトプットしています。 ただハッキリ言って実務未経験の駆け出しなので間違いや誤解を招くような書き方などもしてしまっていると思います。可能な限りそうならないよう努力していますが、、、 もしそういった間違いなどがありましたらご指摘いただけると幸いです。 まだまだ簡単な内容でしょうけども初めてLinuxを学んだ頃と比較して少しづつ理解が深まっていくのは楽しいです!今のところは!笑 (それよりもポートフォリオの改善やら色々して早く転職決めるのが優先なのではと薄々感じている) スペシャルサンクス @angel_p_57様 記事: 標準入力・標準出力ってなに?
  • このエントリーをはてなブックマークに追加
  • Qiitaで続きを読む

Rocket.Chat のサブディレクトリ運用サポートが終了予定の件

作業メモ[21/5/9] 現在、サブディレクトリ運用を使用している、rocket.chat[Ver0.73]が古い為、rocket.chat.3.14.0[21/5/9最新] のインストールを試みるが、以前の様に上手くいきませんでした。 起動後のいきなりの初期画面でループしている様な感じです。 ■調べると、どうも、Ver3.2.1から、この現象は起きていたらしい。 --- 現在この問題への対応は、消極的です。 ??? ■↑ここの情報から、↓以下の情報にたどり着く Rocket.Chatのサブディレクトリ使用の公式サポートを(リリース4.0以降)で廃止する予定です。 今後は、サブドメイン運用を検討してくださいとのアナウンスでした。 Rocket.Chatはサブディレクトリ運用が可能だったので非常に残念。
  • このエントリーをはてなブックマークに追加
  • Qiitaで続きを読む

Linuc受験後の考察①

はじめに 私は先日101、102を合格したばかりの初学者です。中身は抽象的なものも多いので、あくまで参考にする程度に留めておいてください。 覚えておいた方が良い事象 ①コンピューターは1か0かでしか理解できない。 以前私は、コンピュータは、なんでも認識できる魔法使いだと思ってました。これは普段 コンピューターを無意識に使っている世界中を探しても同じことを思っている人は、意外と多いのでは?と思いました。 例えば ”ボタン”があったとしたら 人間様 ”ボタン”と読めます コンピューターからには ●●○●●、、、、、、(ボ)(第1589通り目)→人間様で言う”ボ” ●●○●●●●●●○、、(タ)(第2000通り目)→人間様で言う”タ” ○●○●●●○●●○、、(ン)(第4000通り目)→人間様で言う”ン” と認識します *これは例なので、上記の通り目は適当に書いてます。 なので、人間とコンピューターの間で翻訳する”シェル”が必要になります。 ②コンピューターには指示書なしでは何もできない これはコンピューターにはなんでこんなファイルがあるんかな?って思ってました。 実は起動する時もシャットダウンする時もいかなる時も、スクリプトファイルという指示書にそって動いているだけだったのです。 なぜそれに気がつかなったか? それは日常使っていると縁がないからです。 縁がないってことは、このファイルは人間様が読める必要がないので、私たちには何が書いているかわかりません。 じゃあ私たちが指示書を作るにはどうすればいいのか? 1.指示書を作成する。2.翻訳してあげる=コンパイル ということです。 ③流れで覚える OSを起動するには 1.BIOS(UEFI)に電気が入る *SCSIチップというハード 2.ブートローダー(カーネルを呼び出す係) *スクリプトファイルの集合体 3.カーネルが起動(OSを起動する係) *スクリプトファイルの集合体 ざっとこんな感じです。 IT用語がどんどん出てきますが、 どんな役割があるのか それは実体があるものなのか?それともファイルの集合体の名前なのか? 勉強するにあたり、実体のないものや概念に苦しむと思います。
  • このエントリーをはてなブックマークに追加
  • Qiitaで続きを読む