様々な Linuxコマンドとその活用方法について

##はじめに
この記事ではLinuxコマンドの中で覚えておきたいコマンドと、オプションなどを使用して実際にどのように使用されるかなどについて説明していきたいと思います。
ぜひ参考にしてみてください。


##シェルを切り替えるコマンド
この章ではシェルを切り替えるときのコマンドについて説明していきたいと思います。

###sh
シェルをshに切り替える
※4.2はバージョンを示す

```
#bashからshへの切り替え
$sh
(変更後)sh-4.2$
```

###bash
シェルをbashに切り替える

```
#shからbashへの切り替え
$-4.2$bash
(変更後)$
```

###元のログイシェル戻るには
元のログイシェル戻るには→exitコマンドを使用

```
$-4.2$bash
(変更後)$
$exit
$-4.2$bash←元に戻った
```

##ファイルやディレクトリの移動、表示を行うコマンド
ここではファイルやディレクトリの移動、表示を行うコマンドについて説明していきます。

その前にコマンドについての理解を深めるために知っておくべき、**ディレクトリ**、**パス(PATH)**、そしてパスの書き方で２つに分類できる**絶対パス**と**相対パス**について説明していきたいと思う。

###ディレクトリとは
Linuxでは文書や画像、プログラムなどだけでなく、実行コマンドや入出力装置など全てがファイルで構成されている(人間がいくつもの細胞で構成されているようなイメージ)
→ファイルを種類ごとに分類して認識しやすくすることが大切
(書類を整理しておくような感じ)

**ディレクトリ**→ファイルを整理する入れ物のようなもの

####ディレクトリの構造とルートディレクトリについて
一般的なLinuxのディレクトリ構造
→**ルートディレクトリ(/)**を元にそこから枝分かれしていくツリー構造(階層構造)になっている
→元を辿るとルートディレクトリ(/で示されている)にたどり着く

※このようなツリー構造をとるものの１つとしてDOMなどが挙げられる

###パス(PATH)とは
現在のファイルやディレクトリの場所を示すとき
例えば
homeディレクトリの下のtaroというディレクトリの下のtest1というファイル
と示すのはめんどくさい
→/で区切って表記する

先ほどの例の場合

```
/home/taro/test1
```
となる

これを**パス(PATH)**と呼ぶ

####相対パスと絶対パスについて
またパス(PATH)の書き方には相対パスと絶対パスという２つの方法がある。

#####絶対パス
ルートディレクトリを起点としてファイルやディレクトリのパスを示すこと。
これは先ほどのような

```
/home/taro/test1
```
がこれに該当する

#####相対パス
カレントディレクトリ(現在位置のディレクトリ)を起点として表記されるパスのこと。

先ほどのを例に絶対パスと相対パスで比較してみると

```
/home/taro/test1　←絶対パス
test1または./test1　←相対パス
```
となる
相対パスのこの２つの違いとして
./test1の場合だとファイル名を記入したかパス表記を明示的(ハッキリ示す)にすることができる




###pwd
print working directory(出力ディレクトリ)の略
カレントディレクトリ(現在いるディレクトリ)の確認を行う

```
$pwd
/home/＜ユーザー名＞
```

###cd
カレントディレクトリの変更(移動)

```
$cd /usr
$pwd 
/usr
```

####ホームディレクトリへの移動について
ホームディレクトリとは？
→ Linuxのユーザーごとにそれぞれ割り当てられているディレクトリ
①引数なしでcdコマンドを実行した場合


```
$cd
```

②~(チルダ)を使って移動→チルダ展開の使用

```
$cd ~
```

###ls
ディレクトリ内のファイルを表示


```
$ls
bin etc など
```
####lsコマンドの活用
lsコマンドには様々なオプションが存在するが、今回は特に使用頻度の高いオプションを３つ紹介していきます。

①ls -lt
ファイルが持つ権限や所有者など詳細情報(-lオプション)を更新時間(-tオプション)ごとに並べる

```
$ls -lt
```

②ls -la
lsコマンド
→ファイル名が.ではじまるものは隠しファイルとみなして表示しない

しかし、-aオプションを付与することで隠しファイルも全て表示される
なおかつ詳細な表示がされる

```
$ls -la
```

③ls -lit
①にさらにノード番号（データに割り当てられる番号）を表示するiコマンドを付与したもの

```
$ls -lit
```


##ファイル操作のコマンド
###mkdir
ディレクトリの作成を行う
mkdir (オプション) ＜ディレクトリ名＞

```
$mkdir testdir
$ls -F
testdir/
```

####mkdirコマンドの活用
#####深いディレクトリの作成
mkdirでディレクトリを作成する際、階層が複数あるディレクトリを作りたいという場合もある
→しかし、普通の場合だと

```
$mkdir testdir/hogehoge
```
とした場合、ディレクトリ'testdir/hogehoge'を作成できません
という表示になってまう

そこで使用されるのが

```
$mkdir -p
```

である。
こちらを使用することで深いディレクトリを作成することができる。

#####&&の使用
mkdirでディレクトリを作ってすぐにcdコマンドで移動することが多い
そんな時に

```
$mkdir testdir
$cd testdir
```
と打ってもできるが、できれば一回の処理で終わらせたい。
そんな時は２つのコマンド間にに&&を使用することで連続して処理することができる。

```
$mkdir testdir && cd testdir
```



###touch
何も書かれていない空のファイルの作成
既存のファイルを指定→内容の上書き、削除などはされない
またls-lで確認するとわかるが、touchコマンドには実行権限がない

1つ→touch ＜ファイル名１＞
複数→touch ＜ファイル名１＞＜ファイル名２＞....

```
$touch testfile1 
$ls 
testfile1 
```

###cat
ファイルの内容の表示
con**cat**enate(連結する)が由来
cat (オプション) ＜ファイル名＞

```
$cat testfile1

--testfile1の内容の表示--
```

####catコマンドの活用
cat -n としてnオプションを付与して
行番号を表示することが多い

```
$cat -n testfile1
1hogehoge
2fugafuga
3hogehoge
4fugafuga
```

###less
長いファイルの内容をスクロールで表示

```
$less
--画面に収まらまいほどの内容--
```

移動、終了などはvimと同じ

####使用される例
使用される例としては
cat -n(ファイルの表示)→grep(文字列の検索)→cut(入力の一部を切り出して出力)
などの作業を終えた後の最終確認として

```
$less
```
のように 単体で使用されることが多い。また、　

```
$-コマンド-|less
```

としてパイプライン(片方のコマンドにもう片方のコマンドを送り込むこと)で使用されることが多い


```
$less
--画面に収まらまいほどの内容--
```

移動、終了などはvimと同じ

###mv
ディレクトリー間でのファイルやディレクトリの移動
ファイル名やディレクトリ名の変更を行う

現場では　mv -vとして
ファイル名やディレクトリ名の変更を行うことが多い

###vim
vim(テキストエディタ)を使用した編集を行う

```
$vim ファイル名
```
※注意
vimを使った編集の経験がない場合、ターミナル内でvimtutorを起動し、
コマンドについて慣れてから作業するのがオススメ

##bashの設定を行うコマンド
###alias
エイリアスの設定
エイリアス→わかりやすい別名(自分で判別できるもの)を与えて、コマンドを使いやすくするための機能、自分で定義付けを行う感じ。

alias ＜名前＞='＜コマンド＞'

またエイリアスで設定したが、本来のように
(ls='ls-F'と設定したが、lsのみのコマンドを実行したいなど)使用したい場合
\を先頭につける

```
\ls
```

####自分が設定したエイリアス
＃はコメントを表す

```
#bashの設定ファイルの内容を読み込んで実行
$source　~/.bashrc
```
```
#aliasの設定
alias ls='ls -F'
alias la='ls -a'
alias ll='ls -l'
#慎重な操作を行いたいコマンドの実行確認
alias rm='rm -i'
alias cp='cp -i'
alias mv='mv -I'
#深いディレクトリを一気に作成
alias mkdir='mkdir-p'
```

###unalias
設定したエイリアスの削除
unalias　エイリアス名

```
$unalias mkdir
```

###type

実行コマンドかエイリアスかどうかの判別を行う
type 'エイリアス名'

```
$type ll
ll is aliased to 'ls-l'
```


##ユーザーに様々な権限を付与するコマンド
###sudo
実行したいコマンドをスーパーユーザーの権限で実行
実行時に一時的にルートユーザーになるのでパスワードの入力が必要となる

```
$sudo yum install git--core
[sudo]password for ユーザー名：＿
```

##実行コマンドがどこに置いてあるのかをみるコマンド
###which
実行コマンドはファイルとして存在しています。
※そのコマンドの多くは/binの中に存在していることが多い

```
$which cat
/bin/cat
```