LoginSignup
6
11

More than 3 years have passed since last update.

UNIXコマンドチートシート

Last updated at Posted at 2020-02-28

はじめに

UNIXのコマンドについて少しだけ勉強したので、備忘録兼誰かの役に立てばと思い書きました。
今回は細かい説明などはせず、チートシートっぽい感じで書いています。
ですので、

  • あの黒い画面で使うコマンドをいつも忘れちゃう…
  • あんなことやこんなことできないの?

と思っている方はぜひご覧ください。一方、

  • UNIXって何?おいしいの?
  • 私はCUIじゃなくてGUI派なんです

という方のご期待にはそえないかもしれません。

また、コマンドのオプションも最低限しかのせていないので、詳しく知りたい方は、「man」で調べるか、ググってみてください。

まだ未熟者ですので、もし何か間違えているところや、「ここはこうした方がいいんじゃない?」というご意見がありましたら、何なりとおっしゃってくださいm(_ _)m

基本用語

カレントディレクトリ

自分が今いるディレクトリ(ざっくりとした表現です)

親ディレクトリ

一つ上の階層のディレクトリ

ホームディレクトリ

ログインした直後にいるディレクトリ

コマンドの基本

ディレクトリのあらわしかた

.  => カレントディレクトリ
.. => 親ディレクトリ
~  => ホームディレクトリ
../../ => 親ディレクトリの親ディレクトリ

絶対パスと相対パス

絶対パスは

/home/user/aaa/bbb

みたいに書く(/から始まる)。
相対パスはカレントディレクトリがuserだとすると

aaa/bbb

みたいに書く(最初の / はつけない)。
ディレクトリやファイルを指定するときには、以下のようにこのどちらかで書く(基本は相対パス)。

ls /home/user/aaa/bbb
ls aaa/bbb

(lsについては後述)
以下では「dir」とか「file」って書いたりしていますが、すべてパス付きだと思ってください。

空白の入力

コマンドラインでは空白をそのままでは入力できないので以下のようにします。

' '           # 空白一つ
'Hello world' # Hello world だと2つの文字列だと認識される

ディレクトリの確認と移動

カレントディレクトリの確認

pwd

ディレクトリの中身の確認

ls                 # カレントディレクトリの中身を表示
ls dir             # ディレクトリを指定して中身を表示
ls -R              # ディレクトリ内のディレクトリ内の……中身も表示
ls -F              # 表示時にディレクトリなら / , ファイルなら * をつける

以上は組み合わせて使える

ls -RF dir

以下についても同様に組み合わせが可能

指定したディレクトリに移動

cd dir        # 指定したディレクトリに移動
cd ..         # 親ディレクトリに移動
cd            # ホームディレクトリに移動

ディレクトリの操作

ディレクトリの生成

mkdir dir

ディレクトリの削除

rmdir dir

ディレクトリのコピー(中身も)

cp -r src_dir dest_dir    # src_dirをコピーしてdest_dirにする

ディレクトリの移動

mv src_dir dest_dir        # src_dirをdest_dirに移動する

ファイルの操作

ファイルの生成

touch file

ファイルの削除

rm file

ファイルのコピー

cp src_file file        #src_file を file としてコピー
cp src_file dir         #src_file を dir(ディレクトリ)にコピー(名前は変更しない)

ファイルの移動

mv src_file file        #src_file を file として移動
mv src_file dir         #src_file を dir(ディレクトリ)に移動(名前は変更しない)

ファイルの中身の確認

ファイルの中身を表示

cat file

ファイルの中身を先頭の一部だけ表示

head file        # デフォルトは10行
head -n k file   # k行表示

ファイルの中身を後半の一部だけ表示

tail file        # デフォルトは10行
tail -n k file   # k行表示
tail -n +k file  # k行目から表示

コマンドライン操作いろいろ(補完、履歴表示、マニュアル表示)

tabキーで補完

ls
a.out main.cpp

m tabキー → main.cpp

コマンドの使用履歴の表示

history    #何番目に実行されたかも表示される

コマンド履歴のn番目を再実行

!n

入力したコマンドの、最新の使用履歴の内容(オプションなど)を再現して実行

!command

head -n 5 file

...          # head 以外のいろんなコマンド

!head    # head -n 5 file が実行

コマンドのマニュアル表示

man command

# man 操作中に
q   # マニュアル表示をやめる
h   # マニュアル表示中の操作のマニュアルを表示

コマンドの機能拡張(パイプ, リダイレクト)

コマンドを結合 ( | をパイプという)

command1 | command2 | ...

※例は最後に

出力結果をファイルに保存

command > file

出力結果をファイルに追記(上書きしない)

command >> file

ファイルの内容をコマンドにわたす

command < file

ワイルドカード

0文字以上の任意の文字: *

head *.cpp
cat dir/*

1文字の任意の文字: ?

ls dir_201?
cat file_????.txt

カッコ内の一文字: [...]

cat file201[89].txt   # file2018 か file2019

カッコ内のいずれかのパターン: {..., ...}

cat {*.txt, *.csv}   #csvファイルとテキストファイル

出力結果の操作

列で区切って表示(区切り文字でフィールドに分けて、何番目のフィールドを表示するか指定する)

cut -f n -d , file       # 区切り文字を , として各行の n 番目を表示
cut -f 2-5,8 -d ' ' file   # これだと区切り文字を空白として2~5と8番目を表示

文字列で検索してヒットした行を表示

grep string file  # file内の「string」を含む行を表示
# オプション
# -c: ヒットした行数のみ表示
# -h: 複数ファイル指定時にファイル名を表示しない(デフォルトでは表示)
# -i: 大文字小文字を区別しない
# -l: 文字列を含むファイルがあったら、そのファイル名のみ表示
# -n: ヒットした行の行番号も表示
# -v: マッチしなかった行を表示

行でソートして表示(文字列として昇順でソート)

sort file
# オプション
# -n: 数字のソート
# -r: 降順にする
# -b: 先頭の空白を無視する
# -f: 大文字小文字を無視

隣接している行が同じ内容なら削除して表示

uniq file
uniq -c file  # 隣接している行数をそれぞれ表示

指定したフラグを基準に内容をカウント

wc -c file   # 文字数をカウント
wc -w file   # 単語数をカウント
wc -l file   # 行数をカウント

環境変数

環境変数の一覧を表示

printenv

特定の環境変数の中身を表示

echo $var    # varは環境変数
echo ${var}  # 上と同じ結果に
echo var     # これだと出力結果は「var」になる($で中身参照)

一時的な変数(シェル変数)の作成

var=...    # varは変数, ...は中身。

環境変数の設定

export var        # varを環境変数にする(シェルを閉じても保存される)
export var=...    # varを作成して環境変数にするor既存の環境変数を更新

例
export PATH="${PATH}:path"  # パスを通す(PATHに追加したいパス(path)を追加)

環境変数の削除

unset var

for文

for文

for var in list
> do
> command1
> command2
...
> done

# 1行で書く場合
for var in list; do command1; command2; ...; done

実行される順番

for v in 1 2 3; do echo $v; done
1
2
3

for v in 1 2 3; do echo $v; echo $v; done
1
1
2
2
3
3

listの例

1 2 3
*.txt      # a.txt, b.txt, c.txtがあったら *.txt と a.txt b.txt c.txt は同じ
var        # リストをあらかじめ変数に入れておいてもいい

コマンドをファイルで実行

コマンドが書いてあるファイルを実行

bash file.sh                # 普通拡張子はshにする(しなくても動く)
bash file.sh arg1 arg2 ...  # arg1, arg2, ... は引数

※お使いの環境によっては動かないかも

引数をうけとる

$@  # 引数のリスト
$n  # n番目の引数

コメントアウト

# ←これでコメントアウト

パイプを使った応用例

※他のコマンドやオプションを使えばもっと短く記述できるものもあると思います。
こんなものもあるよ!とか、こう書いたら短いよ!とかあったら教えて下さい。

行番号を指定してその行だけ取得

tail -n +k file | head -n 1    # fileのk行目を取得

同じ内容の行の数をカウントして降順にする

sort file | uniq -c | sort -rn

最近のコマンドの使用履歴を表示

history | tail -n 5

コマンドを指定して、そのコマンドを一番最近使ったときのオプション等を表示

history | grep "[0-9]  command " | tail -n 1    # commandのところを指定するコマンドにします。

参考

6
11
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
6
11