Ubuntuサーバー第2章コマンドラインの基本

第2章コマンドラインの基本

説明してください、このメモは元氏のUbuntuServerの習熟度へのエントリから派生しています

エンタープライズLinuxServerの環境では、多くの場合、グラフィカル環境はなく、ターミナルウィンドウ(黒いコマンドラインと点滅するプロンプト)のみがあります。 Linuxの前身はUnixであり、Unixで多くの使用習慣を保持しているため、ほとんどのコマンドは、私がよく知っているCiscoルーターの最下層などの他のUNIXシステムにも適用できます。

最初にシェルについて理解しましょう。シェル自体はプログラムです。このプログラムは他のプログラムを実行できます。ドライバハードウェア(ドライバのロード)、プロセス管理、およびハードウェアリソースの割り当て(メモリ管理)はすべてカーネルによって実行されます。権限やセキュリティなどの問題により、カーネルを直接操作することは許可されていません。プログラミングを学んだ友人がいる場合、シェルの機能はコマンドインタープリターと非常に似ていることがわかります。基本的に、ユーザーがカーネルに入力したコマンドを解釈するために、シェルコマンドを使用してシェルスクリプトを作成することもできます。

シェルにはさまざまな種類があり、最も一般的に使用されるのはbash(Ubuntuのデフォルトシェル)と、セキュリティ業界のWebシェルおよびSQLシェルです。bashの前身は、Bell LabsがUNIXの開発に使用するBourneシェルです。**一般端末(シェル)プロンプトの形式は「User @ Hostname:〜」です。「****」は、ユーザーのホームディレクトリと非ルートアカウントを意味します。その場合、「〜#」は、ユーザーがディレクトリおよびルートアカウントと呼ばれることを意味します。 ****

基本的なシェルコマンド

 cat #複数のファイルの内容を組み合わせる
 echo a>a & echo b>b #完全にゼロベースの友達の場合は、理解する必要はありません。フォローするだけです。
 cat a b #同時に表示されたaとbが見つかりました
 cat a #のみ
 cat #カーソルが点滅し、何が入力され、何が返されるか

上記の実験から、コンセプト、入力と出力を描画できます。catはプログラムであり、catにコンテンツを入力し、出力結果を取得します。実際、コンピューターは本質的に、ユーザーの入力に基づいてユーザーに計算して解釈するマシンです。コンピュータプログラムも同様のことを行っています。プログラムが実行するメモリを呼び出した後、人間または他のプログラム入力を受け入れる必要があります。プログラムの実行後、プロセスと呼ばれます。Linuxには各プロセスの入力が備わっています。ストリームと出力ストリーム。入力と出力は、ファイル、デバイス、端末、または別のプロセスのI / Oである可能性があることに注意してください。Linuxは、デフォルトの入力と出力を** stdin / stdout と呼ばれる各プロセスに割り当てます。たとえば、上記で使用したcatコマンドのstdin / stdoutはすべて端末です。上記の2つの標準ストリームに加えて、3番目の標準ストリーム stderr **(エラー出力)があります。stderrは、プロセスでエラーが発生したときに使用されます。 2つのショートカットキー:

ls #ディレクトリの内容を一覧表示します。指定したディレクトリには、指定したディレクトリの内容が表示されます。通常、ディレクトリ、ファイル、リンクの表示のテキストの色は異なります。Linuxは大文字と小文字が区別されることに注意してください。Winの下の大文字のファイル名と小文字のファイル名は、以下の同じディレクトリです。このコマンドの一部のパラメーターは、意図的に記憶する必要はなく、慣れるために継続的に使用する必要があります。加えて"ll == ls -la",他のディストリビューションはそうではないかもしれません
- l #詳細なコンテンツを表示する(許可、inode番号、所有者、グループ、サイズ、変更時間mtime)
- a #すべての非表示コンテンツを含め、Linuxでのファイル名はで始まります"."ファイル使用の始まり"ls"表示できません
- d #ディレクトリ自体に関する情報のみを表示します
- i #inode情報を表示する
- S #ファイルサイズで並べ替え
- r #逆順
- t #変更時間で並べ替え
- h #読みやすい方法で表示する
drwxr-xr-x  2 xiaowu xiaowu 4.0K Apr 2420:09  Test #コンテンツの行を説明する
" d"ファイルタイプはディレクトリです"rwx"所有者権限は、読み取り、書き込み、および実行が可能です"r-x"グループの権限は読み取り可能で実行可能です"r-x"ハードリンクまたはサブディレクトリの2番目のリストにある他のユーザーが読み取り可能で実行可能なファイル"xiaowu"部下と"xiaowu"4kサイズ"Apr 24 20:09"時間を変更する"Test"ファイル名

これがinode番号の説明です。ファイルはハードディスクに保存されます。ハードディスクの最小単位は「セクター」と呼ばれます。各セクターは512バイト(0.5KB)を格納します。複数のセクターは「ブロック」(共通ファイルアクセスの最小単位である4K)です。オペレーティングシステムがハードディスクを読み取るとき、効率を上げるために、一度に1ブロックずつ連続して読み取ります。ファイルデータは「ブロック」に格納されます。ファイルのメタ情報(ファイル作成者、作成日など)はinodeに格納されます。各inodeは番号に対応します。オペレーティングシステムは、異なるinodeを識別することによってファイルを識別します。ファイルを読み取るとき、最初にinodeに従ってinode情報を検索し、inode情報から「ブロック」を検索します。データを読み取ります。

cp #コピー
cp file1 file2 #file1を新しい名前file2にコピーします。パラメーターは完全な相対パスと絶対パスにすることができ、複数のファイルをディレクトリにコピーできます。
- R/r #ディレクトリとそのすべての内容をコピーします
- L #ハードリンクコピー,このオプションを使用すると、新しいファイルのinode番号は古いファイルと同じになります。
- s #ソフトリンクコピー。このオプションを使用して、新しいファイルをソースファイルにリンクします。
- S #ターゲット名にサフィックスを追加します
- u #ソースがターゲットよりも新しい場合にのみコピーします

これを学んだ後は少しめまいがするかもしれません。コマンドの最初の文字しか覚えていない場合は、「TAB」を使用して自動完了します。

mv #移動、mvは少し似ていますが、cpを別のパスに移動した後、ソースファイルを削除した場合の効果はmvと同じです。
mv file1 file2 #同じディレクトリの下にある場合、効果は名前を変更することです
mv file1 file2 /dir #複数のファイルを同じディレクトリに移動する
"- f" #強制移動、カバーターゲット

touch file#空のファイルを作成します。ファイル名がすでに存在する場合は、コンテンツを変更せずにファイルをmtimeで変更します。

rm filename #削除
- rf #強制と再帰
- i #削除する前のリマインダー
- d #空のディレクトリを削除する
すべての悪の源を紹介する"rm -rf /"

echo #コマンドパラメータをstdoutに表示(標準出力),出力したい場合"""シンボル、追加してください"\"脱出する
\ n #ニューライン,ここにいくつかの他のエスケープキャラクターがあります、あなた自身で理解してください
- nディスプレイの最後に改行はありません
- eバックスラッシュ文字を解釈する
echo $USER #Echoは、環境変数の値を取得できます。"$"後でもっと使うことができます

ディレクトリ構造コマンド

Linuxのディレクトリ構造は、下から上にドライブ文字(異なるパーティション)で終わるWindowsのディレクトリ構造とは大きく異なります。 Linuxのディレクトリは、パーティションよりも大きくなっています。

実験棟の自宅から写真を借りるこの写真はとてもシンプルでクリアです。また、自宅のコースを使って学習することをお勧めします。

tree / #treeコマンドは、ディレクトリ構造を直感的に表示できます

FHS(File System Hierarchy Standard)は標準であり、さまざまなディストリビューションがこの標準に準拠しているため、Unixのようなシステムを使用した経験が似ています。ここでは、相対パスと絶対パスの2つの概念を紹介する必要があります。

pwd #pwdは現在のディレクトリを表示できます
- P物理パス#ソフトリンクディレクトリにいる場合、このパラメータを使用すると、リンクの実際の場所が直接表示されます
- L論理パス#表示はパラメータなしと同じです
cd ../ #これとディレクトリのコンピュータディレクトリを入力してください,相対パス、"."ディレクトリ内の現在のディレクトリを表します。".."ディレクトリ内の上位レベルのディレクトリを表します
cd /home/xiaowu/ #ルートから(/)指定されたディレクトリ、絶対パスの入力を開始します
mkdir filename #ディレクトリを作成し、パスを指定できます"-p"マルチレベルのディレクトリを作成できます

rmdir #空のディレクトリを削除し、"-p"複数のディレクトリを削除できます

echo * #"*"任意の文字列、特殊文のワイルドカードに一致します。これはワイルドカードです。通常と連絡を取っている友人は、区別してください。テキストツール(awk、sed)では通常と呼ばれます。
ls a* #現在のディレクトリに一致"a"最初のファイルとフォルダ

grep #grepはテキスト検索ツールであり、入力ストリームから正規の式を検索し、結果を標準出力に出力します。
- i #ケースを無視する
- v #リバースマッチ
- n #行番号を表示
- r #再帰ディレクトリとサブディレクトリ内のすべてのファイル
- c #入力ストリーム内のキーワードを含む行数を表示します
grep xiaowu -n /etc/passwd #検索"/etc/passwd"ファイルに含まれる"xiaowu"そして行数を表示します
grep -f a.txt b.txt #a.txt内の複数のキーワードが同時に一致する
grep a[123] a.txt #マッチング結果はa1、a2、a3 ...になります。
grep -E '1|2|3' a.txt #マッチング結果は1または2または3です
more filename #一度に1ページを表示し、スペースバーを使用してページをめくります
less filename #文字通り少し少なく翻訳されていますが、それはmoreの拡張バージョンです。catとの違いは、一度に1ページのコンテンツを表示することです。
v #編集モードに入ると、ターミナルの下にショートカットキーの説明があります
Z/B #フォワード/ページ後方
g/G #最初の行に直接ジャンプします/最後の行(または行n)/word #前方キーワードを検索
? word #キーワードを逆方向に検索
n/N #ポジティブ/逆検索キーワード。このキーは前のコマンドと組み合わせて使用されます
q #脱落
grep root /etc/passwd | less #パイプキャラクターと組み合わせて使用できます

head -n filename #デフォルトでファイルの最初の10行を表示します。これは、指定できます。
tail -n filename #デフォルトでは、ファイルの最後の10行の内容を表示します。これは、パラメーターを指定できます。"-f"コンテンツをリアルタイムで表示=='tailf'

以前に多くのコマンドツールが導入されました。Linuxにはファイルとプロセスの2種類のオブジェクトしかないと言いました。また、プロセスは動作中のファイルであり、実際には1つのオブジェクト、つまりファイルしかありません。そして、これはLinuxでは「すべてがファイルです」です。

diff filea fileb #diffはテキスト比較ツールであり、構成ファイルを比較するときに非常に便利です。注意してください:フォルダに使用できます,同じファイル名のファイルのみを比較する
diff 1.txt 2.txt #例、使用"-u"同じ形式で出力されるパラメータ、使用"-y"パラメータを並べて出力し、協力します"-W"幅とプラスを指定します"-w"スペースを無視し、"-i"ケースを無視する
1 c1
< aaaaaaa
- - - > aaaaaab
"1 c1"手段"c-change:異なるコンテンツ";そしてまた"d-ファイル2よりもファイル1を削除する";"a-ファイルを2つ追加します"

これはファイル形式を表示するためのツールです。Windowsに精通している友人は、Windowsがファイル形式を区別するためにファイル名サフィックスを使用することを知っています。ファイルサフィックスが変更されると、元の機能を実行できなくなります。 Linuxは「file」を使用してファイル形式を識別します。ファイルのヘッダーにある特別な識別子を識別することでテストセットと一致します。結果が一致すると、実行を停止して結果を返します。テストセットは次のとおりです。

file filename #ファイルまたはファイルのリストにすることができます
- b #ファイル名ではなく、要約情報を表示する
- i #mimeタイプ
stat filename #ファイルの時間属性を表示する

Linuxにはたくさんのファイルがあり、必要なファイルを見つけるのは問題です。 Linuxは、クイック検索用のツールを提供します

locate filename #非常に高速で不正確(データベースはファイルインデックスに基づいて定期的に生成されます。検索プロセスはデータベースを取得して使用することだけです。"sudo updatedb"インデックスを更新)
find filename #デフォルトの検索範囲は現在のディレクトリです。アクセス許可に注意してください。ファイル名にはワイルドカードを使用できます
sudo find /-type f -user username -mtime +1-mtime -20-name 1.txt #パラメータは個別に使用でき、タイプを指定できます"b"(ブロックファイル)、d(ディレクトリ)、c(文字パイプファイル))、P(パイプファイル)、L(シンボリックリンクファイル)、ユーザーの指定、mtime時間の指定なども可能です。

sort filename #コンテンツを並べ替えます。デフォルトでは最初の文字が並べ替えられます。通常、テキストファイルは使いやすいです。
- r #方向で並べ替え
-N#数値でソート
- M#月で並べ替え
ls -l --sort='size|time|extension' #"ls"コマンドも並べ替えることができます

ショートカットキーとVIテキスト編集

win10と同様に、ショートカットキーをうまく使用すると、作業効率が向上します。一般的に使用されるショートカットキーを次に示します。これらのショートカットキーは、コマンドラインで一般的に使用されるだけでなく、SSH端末(Xshellなど)を使用するときにもよく使用されます。

Linuxのすべてのオブジェクトはファイルであり、さまざまなサービスの構成はファイルに基づいているため、便利なテキストエディターが非常に必要です。Commonvi(vimはその拡張バージョンです)、nao、Emacs ...、Yuan氏は言いませんでしたvimやEmacなどの「編集者の神」には優越感があります。道具にとらわれるのではなく、道具は人に役立つので、自分の習慣に従ってください。 vimを使用する一般的な方法は次のとおりです

vimtutor #viを直接入力して、viのチュートリアルに入ります。表示することをお勧めします
vi filename.txt #ファイルが存在する場合はファイルを開いて編集を開始し、存在しない場合は新しいファイルを作成します
# viには、一般的に使用される3つのモードがあります。
# 一般コマンドモード:ESCを押して編集モードから入ります
# コマンドモード:一般コマンドモードから押す":"入力すると、ターミナルラインの最後に入力ボックスが表示されます。ESCを押して通常モードに戻ります。
# 編集モード:一般的なコマンドモードでは、i(カーソルの前に挿入)、a(カーソルの後に挿入)、o(次の行を挿入して編集)を押します。
# K、J、H、Lを使用してカーソルを移動します(上、下、左、右),キーパッドの矢印キーも使用できます

viの機能ボタンは初心者には少し複雑ですが、使い続けて、忘れてしまったコマンドがないかマニュアルを確認するだけで、だんだん快適になっていきます。

# の他に"i、a、o"、一般的なコマンドモードにはこれらのコマンドがあります
# A:行の最後にテキストIを追加します:行の先頭にテキストOを追加します。前の行に空白行を挿入して編集します
# D:行ddの終わりまでカーソルを削除します:カーソルがnddである行の内容を削除します:カーソル位置(行を含む)からn行を削除しますnyy:カーソルがある行からn行をコピーします
# p:ペースト
# " Ctrl + f":ページ後方"Ctrl+B":ページ転送
# コマンドモードの場合
# /str:文字列を前方に検索しますか? str:文字列setnuを逆方向に検索します(number):行番号wqを表示:保存して終了
# setnonu(nonumber):行番号qを表示しない!:fを保存せずに強制終了:現在のファイル名を表示
# n:n行目にジャンプします(サービスを頻繁に開始すると、ファイルの最初の数行でエラーが発生するため、この行に直接ジャンプしてエラーを確認してください)$:最後の行の先頭にカーソルを移動します
# 1, $s/A/B :Aを最初の行から最後の行に置き換えてBnファイル名にします:次のファイルを編集する(最初に変更を保存する必要があります)

助けを得ます ##

上記の操作について説明しました。マニュアルを確認してください。コマンドを思い出せませんが、ドキュメントからコマンドを見つける方法を知っておく必要があります。作業プロセス全体でマニュアルを確認すると恥ずかしいことです。ヘルプマニュアルを一般的に理解すると、より効率的に検索できます。 Linuxには、従来、完全なドキュメントシステムがあります。マニュアルがメインのヘルプマニュアルです。「man + command」を使用して、対応するコマンドヘルプを表示できます。

man -k keyword #検索キーワード,このキーワードを含むドキュメントを検索する
man {1~8} command
マニュアルを見ると、左上隅にインデックス番号があり、各インデックス番号(1~8)、これはマニュアルの一種を表します。一部のコマンドにはインデックス番号の一部しかない場合があることに注意してください。インデックス番号の意味を以下に説明します。
1 :ユーザーコマンド2:システム呼び出し3:高度なUnixプログラミングライブラリドキュメント(開発者が一般的に使用)4:デバイスインターフェイスとドライバー情報(めったに使用されない)
5 :ファイルの説明(システム構成ファイル)6:Games 7:ファイル形式,規則、エンコーディング(ASCII、UTF8など)8:システムコマンドとサーバー

LInuxカーネルの開発者であるGNU(Own Software Foundation)は、別のヘルプマニュアル「info」をリリースしました。

info command #マンマニュアルに必要な情報が見つからない場合は、試してみてください"info"入手します
多くのソフトウェアには公式のマンマニュアルがなく、開発者はユーザーにガイダンスを提供するためにソフトウェアパッケージにREADMEファイルを残すことがよくあります。

以前に何度も示した「-h / -help」も頻繁に使用されるヘルプコマンドです。結局、ヘルプが見つからないため、検索エンジンを選択することをお勧めします。

シェルの入力と出力

以前、「基本的なシェルコマンド」の章で、シェルの入力ストリーム、出力ストリーム、および出力エラーストリームの概念を簡単に紹介しました。ほとんどのプロセスのデフォルトの入力はファイルまたは端末です。デフォルトという言葉を使用したことに注意してください。変更できるという意味ですか?答えはイエスです、これが私が紹介したいことです。入力ストリーム、出力ストリーム、およびエラー出力ストリームのファイル記述子は、0、1、および2です。ファイル記述子は、LInuxカーネルによって定義された開いたファイルによって作成されたインデックスです。まだこの説明を理解していない可能性があります。次の例を見てください。アップ。

"|"、">"、">>"、"<" # パイプとリダイレクトシンボルを使用する
ifconfig | grep "inet" #意志"ifconfig"コマンドの出力は次のとおりです。"grep "inet" "の入力
ls >file #lsの出力をファイルファイルにリダイレクトします。"set -c"ファイルの上書きリダイレクトの上書きを禁止できます
ls >>file #lsの出力をリダイレクトしてファイルに追加します
ls <1.txt #1を作る.txtファイルの内容"ls"コマンド入力
ls osjdijf >stdout 2>stderr #標準出力"stdout &quot;エラー出力はに出力されます"stderr"
DocKerサービスを使用する友人は、このようなワンクリックコードをよく目にします
" sudo mkdir -p /etc/docker
sudo tee /etc/docker/daemon.json <<-'EOF'{"registry-mirrors":["https://15a26sup.mirror.aliyuncs.com"]}
EOF
sudo systemctl daemon-reload
sudo systemctl restart docke"
このコードで使用されているEOFは、カスタムターミネータです。カスタマイズできることに注意してください。リダイレクトと組み合わせたスクリプトで非常に簡単に使用できます。

コマンドを使用するとエラーが発生することがよくあります。一般的なエラーは次のように説明されます。

パイプ文字は前のコマンドで使用され、いくつかの注記はまたはの関係を示しています。特別な機能を持つシェルコマンドで一般的に使用されるいくつかの記号を次に示します。パイプ文字とパイプは異なる概念であることに注意してください

プロセス管理

プロセスは実行中のファイルです。「ps」を使用してパラメータなしで実行します。結果にはデフォルトで4列の情報が表示されます。異なるプロセスを区別するために、プロセスにはPIDであるIDが割り当てられます。時間は、プロセスが実行されている時間です。最後に、表示名COMMAND.Linuxは、複数の端末で同時に使用されることが多く、TTYはそれがどの端末であるかを示します。プロセスにはさまざまな状態があり、一般的なものは「R」(実行可能)、「S」(スリープ)などです。

ps #現在のプロセスのステータスを表示するために使用されます。多くのパラメータがありますが、今回は一般的に使用される値を紹介します
- x #現在のユーザーが開始したプロセス
- ax #すべてのユーザープロセス
- u #一般的に使用される「ps」の詳細情報を表示します-aux"または"ps u pid"で使用するため
- w #プロセスファイルの完全なパスを表示します
Linuxの初期プロセスはPID0です,その場合、親プロセスと親プロセスの間の構造的関係は、ツリー構造に似ています。,使用する"ps fajx"または"pstree"この構造を見ることができます
kill pid #キルプロセス
kill -STOP pid #プロセスを一時停止します
kill -CONT pid #プロセスを続行します
kil -l #たとえば、信号名です。ここには番号がありません。信号名と信号で表される番号は互いに対応しています。"kill -9 pid"無条件にプロセスを終了するには

アーカイブのパッケージ化と圧縮

winrarや7zip(Linuxバージョン)などの便利なパッケージツールがWindowsでよく使用されますが、Linuxでも同様のパッケージプログラムがあります。

Linuxの標準圧縮プログラムはgzipファイル(gunzip解凍)であり、単一のファイルのみを解凍できます。複数のファイルに最も一般的に使用されるのは"tar"コマンド
tar zcvf file.tar.gz  file1  file2 #"z":gzip圧縮cを呼び出す":アーカイブを作成する"v":詳細な診断出力"f":ファイルパッケージ名
tar zxvf file.tar.gz #解凍します。ファイル名は簡単に識別できるようにするためのものです。
tar tvf file.tat.gz #減圧をテストする
tar jcvf file.bz2 file1 #bzip圧縮を呼び出します。bzipはテキスト圧縮通貨gzipに対して高い圧縮率を持っています

先ほど、パーミッションの問題が発生したときに「sudo」を使用すると言いましたが、LInuxで最高のパーミッションである「sudo」の役割はrootです。Ubuntuリリースでは、セキュリティ上の理由から通常のユーザーを作成し、実行する必要があります。重要な操作は、「sudo」を使用して、ユーザーが「root」として実行できるようにすることです。

cat /etc/group |grep $USER 
# それらの中の一つ"sudo"使用できることを定義するのに役立ちます"sudo"コマンドユーザー
# インストール後にシステムにsudo権限を付与する必要がある場合
sudo vim /etc/sudoers #構成ファイルを変更します。これは1つの方法です
sudo adduser username
sudo usermod -aG sudo username #コマンドを使用して、これをお勧めします

結局、ハンドノックアウトを注文しました。5月1日の休暇中にこのメモをノックアウトしました。当初はいつか書き出す予定でした。自分自身を過大評価していました。安全を勉強しているすべての友人にこのプロセスを楽しんでもらいたいと思います。

参照リンク

エントリーからマスターまでのUbuntuサーバー

ストリーム、パイプ、およびリダイレクト

Linuxの4つの主要部分:カーネル、シェル、ファイル構造、およびユーティリティ

Linuxのinodeを本当に理解していますか?

inodeを理解する-RuanYifeng

Linuxのワイルドカードと正規表現

Recommended Posts

Ubuntuサーバー第2章コマンドラインの基本
ubuntuコマンドライン検索
Ubuntuコマンドラインは中国語を表示します
Ubuntuサーバー第8章DNSサービス
Ubuntuサーバー第3章パッケージ管理
Ubuntuサーバー第7章リモート管理
コマンドラインを使用して、Ubuntuバージョンメソッドを検出します
Ubuntu16.04の一般的なコマンドノート
ubuntuインストールnginxサーバー
ubuntuの下にFTPサーバーをデプロイします
[Linux] Sambaサーバーのビルド(ubuntu16.04)
Ubuntu Server14.04にOpenSSL1.0.2をインストールします
ubuntu16.04ビルドpptpdV **サーバー
サーバーアップグレードUbuntu20.04LTSレコード
Ubuntu12.04クロスコンパイルサーバーを構築する
サーバーアップグレードUbuntu20.04LTSレコード
UbuntuサーバーはJavaWebサーバーを構築します
Ubuntuはsquidプロキシサーバーを展開します
Ubuntu16.04サーバーの初期設定
Ubuntu16.04ビルドGitLabサーバーチュートリアル