A Linux Command - user000422/0 GitHub Wiki

どんなにベテランになってもコマンド1つ1つ見直して実行する癖は忘れないこと

WinSCPなどのGUIツールで処理を行わないこと(作成や削除)

キー 意味
vi コマンド履歴確認
esc ディレクトリ名候補表示(入力途中でも可能)
pwd 今自分がいる階層を表示
ディレクトリ 説明
/home/sample_user ユーザ用ディレクトリ 作業用などに使用
/usr/local システム管理者用ライブラリ

■システム

# ssh接続
ssh [email protected] # rootユーザで接続

# ユーザ切り替え
su - oracle # Oracleユーザに切り替え
sudo su # rootユーザに切り替え(パスワードは現在ユーザのパスワードでよい)
sudo vi sample.txt # rootユーザでコマンド実行

# 現在のユーザ名
whoami

# 自身以外のユーザでコマンド実行
sudo -u sample_user cd /tmp

# OSバージョン確認(Redhat)
cat /etc/redhat-release

# OSビット確認
getconf LONG_BIT

# コマンド履歴
history
history > /tmp/sample.txt # 結果をファイルに出力

# ログイン履歴
last # RHEL

# 環境変数設定ファイル確認
cat ~/.bash_profile

# OS bit確認
getconf LONG_BIT

# ユーザ一覧確認 ※スペルは「passwd」で合っている
cat /etc/passwd

# ユーザ追加
useradd -u 200 sampleuser              # -u UIDを指定
useradd -g samplegroup sampleuser      # -g グループを指定
useradd -d /home/sampleuser sampleuser # -u UIDを指定
useradd -m -d /home/sampleuser -g samplegroup sampleuser # ホームディレクトリ指定 + グループ指定
# UIDを変更
usermod -u 999 sampleuser

# グループ 追加
groupadd samplegroup

# shell
sh sample.sh # シェル実行
sh sample.sh 2021 # 引数を指定し、シェル実行

# メモリ キャッシュクリア
sync; echo 1 > /proc/sys/vm/drop_caches # ページキャッシュのみ
sync; echo 3 > /proc/sys/vm/drop_caches # ページキャッシュとdentry、inodes

# 再起動(RHEL)
reboot

# ポート疎通確認(Linux → Linux)ポート番号 ポート
nc -v -w 1 10.10.10.10 -z 80

■ファイル ディレクトリ操作

# ls(list segments)ファイル、ディレクトリの情報表示
ls # 現在いるディレクトリのファイル、フォルダを表示
ls /home # 指定ディレクトリのファイル、フォルダを表示

ls *sample.txt # ファイル名条件指定
ls -l # 詳細表示
ls -t # 更新時間順に並べる
ls -tl # 更新時間順に詳細表示し並べる
ls -I "*sample.txt" # 特定のファイルを除外

ll # 「ls -l」の省略記述

# cd(change directory)ディレクトリ移動
cd /work/2021/ # ディレクトリ移動
cd / # ルートディレクトリへ移動
cd .. # 1つ上のディレクトリへ移動

# cat(concatenate) ファイル閲覧
cat sample.txt # ファイル内容を出力(閲覧)
cat sample.txt | grep 'word' # 応用 grepと組み合わせ

# touch ファイル作成
touch sample.txt
touch -d "2023-01-01 23:59" sample.txt # -d タイムスタンプ変更

# cp コピー
# rとRは同じ
cp sample.txt newdir
cp sample/sample.txt . # 現在位置にコピー
cp -f sample.txt newdir # -f 上書きを常に許可 ※-fが機能しないシステムも存在する
cp -r sampleDir newDir # -r ディレクトリごとコピー
cp -p sample/sample.txt newdir # -p ディレクトリ構造ごとコピー(パーミッション属性保持)
cp -rp sample/sample.txt newdir # rとp

# mv(move)ファイルやディレクトリ移動
mv fromDir/sample.txt toDir/sample.txt

# rm ファイル削除
# 「r」オプションが本当に必要か考えること ディレクトリ対象のオプションですよ!
rm -i sample.txt # 確認して削除
rm -f sample.txt # 強制削除
rm -r /sample    # ディレクトリごと削除

# mkdir ディレクトリ作成
mkdir /tmp/sample
mkdir -p /tmp/sample # -p 必要に応じて親ディレクトリも作成
mkdir -m 777 /tmp/sample # パーミッション指定(基本型)
mkdir -m 777 `date '+%Y%m%d'`sample # dateコマンドで日付利用したディレクトリを作成

# find ファイル検索
find /home/abc.dat # ディレクトリを指定しファイルを検索
find -name "*abc.dat" # ワイルドカードを使用し、ファイル名で検索
find -name "*.dat" -o -name "*.sh" # or検索
find /home -type l # type l ディレクトリ配下のシンボリックリンクを検索
# 実践(なんか↑の全部変じゃない?)
find /home -name 'sample.php' # /home配下でファイルを検索

# grep 文字列検索
grep -r sampleword sampleDir # rオプション ディレクトリ内のファイルも検索(なければディレクトリ内を検索できない)
grep -r --include='*.php' sampleword sampleDir # include 検索対象の拡張子を指定
grep -r --exclude='*.html' sampleword sampleDir # exclude 指定拡張子のファイルを検索対象から除外
grep -r --exclude='*.html' --exclude='*.css' sampleword sampleDir # exclude 指定拡張子のファイルを検索対象から除外(複数)
grep -n sampleword sampleDir # nオプション 行番号を表示

# tail ファイル内末尾閲覧
tail sample.txt
tail -n 10 sample.txt # -n 指定行数末尾から閲覧
tail -f sample.txt # -f ファイル終端監視(ctrl + nで抜けるまで監視)

# zip
# 出力先はカレントディレクトリ(第1引数にパスを指定することで出力先を変更)
zip -r sample.zip sampleDir # r 再帰(ディレクトリの中のディレクトリやファイルも対象にする)

# unzip zipファイルを展開
unzip sample.zip # カレントディレクトリに展開
unzip sample.zip -d targetDir # -d 指定ディレクトリに展開

# du ディスク使用率(ファイルサイズ)
du -sh sampleDir # ディレクトリのサイズ確認
du -sh sampleDir/* # ディレクトリ配下のサイズ確認
du -shm sampleDir # m 結果の表示を(MB)単位に

# df ディスク使用率
df -h sampleDir # ディレクトリのディスク使用率を確認

# sed ファイル内文字操作
# -i ファイルを上書き
sed -i 's/RED/BLUE/g' sample.txt # ファイル内(文字置換 例では「RED」を「BLUE」に置換)
sed -i -e 's/RED/BLUE/g' sample.txt # ファイル内 文字置換
sed -i '$asample_word' sample.txt # ファイル内 行末に追記($aの後ろに追記する文字)

# tree
tree -d -L 2 /sample # 指定ディレクトリを2階層目まで表示

# diff xxx
diff sample.txt after.txt # ファイル内容の差分を確認
diff -s sample.txt after.txt # ファイル内容の差分を確認し一致していたら「同一」と表示

# rsync
# リモートとローカルのファイルとディレクトリの同期
rsync -avz /home/from_dir /home/to_dir # ローカル同期(差分のみ同期できるためcpと差別化

# curl
# POST(FORM送信)
curl -X POST http://sample.jp/users -d 'username=test&age=18'
# ファイルのダウンロード
curl -OL http://sample/sample.zip
# tar
# `v`オプション(メッセージ表示)は必須<br>
# オプションコマンド先頭のハイフンは省略可(タイプ数減少目的に省略推奨)<br>
# ※オプション`-c`と`-C`は意味が違う
# アーカイブ作成(基本型)
tar cvf sample.tar sample.txt # 1つ目がtarファイル、2つ目がアーカイブする対象ファイル
tar cvf sample.tar /tmp sample # tmp下のsampleフォルダごとアーカイブ
# 実務実績有り まとめてアーカイブ作成(「/tmp/sample_1 配下」と「/tmp/sample_2 配下」)
tar -czvf sample.tgz /tmp/sample_1 p/sample_2

# x 展開
# f 展開するファイルを指定
tar xvf /tmp/sample.tar
tar xvzf /tmp/sample.tar.gz -C /tmp/targetDir # -C 指定ディレクトリに展開
tar xvzf /tmp/sample.tgz -C /tmp/targetDir # -C 指定ディレクトリに展開
tar xzf /tmp/sample.tar.gz # tar.gzの展開

# gzip(.gzを扱う)
# -d 展開
gzip -d /tmp/sample.gz

■権限

# chmod 権限変更
chmod 777 sample.txt # 777(パーミッション)
chmod -R 777 /tmo # ディレクトリ配下を全て変更

# chown 権限所持者変更
chown sampleuser /tmp/sample.txt
chown -R sampleuser /tmp # -R ディレクトリ配下すべて変更

# chgrp 権限所持グループ変更
chgrp samplegroup /tmp/sample.txt

# 所有者、グループ 同時に変更
chown sample_user:sample_group /tmp/sample.txt

■シンボリックリンク

ln -s targetDir sampleLink # -s シンボリックリンク作成
unlink sampleLink # 削除(参照先は削除しない)

■リダイレクト

ls > sample_log.txt #ファイルに出力
ls >> sample_log.txt #上書きせずに追加

vi … Linuxテキストエディタ

# ----- 通常モード
:q! # 変更を保存せず終了
:wq # ファイルを保存し終了
i # 文字入力モード開始
o #(小文字)現在行の次の行で文字入力モード開始
O #(大文字)現在行の前の行で文字入力モード開始
dd # カーソルのある行を削除
[esc]キー # 文字入力モード終了
1G # ジャンプ機能([任意の数字]+G)

# 文字入力モード

cron ログファイル /var/log/cron ユーザによってcronは異なる

crontab -l # 確認
crontab -e # 編集
crontab -e -u sample_user # 編集 ユーザを指定

# cron
* * * * * sample.sh    # 1分ごとに実行
*/10 * * * * sample.sh # 10分ごとに実行

mount

mount -a # /etc/fstab の全てをマウントする

openssl … xxx

# 秘密鍵
openssl genrsa -out private.pem 2048

■RHEL

# yum
yum install sample    # インストール
yum -y install sample # インストール -y すべて「Yes」
yum search sample # パッケージ検索
yum list installed # インストール済みパッケージ一覧表示
yum list installed | grep sample # インストール済みパッケージ一覧表示 応用

yum deplist zip # deplist パッケージの依存関係一覧を表示

応用

# 特定の拡張子以外のファイルに対してgrep(find + grep)
find targetDir -type f ! -name "*.log" -exec grep -Hn "sample_word" {} \;

■ディレクトリ構成、ファイル一覧を取得し出力

find /target_dir | sort > /tmp/result.txt # こっちのほうがいい 名前順にソート
find /target_dir -print > /tmp/result.txt

■ブラウザからhttpsで接続できない ローカル(サーバ自身)から接続できるか確認するコマンド curl -k https://localhost/

viで日本語入力が文字化けする サーバ環境変数とteratermの漢字入力設定の文字コードを同一にする

■同じ名前のプロセスが大量に作られた、削除したい pgrep sample_process | xargs kill

■swap(RHEL

Swapファイルを作成します。2GB
/bin/dd if=/dev/zero of=/var/swap bs=1M count=2048

Swapファイルとして設定
mkswap /var/swap

Swapファイルを有効に
swapon /var/swap

次回以降の物理サーバの起動時にSwap領域を自動的に有効にするために、Swap領域の設定を追加します。
vi /etc/fstab
/var/swap swap swap defaults 0 0