Linux  コマンド　自分用メモ　crossfish21

 ログアウト　　　exit

---

シャットダウン     shutdown -h now      shutdown -r now  (シャットダウン後再起動する)  
/sbin/shutdown   -h now  (shutdown -h nowでエラーになる場合はこれで) 

---
現在時刻を表示     date

---
画面に文字列や数値、変数を表示する    echo
[リンク](https://eng-entrance.com/linux-command-echo)

---
ログインシェルを確認する　　echo $SHELL

---
シェルを切り替える　　sh  bash  等

```
sh
でshシェルに切り替える

bash
でbashシェルに切り替える

切り替えるといっても一時的なので、多重にシェルを起動しているに過ぎない
抜ける場合はexitを起動した分だけ繰り返すこと

echo $SHELL　で現在のシェルを確認できる
```
---
画面表示をロックする　ctrl + s　　※ctrl + qで解除

---
画面表示のロックを解除する　ctrl + q

---
コマンドの強制終了　　ctrl + c

---
画面の表示をクリアする　ctrl + l　　clearでも同じ

---
環境変数の内容を表示する printenv
[リンク](http://www.atmarkit.co.jp/ait/articles/1801/11/news008.html)

---
ファイルの文字コードを指定して変換する　　iconv -f EUC-JP -t UTF-8 aaa.txt
[リンク](http://tech.nikkeibp.co.jp/it/article/COLUMN/20131209/523510/)
[リンク](http://www.atmarkit.co.jp/ait/articles/1609/12/news019.html)

---
カレントディレクトリを表示　　pwd

---
ディレクトリ内のファイルを表示する　　ls ls -laが使いやすい

```
ls       ファイルやフォルダを一覧表示


※引数
-a    すべて表示(隠しファイルも表示する)
-l    ファイルの詳細も表示する
-1    リストを縦に並べる
-r   逆順で表示する
-t   更新時間順に並べる
-S   ファイルサイズ順でソートする
-X   ファイルを拡張子ごとにまとめる
-R   ディレクトリ内容を再帰的に表示する
--full-time   タイムスタンプの詳細を表示する
-m   ファイル名をカンマで区切って表示する
-h   単位を読みやすい形式で表示する
-k   キロバイト単位で表示する
-i   ファイル名の左にi-node番号を表示する
-F   ファイル種別などの、情報の付加。"/"が付くのはディレクトリ、"*"が付くのは実行可能ファイル  "@"はシンボリックリンク
--help   ヘルプの表示

※他にもたくさんあり。第二リンクを参照



ls -la /var/log   ディレクトリを指定してファイル表示

ls -la ma*    "ma"で始まるファイルのみを表示
ls -la *.log    ".log"で終わるファイルのみを表示

ls -la last???     "last"で始まり、ファイル名が7文字のファイルを表示 "?"が1文字を示す
```
[リンク](https://eng-entrance.com/linux_command_ls)
[リンク](http://www.atmarkit.co.jp/ait/articles/1606/27/news018.html)

---
ディレクトリを作成する mkdir

```
mkdir crossfish      "crossfish"というディレクトリを作成する。所有者は作ったユーザになる

mkdir -p 111/222/333    複数階層のディレクトリを一気に作る。-pが無いとエラーになる

mkdir -m 777 work02     パーミッションを指定して作成

mkdir -v work     ディレクトリを作成したことを確認するメッセージを表示して作成。作成に失敗した場合もメッセージが表示される
```
[リンク](https://eng-entrance.com/linux-command-mkdir)

---
安全に新規ファイルを作成する touch

```
touch aaa.txt    aaa.txtというファイルが存在しない場合は、新規に作成する

※すでに同名のファイルが存在する場合は、そのファイルのタイムスタンプを現在時刻に変更するだけなので、viコマンドなどで新規作成するよりも安全

touch bbb.txt ccc.txt ddd.txt   などのように、複数ファイルを作成可能
```
[リンク](https://eng-entrance.com/linux-command-touch)

---
ファイルのタイムスタンプを変更する touch

```
touch aaa.txt     "aaa.txt"のタイムスタンプを現在時刻に設定。aaa.txtが存在しない場合は新規ファイルとして作成

touch ccc.txt -d "2015-9-21 12:12:12"     日時を指定する
touch aaa.txt bbb.txt ddd.txt -d "2015-9-21 12:12:12"      複数ファイルを変更可能

touch -r ccc.txt bbb.txt     bbb.txtのタイムスタンプを、ccc.txtに合わせる

touch -c aaa.txt   "aaa.txt"のタイムスタンプを現在時刻に設定。aaa.txtが存在しない場合は新規ファイルとして作成しない
```
[リンク](https://eng-entrance.com/linux-command-touch)

---
ファイルを削除する rm

```
rm aaa.txt      aaa.txtを削除

rm aaa.txt bbb.txt     複数削除

rm *.txt     ワイルドカード指定可能


※オプション

-f    エラーメッセージを表示しない
-i    ファイルの削除前に確認する
-l    削除の対象が４つ以上の場合のみ削除の確認をする
-r    ディレクトリも削除の対象とする
-v    削除の詳細表示
```
[リンク](https://eng-entrance.com/linux_command_rm)

---
空のディレクトリを削除する rmdir

```
rmdir work       workディレクトリを削除。空でない場合はエラー

rmdir -p 111/222/333      複数階層分のディレクトリを削除
rmdir 111/222/333    とした場合は、333のみ削除される
```

---
ファイルの内容を表示 cat

```
cat fileA      fileAの内容を表示する

cat fileA > fileB    fileAの内容をfileBに出力する(上書きになる)

cat fileA >> fileB   fileAの内容をfileBに追記する

cat fileC fileD　　fileCとfileDの内容を連結して表示する

cat -n fileB    行番号を表示

cat -b aaa.txt    空白行には行番号を入れずに表示。空白行を除いた行数を把握するのにいいかも
```
[リンク](https://eng-entrance.com/linux_command_cat)

---
ファイルの内容をスクロールできるように表示 less ※一番使う機会が多いだろう

```
less aaa.txt      aaa.txtの内容を出力

qキー              less終了
スペース・fキー    1画面分下にスクロール
bキー              1画面分上にスクロール
>キー              最終行に移動
<キー              先頭行に移動

表示中に"/"を押すと、検索モードに入る。検索文字を入力してEnterで、検索文字がハイライト表示になる
"n"で、次の検索候補へ。"N"で、前の検索候補へ


less -n aaa.txt     行番号表示

grep Connection secure-20180409 | less      grep検索の結果をlessで表示

他の機能はリンク先参照
```
[リンク](https://webkaru.net/linux/less-command/)
[リンク](https://qiita.com/ine1127/items/64b5b6cf52471c3fe59c)

---
ファイルのコピー cp

```
cp aaa.txt bbb.txt     aaa.txtを、bbb.txtとしてコピー

cp aaa.txt dir01    aaa.txtを、dir01にコピー

cp -i aaa.txt dir01     コピー前に確認する。cpコマンドは、既存のファイルを確認無しに上書きするので注意

cp aaa.txt ccc.txt dir01     複数ファイルコピー

cp *.txt dir01      ワイルドカード指定でコピーも可能

cp -r work work2    ディレクトリのコピー


※オプション

-a    元ファイルの属性とディレクトリの構成を保持してコピーする
-b    上書きされるファイルのバックアップを作成する
-d    シンボリックリンクをコピーする時は実体をコピーする
-f    コピー先に同じ名前のファイルがあっても警告なしで上書きをする
-i    上書きされるファイルがある場合、確認が入る
-l    ハードリンクを作成する
-P    ディレクトリをつけてコピーする
-p    元のファイルのオーナー、グループ、パーミション、タイムスタンプを保持
-r    ディレクトリごとコピーする（再帰的
-s    シンボリックリンクを作成する
-u    保存先が同じファイル名のファイルだったとき、タイムスタンプを確認して、新しいor同じだったときコピーしない
-v    コピーの詳細情報を表示
```
[リンク](https://eng-entrance.com/linux_command_cp)

---
ファイルの移動 mv ※ファイル名の変更にも使える

```
mv work/aaa.txt work2     work/aaa.txtをwork2に移動

mv aaa.txt bbb.txt    aaa.txtをbbb.txtにファイル名変更になる

mv work work2     workをwork2の下にディレクトリ移動。-rは不要

mv -i aaa.txt ccc.txt　　上書き前に確認する
```
[リンク](https://eng-entrance.com/linux_command_mv)

---
シンボリックリンクを作成する ln -s ※lnはハードリンクも作成できるが、あまり使わない

```
ln -s work/bbb.txt link.txt     work/bbb.txtへのシンボリックリンクを、link.txtという名前で作成する

lrwxrwxrwx 1 root   root   12 Apr 13 11:25 link.txt -> work/bbb.txt　　こういう感じになる


less link.txtとすると、work/bbb.txtの内容を表示することになる


cp -d link.txt link2.txt    シンボリックリンクのコピーは、必ず-dを付ける。つけないとリンク先の実体のコピーになってしまうこんな感じになる
lrwxrwxrwx 1 root   root   12 Apr 13 11:39 link2.txt -> work/bbb.txt
lrwxrwxrwx 1 root   root   12 Apr 13 11:25 link.txt -> work/bbb.txt


unlink link2.txt　　でリンク削除。rmコマンドでも可能だが、実体のほうを消す可能性があるので良くない
```
[リンク](https://eng-entrance.com/linux-command-ln)
[リンク](https://qiita.com/colorrabbit/items/2e99304bd92201261c60)
[リンク](http://www.atmarkit.co.jp/ait/articles/1605/30/news022.html)

---
ファイルを検索する　　find

```
find link.txt     カレントディレクトリにあるlink.txtを検索。存在しない場合はfind: ‘linka.txt’: No such file or directoryのように出る

find -name '*.log'    ファイル名を指定して検索。ファイル名は必ず''で囲む(""でも可)。でもエスケープできるが、あまり良くないかも。-nameは大文字小文字を区別する

find -iname '*.log'　　大文字小文字を区別しないで検索

find  /var/log -name 'boot.*'　　ディレクトリとファイル名指定で検索。ディレクトリ名は-nameの前であることに注意

find -type d     ディレクトリのみを検索
find -type f     ファイルのみを検索
find -type l     シンボリックリンクのみを検索

find -type f -a -name '*log'    -aで複数の条件のAND条件で指定。ファイルのみで、'*log'の名前を検索になる。-aは省略可能
```
[リンク](https://eng-entrance.com/linux-command-find)

---
ファイルやディレクトリを高速検索する    locate     ※データベースに登録されている情報を検索するので、
最新のファイルは検索ヒットしない可能性があることに注意

```
まず、locateコマンドが使えることを確認する

locate --version　　で確認
-bash: locate: command not found　　と出たら、yumでインストール

yum install -y mlocate

再度locate --version
This software is distributed under the GPL v.2.　　とか出ればOK

インストール直後は、ファイルパス一覧がデータベースに登録されていないので、データベースを作成する
updatedb  でアップデート実行。これでOK
アップデート後は、自動でupdatedbコマンドが実行されるので、OS任せでいいらしい。


locate bash    と入力してみる。findコマンドに比べて、高速で検索される
locate bash | less   という使い方もいいかも


※locateはデータベースに登録されたデータを検索するので、作成したばかりのファイルは検索でヒットしない。数日前以前に作成されたファイルを検索するのに向いている。
検索結果は、パスの全体が対象になるので、aaaで検索した場合はパスにaaaが含まれるものが全てヒットする



locate '*share*'　　ワイルドカード指定

locate -i AAA    大文字小文字を区別しない

locate -b bash    パス全体ではなく、ファイル名のみを検索対象にする


locate bash doc　　複数の検索条件を指定する。OR条件になる

locate -A bash doc    AND条件で、複数の検索条件を指定する
```
[リンク](https://eng-entrance.com/linux-command-locate)

---
マニュアルを表示する man man コマンド名で実行

```
man cp       cpコマンドについてのマニュアルを表示



man -k copy       "copy"というキーワードで、全てのマニュアルを検索して表示。以下のような出力がされる

btrfs-select-super (8) - overwrite primary superblock with a backup copy
cp (1)               - copy files and directories
cpio (1)             - copy files to and from archives
dd (1)               - convert and copy a file
File::Copy (3pm)     - Copy files or filehandles
git-checkout-index (1) - Copy files from the index to the working tree
install (1)          - copy files and set attributes
intltoolize (8)      - copy intltool related files to software package
mysqlhotcopy (1)     - a database backup program
objcopy (1)          - copy and translate object files
probe::vm.write_shared_copy (3stap) - Page copy for shared page write
rsync (1)            - a fast, versatile, remote (and local) file-copying tool
scp (1)              - secure copy (remote file copy program)
ssh-copy-id (1)      - use locally available keys to authorise logins on a remote machine
svnversion (1)       - Produce a compact version number for a working copy.
xfs_copy (8)         - copy the contents of an XFS filesystem
xfs_metadump (8)     - copy XFS filesystem metadata to a file
xfs_rtcp (8)         - XFS realtime copy command

やりたいことについて調べるにはいいかも




man cp   と実行すると、以下のような表示がされるが

CAT(1)                                                         User Commands                                                        CAT(1)

NAME
       cat - concatenate files and print on the standard output

SYNOPSIS
       cat [OPTION]... [FILE]...

DESCRIPTION
       Concatenate FILE(s), or standard input, to standard output.
       
       
この　CAT(1)　の(1)は、セクション番号。セクション番号を指定して表示するには、以下のようにする

man 1 cat     これでセクション1を指定して表示になる

セクション番号を指定しない場合は、番号が一番小さいものが表示される




コマンドのマニュアルがいくつあるかを確認するには、以下のようにする
man -wa cat

/usr/share/man/man1/mv.1.gz　　と表示されるが、catコマンドは1つだけのセクションということになる
```
[リンク](https://eng-entrance.com/linux-command-man)

---
ヘルプを表示する　help あんまり使わないかも　　manを使おう

[リンク](https://eng-entrance.com/linux-command-help)

---
コマンドのパスが通っているフルパスを取得する which コマンド名

```
which cat     catコマンドのパスを表示。パスが複数ある場合は、最優先のものが表示される。結果は以下
/usr/bin/cat


which -a mv　　とすると、mvコマンドの全てのパスを表示。aliasも表示する。結果は以下
alias mv='mv -i'
        /usr/bin/mv
```
[リンク](https://webkaru.net/linux/which-command/)

---
オプションの有効／無効を切り替える set ※設定可能なのは一部

```
set -o ignoreeof    で、ignoreeofオプションを有効にする(-oで有効なので、間違えないように)
これでctrl + d を実行しても、ログアウトしないようになる(ignoreeofはctrl + dでログアウトしないようにするオプション)


set +o ignoreeof    で、ctrl + dでログアウトするようになる


set     で、現在設定されている変数の一覧を表示させる


他のオプションについては、リンク先を参考に
```
[リンク](http://tech.nikkeibp.co.jp/it/article/COLUMN/20060227/230881/)
[リンク](https://orebibou.com/2015/12/bash%E3%81%AEset%E3%82%B3%E3%83%9E%E3%83%B3%E3%83%89%E3%81%A7%E8%A6%9A%E3%81%88%E3%81%A6%E3%81%8A%E3%81%8D%E3%81%9F%E3%81%84%E4%BD%BF%E3%81%84%E6%96%B99%E5%80%8B/)

---
オプションの有効／無効を切り替える shopt ※setよりもこちらが重要か。設定可能なのは一部

```
shopt -s autocd     で、autocdを有効にする

shopt -u autocd     で、autocdを無効にする


shopt    で、オプション一覧を表示・確認



以下、代表的なもの

cdspell    ディレクトリパスを少し間違った時に、自動で修正してくれる。※これは便利そう。cd /var/logg　と入力しても、/var/logに移動してくれる

autocd     ディレクトリ名のみを入力したとき、 cdの引数に指定されたものとして扱う

cdable_vars      cd への引数でディレクトリでないものは変数の名前とみなし、その変数の値をcdの引数として使う

dotglob　　　. (ドット) で始まるファイル名をワイルドカード(パス名展開)のマッチ対象に含める。明示的に .*  としなくても * だけで対象ファイルになる

globstar　　　** というワイルドカードが使われたとき、 該当ディレクトリ以下のサブディレクトリ、ファイル全てに再帰的にマッチする


※他にもあるので、よく調べよう
```
[リンク](https://orebibou.com/2017/04/shopt%E3%82%B3%E3%83%9E%E3%83%B3%E3%83%89%E3%81%A7%E8%A8%AD%E5%AE%9A%E3%81%A7%E3%81%8D%E3%82%8Bbash%E3%81%AE%E4%BE%BF%E5%88%A9%E8%A8%AD%E5%AE%9A%E3%81%BE%E3%81%A8%E3%82%81/)
[リンク](https://geek-techiela.blogspot.jp/2014/07/shoptbash.html)

---
ファイルに記載されているコマンドを実行する　　source ※設定ファイルの変更をすぐに反映させるために使われることが 多いが、本来は処理を記述したファイルを実行するためのもの

[リンク](https://eng-entrance.com/linux-command-source)
[リンク](https://qiita.com/YumaInaura/items/00437e6ab14d96adb71f)

---
環境変数やシェル変数を設定する　　export　　※あまりよく分かっていない。後でよく調べよう

[リンク](http://www.atmarkit.co.jp/ait/articles/1801/12/news015.html#opt)
[リンク](https://webkaru.net/linux/export-command/)

---
自分が所属しているグループを表示する　　groups

---
ユーザにsudoコマンドを使えるように設定する wheel ※wheel設定は、suコマンド、sudoコマンドを制限する ためのものらしい。wheelはグループ

```
usermod -G wheel user21   で、user21ユーザがsuコマンド、sudoコマンドを実行できるようになる


※wheelグループを設定すると、グループに入っているユーザはsuコマンド、sudoコマンドを使えるが、入っていないユーザはコマンドを使えなくなるらしいので注意。wheel設定は、suコマンド、sudoコマンドを制限するためのものか
```
[リンク](http://www.server-memo.net/centos-settings/system/su-setting.html)
[リンク](https://qiita.com/boscoworks/items/fe10f6c83dfafe68ca18)

---
現在稼動しているプロセスを確認する　　ps ※色々なオプションを付けて実行する。Linuxの動作が遅い時の原因を追究したり、 不要なアクセスを監視などに使える

```
※よく使うオプション付きのコマンドは、以下

ps aux    すべての種類のプロセスの知り得るだけの情報を表示
ps auxf   プロセスツリー形式で、すべての種類のプロセスの知り得るだけの情報を表示


とりあえず、ps auxfを使えばいいかな



オプションの種類

-A   全プロセスを表示
a   端末操作のプロセスを表示
x   端末操作以外のプロセスを表示
r   現在、実行しているプロセスを表示
c   実行しているコマンド名を表示
e   実行しているコマンド名と環境変数を表示
u   ＣＰＵやメモリの使用率なども表示
h   項目名を表示しない
l   プロセスの状態なども表示
f   プロセスを階層で表示
o   指定したリスト順の出力形式で表示

※他にもあり
```

---
コマンドの履歴を表示する　history less | history とするほうが見やすい

---
RPMパッケージの一覧を表示する　　rpm -qa

---
システムの負荷状況などをモニタリングする sar

```
※標準ではsarはインストールされていない

sudo yum install sysstat     でインストール


sar -u -o sar.txt 1 5   で、CPUの情報を1秒間隔で5回取得する。結果はsar.txtにも出力する
-oで出力するファイルを指定
1 5は、1秒間隔で5回という意味
パラメータはたくさんあるので調べて

※ファイル出力はバイナリ形式になっているので、stringsコマンドで確認しよう
```

---
バイナリファイルの内容を表示する strings

```
sar -u -o sardata 1 5    のように、sarコマンドで結果をファイルに出力すると、バイナリ形式になっている


strings sardata    で、バイナリファイルの内容を読込みできる


strings -f sardata　　　-fオプションで、各行の先頭にファイル名を付けることが可能

sardata: Linux
sardata: tk2-404-43387.vs.sakura.ne.jp
sardata: 3.10.0-693.21.1.el7.x86_64
のようになる



strings -10 sardata　　のようにすると、10バイト以上のデータのみを表示できる



strings sardata  | grep USB   このように、grep検索も可能
```

---
文字列の置換・削除

[リンク](https://eng-entrance.com/linux-shellscript-replacement)