WSL(Windows Subsystem for Linux)でLinuxのお勉強

はじめに

Windows 10ではWSL(Windows Subsystem for Linux)なる便利なものが使えるということで、この度導入してみました。  

この機会に、今まで雰囲気でやってきたLinuxコマンド等の使い方について自分用のメモを残してみます。

# 新しく何か覚えたら随時更新していきたい。

WSLについて

Windows 10から簡単にLinux環境を動かすことができます。
導入方法は以下の記事等を参考にしてください:

www.ask-mswin.com

起動方法

導入の際にはいくつかの選択肢の中から好きなディストリビューションを選ぶことができますが、ここではUbuntuを選択します。
無事インストールできたら、スタートメニューから「Ubuntu」のアイコンをクリックするとUbuntuのシェルが立ち上がります。
f:id:poco_tkm:20181008160649p:plain 初めて立ち上げた場合はアカウントの設定が必要になるので、適当なユーザー名とパスワードを設定しておきましょう。
以降はこのアカウントでログインした状態で立ち上がります。

あるいは、コマンドプロンプトwslを叩いても同じUbuntu環境に入ることができます。便利ですね。 f:id:poco_tkm:20181008162146p:plain

あるいは、軽く1コマンドだけ実行したい場合は、wslに続いて実行したいコマンドを打つのでもOKです。 f:id:poco_tkm:20181008165037p:plain

rootのパスワード設定

さて、何かのときにrootアカウントでログインしたくなるときがあるかもしれません。
が、WSLの仕様として、デフォルトのrootのパスワード自体を知ることは不可能なようです。

$ su -  # rootに変更したい
Password:  # パスワードを聞かれる(わからない)
su: Authentication failure

ただ、現在のアカウントからsudoコマンドによってroot権限でコマンドを実行することは可能です。 そこで、以下のようにしてrootのパスワードを現在のアカウントから変更する形で初期設定しておくことができます。

$ sudo su -  # rootに変更
[sudo] password for [ログイン中のユーザー名]:  # ログイン中のアカウントのパスワードを入力
root@MyComputer:~# passwd
Enter new UNIX password:  # rootの新しいパスワードを入力
Retype new UNIX password:  # rootの新しいパスワードを再度入力
passwd: password updated successfully

基本コマンド

ls (list segments)

カレントディレクトリにあるフォルダ、ファイルの一覧を表示する。

  • -a
    名前の先頭に「.」があるファイル、フォルダも表示する。
    カレントディレクトリ(「.」)、親ディレクトリ(「..」)なんかも表示されるが、-Aオプションを使うとこの2つは表示されなくなる。
  • -l
    詳細情報も含めて表示する。
  • -R
    ディレクトリの中身も再帰的に表示する。

chmod (change mode)

パーミッションを設定する。
パーミッション関連で困ったらとりあえずchmod 777 hoge.txtで解決ですよね?*1

vi

vi(エディタ)でファイルを編集する。
viエディタの使い方

source

コマンドを記入したファイルを引数に与えると、それを実行する。

$ echo echo abc > source_test.txt
$ source source_test.txt
abc

eng-entrance.com

これまで、source .bashrcとかおまじないのように打ってましたが、sourceコマンド自体の働きはこれだけなんですね。
bashコマンドも同様の働きをしますが、以下のような違いがあるようです: qiita.com

リダイレクト

コマンドとファイル名を>で繋ぐことで、標準出力をファイルに書き込むことができる。
>ではファイルの中身がすべて上書きされ、>>では末尾に追記される。

$ echo hello > test.txt
$ cat test.txt
hello
$ echo bye > test.txt
$ cat test.txt
bye
$ echo hello > test.txt
$ echo bye >> test.txt
$ cat test.txt
hello
bye

また、コマンドとファイル名を<で繋げば、ファイルの中身をコマンドへの入力として与えられる。

$ cat test.txt
abcd
efgh
test
ijkl
$ grep abc < test.txt
abcd

その他のいろいろな使い方は以下を参照: eng-entrance.com

パイプライン

コマンドとコマンドを|で繋ぐことで、1つ目のコマンドの出力を2つ目のコマンドの入力として与える。

$ cat test.txt
abcd
efgh
test
ijkl
$ cat test.txt | grep test
test

その他、詳細は以下を参照: eng-entrance.com

おわりに

その他、理解が曖昧な部分はいろいろあるので引き続きやっていきましょう。

etc...

f:id:poco_tkm:20181008185928p:plain

*1:実際のところ、例えばssh秘密鍵パーミッションが777になってたりすると怒られて接続できないなんてことがあるらしいので、必要に応じて適切に設定しましょう。