【学習メモ】LinuxCUI初心者が早く知りたかったコマンド(操作も)

はじめに

Linuxを学ぶ上で
先に教えて欲しかったことを書きます。
つまりは、教える機会があれば先に伝えておきたいことです。

便利なキー操作や誤りがあればぜひ教えてください。
また、この記事に対してmorimorihogeさんの分かりやすい補完がありますので、ぜひそちらと合わせてお読みください

流れ

1.キーボード操作編
 知ってると便利なショートカット。
2.用語・概念編
 知ってるとひらめくかも。
3.コマンド編
 知っておくべき重要なコマンド、時短になるコマンド。

キーボード操作編

補完機能

Tab連打。
連打すると勝手にlsしてフォルダ内のファイル一覧を教えてくれる。
候補が絞られると勝手に名前を補完してくれる。

入力間違いでもBackspaceやDeleteできない

^H^H^Hや^[[3~、^[[Dが表示されて涙目。
Ctrl + U で入力したものがきれいに消える。
パスワードを間違って入力したときにも使える。

入力した履歴は↑キーしか使ったことがない

ひたすら↑を押さずに、Ctrl + R で入力した履歴を検索できる。
historyコマンド、ヒストリリスト/root/.bash_history。
ターミナルは常にヒストリリストを emacs で編集していて,コマンドラインはその最終行

フリーズしたCtrl+Cも受け付けない

viで編集中によくやる。
Ctrl + Sで画面のロック、Ctrl + Qでロック解除。
ただしロック中に入力した内容は全部実行されているので注意。
vimで操作ができなくなったら・・・

仮想デスクトップ切り替えのような

プログラム実行中に終わるまで待つ必要がなくなる。
フォアグラウンドとバックグラウンドがある。
Ctrl + Zで実行中のジョブを一時停止してバックグラウンドへ移行
jobsでバックグラウンドのジョブ一覧表示
fg X でXのジョブをフォアグラウンドへ移行
bg X でXのジョブをバックグラウンドのまま再開
実行中のプログラムをバックグラウンドにもっていく。フォアグラウンドにもってくる(bg、fg)
コマンド行の末尾に&をつけると、はじめからバックグラウンドで実行できる。(できないものもある)

用語・概念編

バッシュって何?

bash、sh、シェル…シェルスクリプト?
似た名前で区別がつかないけど、
入力したコマンドを理解して実行してくれるプログラムをシェル。バッシュやzshなどの種類がある。
cmdとpowershellの違いみたいに感じる。
コマンドプロンプトのような入力窓をシェルターミナル。
SSH接続やログイン後、ユーザーごとのシェル(Bash等)が起動し、OSへ伝えるコマンドの入力を待っている。
Linux上でシェルが実行される仕組みを,体系的に理解しよう(bash 中級者への道)

標準出力?

[root@hoge ~]# の世界で表示されるものは
「デバイスファイル(tty)に入出力された文字情報」
という衝撃。
ファイルに出力された文字だから
パイプしたりリダイレクトしたりできる。
↓の7~22までを10回読むと何となくわかるかも。
"シェル芸初心者によるシェル芸入門"

SSH接続が切れたから同じptsにつなぎなおしたい

できない。
SSH接続が切れる->使用していたデバイスファイル(/dev/pts)を削除->SSHが起動させたbashを終了->bashが起動させたスクリプトが終了。(順序は前後しているかもしれません)
SSHが切れる=終了させるのと同義なので、再接続+動作中だったプログラムを再開できない。
解決するプログラムは仮想デスクトップ切り替えのような#2を参照
プログラムをもう既に実行してしまった場合でも切れる前なら大丈夫

シェルスクリプト

バッチファイルと同じ。見たことない文法。ifがfiで終わる、不思議な世界。
覚えればそんなに難しくない。
シェルで動くコマンドを書くので、シェルを使えないと書けない。
スペースが区切り文字の意味を持つので
シェルスクリプトを文法ではなく、長いコマンドラインとして捉えれば
シェルスクリプトで出るSyntax Errorは減るはず。

/etcや/dev

/etcはWindowsで例えるならWindowsフォルダ。
/devはデバイス関連をファイル化したものが入ってるフォルダ。
ルートディレクトリ / 以下のフォルダに何が入ってるかは
大体決まってるらしい。

pid?

プログラムが動作してるとpidファイルをlog等のフォルダに作成する。
このファイルがあると、起動中とみなされる。

ソケット SOCK SOCKET

プログラムがデータをやり取りするために使われる特殊なファイル。
mysql.sockが何かわからず詰まった。SOCKETの歴史

$

変数を表す。シェルだと$$はそれ自身のPID。
シェルスクリプトで$?は直前の実行コマンドの結果。
$1は1つ目の引数、$2は2つ目の引数。

行末の\(バックスラッシュ)

改行文字の直前にバックスラッシュが出たら、
改行していないと思って次の行を読む。
論理行が複数の物理行にまたがる場合に、行の継続を表すために用いる。

エイリアス

打ったコマンドは実は引数が設定されることもあるらしい。
grepの色分けもそのおかげ。
aliasコマンドでで確認できる。
set -xを実行したあと、コマンドを打つたびに引数が見れる。
set +xで戻る。
コマンドの組み合わせを登録することもできる。

プロセスの親子関係

sysinit/systemdが一番はじめにある。
その下に子プロセスが関係をもって起動する。
プログラムはすべて親子関係があり、親がいなくなると子もいなくなる。
親が異常終了すると、子はsystemdに引き取られて生き続けることもある。
Systemd入門(1) - Unitの概念を理解する
bashから入力したプログラムはbashの子として動作している。

コマンド編

man

"マニュアルコマンドman、infoや関連コマンドについて整理する"

ll

ls -l と同じ。llがls -lと同じ動作をするalias設定がされている。
エクスプローラーのようにディレクトリの中身が見れる。
そのままでは動かないLinuxもある。
隠しファイルも見たいときはls -la。

less

ファイルに追記された末尾を見たいとき less -> Shift + F (Ctrl + Cで抜ける、vで編集も可能)
tail -fやtailfでもできる
ログファイルなどの追記出力をリアルタイムに見るには
tail -fは「ctrl + S」で一時停止、「ctrl + Q」で再開させる。

cat awk sed cut sort wc

パイプしたいときに使う魔法の言葉。
それぞれの文法は覚えるべし。

find

ファイルを探す。/で探せば大体見つかる。find -name XXX
locateのほうが早く探せる。インストールはmlocate。

ps

ps auxでプロセスが見れる。
pstreeでツリー状、pstree -pでプロセスIDも見れる。
pstreeはCentOS7標準で無いっぽいので入れる

top

タスクマネージャー。
負荷確認に便利。
"LoadAverage(ロードアベレージ)について"
"load averageを見てシステムの負荷を確認する"

curl

HTTP接続できるか確認できる。
apacheの起動確認に便利。

which

起動するプログラムがどこのフォルダにある(PATHが通っている)かわかる。
シェルスクリプトの絶対パスを書くときに便利。

ip a

IPアドレスを調べたいときにifconfigと長く打たなくて済む。

yes

びっくりする。
CPUを1コア100%使用率にする

w

一文字でもコマンド。
誰がログインしてるかわかる。
LoadAverageも見れる。

追加

仮想デスクトップ切り替えのような#2

screen tmux byobu
現在の接続とは別に、別に新しく接続する。
"Linux screenコマンド使い方"
どれも画面を分割して使える

思い出したら追記していきます。

あとがき

-この記事の方針-
Linuxを知らず触り始めて間もない期間に、
皆さまが日常使っているキーボードの妙技を
知っていれば…という思いで記事(備忘)化を思い立ちました。

書いているうちに、具体的なコマンドやシステムも書きたくなりました。
LAMP環境を入れたり、ログを追って問題を解決したり、
目的に沿う作業や操作を覚えていくうえで、
topコマンドやsocketの概念、標準入出力の知識も、
初めからなんとなくでも知ってれば遠回りが減ったかなと思い、書き足しています。
また、始めたてでWindowsメインだった自分に伝えることを考え、ざっくりと書くつもりでした。(Aliasやなど知らない部分がたくさん教えていただいて助かります)
誤解を招く部分(/etcが/windows)もありますので、注釈は加えようと思います。
項目が正確・詳しくなると量が増え、他のコンテンツとあまり変わりがなくなると思いますので、
触り始めの2、3日から1、2週間に知りたかった内容に絞りたいと思っています。

以下の構成で各項を記述し、脱【学習メモ】できるよう修正していきたいと思っています。(別記事にするかもしれません)
1.具体的な内容(Tab補完、ll)
2.調べるキーワード(historyコマンド、エイリアス)
3.しくみ(bash-emacs、alias)