eljefeblog 

Any sufficiently advanced technology is indistinguishable from magic

programming

【超初学者向け:ターミナル修得編】プログラミング入門

プログラミング入門【初学者向け】



この記事では以下のような疑問および要望に答えていきます。

悩むペン銀

プログラミング初学者で、ターミナルについて学びたい

Linuxコマンドの基本的な使い方を学んでみたい







ターミナルって何?



MacBookユーザーであれば
ターミナルというアプリケーションが既にインストールされています。


このターミナルとはコマンドラインを利用し
MacOSをインタラクティブに操作するためのプラットフォームのことです。

(↓これです。黒いやつ。



このターミナルに『コマンド(命令)』を入力することで
MacBookの様々な動作を意図的に操作することが可能となります。


よく悪いことをするハッカーが黒い画面に向かって
何やら文字をカタカタ入力している場面が映画等で放映されますが
ターミナルがそれですね。


ここで利用するコマンドとはshell(シェル)と呼ばれるスクリプト言語の事です。
この言語を操ることでオペレーティングシステム(OS)に直接命令する事ができます。


Windowsはコマンドプロンプト、Macはターミナルでshell(シェル)を記述することによってOSに命令を出せます。
(OSがまだ分からない人はパソコンと置き換えても大丈夫です


ここで命令ってなんだろう?と思う方もいるでしょう。
でもパソコンに詳しくない人も
パソコンを使うときは無意識にOSに命令を出しまくっているんです。


例えばファイルやディレクトリの中身をみたり、Spotifyの音楽を聞いたりといった操作はアイコンをマウスでクリックしたりしますよね?
ここでは『クリック』が命令になっています。


動画を削除したりするときは動画ファイルのアイコンをドラックしてゴミ箱アイコンのところでドロップしているはずです。これも命令です。


こんな感じでパソコンに詳しくない人でも直感的にグラフィカルな情報からパソコンを操作できるように開発されてきました。(GUIと呼ばれます)


一方でプログラマはShell(シェル)を学んで、ターミナルにコマンドを入力する事で直接パソコンに命令し、上記したことと同じ事そしてそれ以上の事を行えます。


プログラマがターミナルを使ってパソコンを操作する大きな理由は
-慣れるとコマンドを使う方が圧倒的に素早くコンピュータに命令できる
-コマンドを使う方がより圧倒的に多くの種類の命令ができる
からです。



スクリプト言語にはbashやzshなど多様な種類が存在していますが
今回はこの中でも『bash』についてざっくり話していきます。

(*bashやzshに関するさらに詳しい説明はこちら↓




それでは早速ターミナルにコマンドを入力してパソコンに命令してみましょう。



恐らく設定を触った事がなけば、既にbashがインストールされているはず)
以下のコマンドをターミナルに入力し確認してみましょう。

[アカウント名$] bash  #[アカウント名$]は入力しません
bash-3.2$ 



このような出力が得られれば既にターミナルにbashが用意されています。






ターミナルでOSに命令してみよう



コマンドラインの具体的な学習に入る前に、事前に知っておくべき
ターミナルの基本的な機能について学んで起きましょう。



bashの一般的な構文



bashのコマンドは一般的に以下の構文で入力します。

[コマンド] [オプション] [ファイルもしくはディレクトリへのpath]



具体的には以下のような入力をします。

ls -la /Users/ユーザー名/Applications



ここではls がコマンド、-la がオプションとなっており、
/Users/ユーザー名/Applications がpathとなっています。
(重要:各入力間には半角スペースが挿入されていることに注意しましょう)


*ディレクトリとファイルとは
ディレクトリ:ファイル等を格納しておく箱の事(フォルダと同義)
ファイル:プログラム等、何かしらデータが記述されたものと覚えると良いでしょう



ちなみにこのlsと言うコマンドは『ディレクトリの中身のファイルにはどんなものがあるのか確認するときに使うコマンド』です。


めちゃくちゃ使うので覚えておきましょう。




Path(パス)


さっきpathというキーワードが出てきましたが
pathとは直訳すると通り道、進路などと言った意味ですが
ITの分野ではPC内での特定のディレクトリやファイルと言ったデータの所在地
(現実世界で例えるなら住所)を表しています。


Macでのファイルシステムは木構造になっており
木構造の始まりはroot(もしくはルートディレクトリ)と呼ばれ、
パソコンにとって最も重要なディレクトリが格納されています。


ターミナルで『pwd』とコマンドを入力してみましょう。

/Users/tarou

こんな出力がされるはずです。


pwdは「Present working directory」と呼ばれ、『今いるディレクトリのパス』これを表示してくれるコマンドです。
自分が今どの階層にいるのかを知る事ができます。


/はルートディレクトリを意味しています。
出力結果は自分がUsersディレクトリの中の、tarou(ユーザー名)デイレクトリの中に現在いることを示しています。
この/Users/ユーザー名 の場所はホームディレクトリと呼ばれます。


ホームディレクトリでlsコマンドを入力してみましょう。

Applications
Desktop
Downloads
Documents
Library
Music
Picture
Public
….

こんな表示が出力されるはずです。ホームディレクトリにはデフォルトで
このようにたくさんのデイレクトリが格納されています。


例えばデスクトップに置いてあるファイルはホームディレクトリの下の
/Users/tarou/Desktop/
ここに格納されています。

インターネットからダウンロードされたファイルは
/Users/tarou/Download/
ここに格納されています。


こんな感じでコンピュータではデータが保管されます。


ここでこのディレクトリ間を行き来できるコマンドとして
cd「change directory」と言うコマンドが用意されています。


例えばpwdを入力して今ホームディレクトリ(/Users/tarou/)にいて
Desktopのディレクトリへ行きたいのであれば

cd Desktop

と入力するだけで/Users/tarou/Desktop/ に入る事ができます。

lsコマンドで中に含まれるファイルを確認してみましょう。


デスクトップに置いているファイルと同じファイル名のものが
全て確認できるはずです。



もっと木構造が分かりやすいように画像で説明すると
パソコンでは以下のような構造で
ディレクトリおよびファイルが保存されます。
(青色:ディレクトリ 白色・赤色:ファイル)


左側がrootに近くなり
右側へ行く程、階層が深くなっていきます。
(ここではディレクトリ(青文字)の中に、ファイル(赤・白)やディレクトリが格納されている。と言うことがザックリと理解できれば問題ないです。ファイル名や拡張子について深く理解しようとする必要はありません。)


この画像の最上部の.( ドット) がrootを表しています。
次に続く階層のsrcのディレクトリ内に全てのディレクトリおよびファイルが格納されている構造です。


仮にこの中のファイルVOC_test.pklを
pathで表すとした場合、以下のように表すことができます。

/src/VOC_test.pkl



続いてtraining.logは以下のように表すことができます。

/src/checkpoints/training.log



このように階層的にディレクトリやファイルが保存されている。
この事を頭に入れておくようにしましょう。



空白を挿入する


先ほども少し言及しましたが、ターミナルが適切に動作するには
コマンドやオプション、パスといった各入力の間には
半角で空白を入れる必要があります。

注意して確認しておくようにしましょう。
初学者の方がエラーでstackする場合、この理由のケースが多いです。


Sudo



これから学ぶ多くのコマンドは「管理者権限」が必要なアクセス
を行うものである場合があります。
そこで登場するのが管理者権限を付与するキーワードsudo(single user doの略)です。
以下のようにして適用します。

[アカウント名$] sudo コマンド



この管理者権限とは、言い換えるのであればアパートを貸す大家さん
が持っているマスターキー(どの部屋の鍵も開けることが可能)と同義です。


使い方次第では如何なる操作を行うことができるコマンドを制限するため
間違えて大切な設定が変更されないよう、特に重要な操作自体に
鍵がかけられていると考えて構いません。


管理者権限を持つアカウントは如何なるコマンドも
パスワード等、入力する事なくダイレクトに利用することができますが


一方で管理者権限を持たないアカウントでサインインしている場合でも
sudoというキーワードをコマンドの前で宣言することで
設定したパスワードを知って入れば
管理者権限を持つアカウントと同等の操作を行うことができます。


また、一般的にpcの所有者は管理者権限を持つことが可能ですが
間違えてコマンドを入力してしまうなどの危険性防止等を理由に
一般ユーザーでログインしておき必要な時にsudoコマンドを利用する
ということが推奨されます。


もし、自分がどのユーザでログインしているのか確認したい場合は
以下のコマンドを入力する事で確認できます。

[アカウント名$] id
uid=501(seimei) gid=20(staff) ....



管理者権限を持って入れば(root)
持っていなければ(ユーザー名)がuidに表示されます。



知っておくべきbashコマンド



これでbashに対し必要最低限の知識は学べました。
ついでにとても便利で役立つコマンドもいくつか学んでおきましょう。

もしも今から学ぶコマンドをもっと深く知りたくなったなら
以下のコマンドを入力する事で各コマンドの詳細な説明を取得することができます。


[アカウント名$] man コマンド  

注:ただし説明は英語です。この事は何度か言及していますが、プログラミング学習と英語学習、これらを同時並行で進めることを推奨します。

現在インターネット上の英語話者の人口は10億人
日本語話者の人口は1億人~2億人の間であり

IT関連の最新の情報は必ず英語で発行される上、web上に出回っている情報量・質共に日本語のものと比べ、圧倒的に異なります。 詳細はこちら

学びの質や幅が顕著に増加するので、話す事はできなくとも、せめて英語で文章を理解できる状態にある事が好ましいでしょう。



find



コマンドfindの特徴は以下です。


  • GUIの代わり: Spotlight

  • コマンドfindを使う利点:Spotlightが検索しないファイルも検索する事ができ、何より検索速度が高速である。



  • SpotlightはmacOSのファイルシステムに対して検索する指定をしない限り
    検索をスキップする傾向にあります。
    反対にbashのコマンドであるfindは如何なる種類・格納場所のファイルの検索も行う事ができ、その格納場所をフルパスで示します。

    findのsyntax(構文)は以下の4つのパートに分けられます。

    [アカウント名$] ① ② ③ ④ 


  • find

  • ② 検索したいディレクトリ (e.g. /Applications/)

  • ③ オプション (e.g. -name) -nameはファイルの名称を検索対象とします。

  • ④ 検索する文字列 (e.g. google)
    オプションで-nameを指定した場合、ファイル名にgoogleという文字列があるファイルを検索します。


  • またfindはregex(正規表現)を使うと言うことも知っておくべきでしょう。
    正規表現については本記事においてトピックが大きくなりすぎるため深く説明しませんが
    正規表現において*(アスタリスク)の記号はワイルドカードとして利用されます。
    (ワイルドカードは全ての文字を指定すると思って構いません)


    mv


    コマンドmvの特徴は以下です。


  • 置き換え:フォルダやファイルを選択し、移動させること

  • コマンドmvを使う利点:高速にファイルやフォルダの移動を実現する



  • mvを使うことでファイルやフォルダといったデータを簡単に移動させる事ができます。加えてそれらデータの名称を変更することも可能です。


    構文は次のようになります。

    [アカウント名$] mv <元々のファイルpath> <新しいファイルpath>



    また、次のように入力する事で
    Documents下にあるfile_1のフォルダをDesktopに移動する事ができます。

    [アカウント名$] mv /Users/seimei/Documents/file_1 /Users/seimei/Desktop/file_1




    ls



    コマンドlsの特徴は以下です。


  • 置き換え:cmd+i

  • コマンドlsを利用する利点:更新記録などファイルおよびディレクトリに関する詳細な情報が即座に確認する事ができる

  • lsはディレクトリ( フォルダ)内にどのようなファイルが保管されているのか確認する事が出来る強力なコマンドです。多くのオプションが用意されており、ファイルに関する書き込み権限を始め多くの情報を迅速に提供します。
    例えば以下のようなオプションをよく利用する事でしょう。

  • -l: フォルダ内の各ファイルに関するパーミッション(操作権限)を確認するオプションです。
  • -a:  フォルダ内の隠しファイルを含むすべてのファイルを表示します。



  • mkdir



    コマンドmkdirの特徴は以下です。


  • 置き換え:ファインダー>ファイル>新しいフォルダの動作を実現

  • コマンドmvを利用する利点;新しいフォルダをダブルクリックして生成する手間を省き、迅速にフォルダを生成する


  • 新しいフォルダを以下のコマンドで簡単に生成する事ができます。

    [アカウント名$] mkdir /Users/seimei/Desktop/new_directory/


    上記のコマンドを打ち込む事で、デスクトップにて
    new_directoryと言う名前のフォルダを生成することができます。



    まとめ



    いかがだったでしょうか?
    本記事ではプログラミングを学びたい初学者に向けた
    ターミナルとは何か、コマンドとは何か。
    どうやってターミナルからOSを操作するのかを学びました。



    プログラミングを勉強したい方にとって
    ターミナルの操作を習得することは避けては通れない関門
    です。
    日常的にコマンドをターミナルに打ち込み
    ファイルやフォルダの操作を行ってみましょう。


    なんども繰り返すことで意識しないうちにコマンドを覚え
    workflowに取り込むことで、大幅な作業時間の短縮が見込めるはずです。


    今回は以上です。
    ではでは




    人気記事【初学者必見】効率的なプログラミング勉強方法を紹介します

    人気記事 CS学位取得者がガチでプログラミングスクールを調査してみた件【おすすめのスクール】








    このエントリーをはてなブックマークに追加

    data-ad-format="rectangle" data-ad-format="rectangle"

    返信する

    メールアドレスが公開されることはありません。 * が付いている欄は必須項目です

    某国立大学大学院(理系)に所属しています。 最近の趣味は人工知能関連の論文を読む事で 研究ではComputer Vision周りを中心に活動しており、 サイドワークとしてデータ分析の業務に関わっています。 本ブログはこれまで筆者が学んできた様々な知識の中から 有益だと思えた情報のみをまとめたものです。 内容は個人の見解であり、所属する機関と関係するものではありません。 Research: is related to Computer Vision Hobby: is to study Artificial Intelligence / Machine Learning.