Linux - ターミナル

目次

リダイレクション

標準出力へ

$ {cmd} > {filepath}

catコマンドでテキストファイルを作成

$ cat > info.txt

<< ctrl+dで入力終了

catコマンドでテキストファイルを作成

$ cat < info.txt > info2.txt

catコマンドでテキストファイルを結合

$ cat info1.txt info2.txt > info3.txt

ファイルの最後に追加する

$ date >> info3.txt

パイプ(標準入力を繋ぐ)

ファイルの最後に追加する

$ {cmd1} | {cmd2}

ファイル一覧のスクロール

$ ls -al /usr/bin | less

ファイル一覧のスクロール

$ ls -al /usr/bin | less

標準入力で読み込んだデータをファイルに書き出し、画面にも出力スクロール

$ ls -al | tee lsalinfo.txt

フィルタコマンド
コマンド 機能
wc 文字数、単語数を数える
head ファイルの先頭を表示
tail ファイルの末尾を表示
sort ソート
uniq 重複を削除
tr 置換
grep 指定した文字列を含む表を抽出
文字を数える

$ wc -cwl info.txt

拡張子がtxtのファイルを数える

$ ls *.txt | wc -l

単語を含む行数を取得

$ ls -al /usr/bin | grep "zip"| wc -l

単語を置換

$ ls -al /usr/bin | grep "ab" | tr "ab" "**"

ファイルのソート、重複を削除

$ cat mail.txt | sort | uniq

テキストファイルの捜査

ソートコマンドで行を並べ替える

$ sort color.txt

フィールド番号を指定してソート(カンマ区切り)

$ sort -k 4,4 -t "," customer.txt 

数値によるソート

$ sort -k 4,4 -nr -t "," customer.txt 

重複

$ sort info1.txt | uniq

重複回数を取得

$ soft info1.txt | uniq -c

置換

$ echo "abcdefg" | tr "abc" "xyz"

削除

$ echo "xyzdef"| tr -d "xyz"

grep

$ grep "tanaka" info1.txt

grep(マッチした行数)

$ grep -c "tanaka" info1.txt

grep(大文字と小文字を区別しない)

$ grep -c "tanaka" info1.txt

grep(行数を表示)

$ grep -n "tanaka" info1.txt

grep(サブディレクトリ以下を含めファイルを検索)

$ grep -r "mysql"

grep(マッチしなかった行を表示)

$ grep -v "abc" info1.txt

ファイルの検索

ファイルを検索する(下位の階層を全て)

$ find ./ -name "tmp*">

2M以上のファイルを検索

$ find ./ -size +2M

2M以下のファイルを検索

$ find ./ -size -2M

1日以内に修正されたファイルを検索

$ find ./ -type f -mtime 1

findコマンドの結果を別のコマンドで処理

$ find . -size -2M -type f -exec hl {} \;

※-exec は結果を一つずつ処理する

標準入力から読み込んだ文字列を別のコマンドの引数で使用

$ find . -name "*.txt" -print0 | xargs -0 ls -l

※xargsは引数を一気に展開するので注意

シェル

コマンドの実行結果を別のコマンドの引数にする

$ echo $(ls -al)

$ echo `ls -al`

$ echo "i am $(whoami)"

変数の設定と取得と削除
# スペースはコマンドと引数の区切りとみなされるためNG
name="sato"
echo $name
unset name
環境変数を表示

$ printenv

環境変数を設定、削除

$ export MYENV="myhello"

$ unset MYENV

アクセス権限

$ chmod 770 test.txt

-rwxrw---- 1 ssin ssin 0 2月 22 02:06 test.txt

※所有者-グループ-その他

※読出-書込-実行

パーミッションを設定(ディレクトリ、配下)

$ chmod -R 770 mydir/

ユーザー定義の日付

$ date "+%Y/%m/%d %H:%M:%S"

シェルスクリプトの実行

$ ./main.sh

シェルスクリプトファイルの先頭
#!/usr/bin/bash
echo "test"
引数受取
#!/usr/bin/bash
echo $0 # コマンド名
eclo $1 # 第1引数
echo $2 # 第2引数
echo $3 # 第3引数
echo $@ # 引数全リスト
echo $# # 引数の数
for
# normal
for i in "x y z"
do
    echo $i
done

# 引数リスト対応
for p in "$@"
do
    echo $p
done
パターン照合演算子
演算子 説明
${変数名#パターン} 変数の先頭部分とパターンがマッチしたら、最も短く一致する部分を取り除いたものを返す
${変数名##パターン} 変数の先頭部分とパターンがマッチしたら、最も長く一致する部分を取り除いたものを返す
${変数名%パターン} 変数の最後の部分とパターンがマッチしたら、最も短く一致する部分を取り除いたものを返す
${変数名%%パターン} 変数の最後の部分とパターンがマッチしたら、最も長く一致する部分を取り除いたものを返す
path="/users/my/music/data.txt.org"
echo '$path='$path
echo
echo '${path#/*/}=' ${path#/*/}
echo '${path##/*/}=' ${path##/*/}
echo '${path%.*}=' ${path%.*}
echo '${path%%.*}=' ${path%%.*}

> ${path#/*/}= my/music/data.txt.org # 最も短い"/users/" が取り除かれる
> ${path##/*/}= data.txt.org # 最も長い "/users/my/music/" が取り除かれる
> ${path%.*}= /users/my/music/data.txt # 最も短い ".org" が取り除かれる
> ${path%%.*}= /users/my/music/data # 最も長く一致する ".txt.org"が取り除かれる

if文
if [ $# = 0 ] # 「[」はコマンド、区切りスペースを開ける事
then
  echo "引数がない"
else
  echo "引数の数:$#"
fi

プロセス

バックグラウンドジョブ

$ sleep 5 &

末尾に&をつけて実行

コマンドの終了を待たずにプロンプトが戻る

実行中のジョブを確認

$ jobs

プロセスの一覧を表示

$ ps

システム全体のプロセスの一覧を表示

$ ps -awx

プロセスを監視

$ top

負荷、メモリ、システム情報とプロセスの状態がリアルタイムに表示

ジョブにシグナルを送る

$ kill [-シグナル名] %ジョブ番号

$ kill [-シグナル名] プロセスID

プロセス名でシグナルを送る

$ killall [-シグナル名] プロセス名

ユーザー、グループ管理

所属するグループを表示

$ groups

ユーザーIDといグループIDを表示

$ id

ユーザーを追加

$ usreadd [option] {user_name}

パスワードを設定

$ passwd {user_name}

グループを追加

$ groupadd [option] {group_name}

グループに参加

$ usermod -aG {group_name_list} {user_name}

※group_name_listはカンマ区切り指定

ファイルの所有者を変更

$ sudo chown [option] {user_name} {file_path}

$ sudo chown -R {user_name} {dir_path}

ディレクトリを指定する

所属グループを変更

$ chgrp [option] {user_name} {file_path}

$ sudo chgrp -R {user_name} {dir_path}

ディレクトリを指定する

ファイルの圧縮と展開

主な圧縮ファイル
拡張子 説明
.gz gzip形式で圧縮されたファイル
.bz2 bzip2形式で圧縮されたファイル
.tar tar形式のアーカイブファイル
.tar.gz tar形式のアーカイブgzip形式で圧縮したファイル
.tgz .tar.gzの短縮形
.tar.Z tar形式のアーカイブをcompress形式で圧縮したファイル
.tar.bz2 tar形式のアーカイブをbzip2形式で圧縮したファイル
.zip zip形式の圧縮アーカイブ
gzip形式で圧縮

$ gzip [option] {file_path}

$ gzip -c {file_path} > {gz_file_path}

※元のファイルを残す

gzip形式の圧縮ファイルを展開

$ gunzip {file_path}

tarコマンドでアーカイブを作成・展開

$ tar -cvf {アーカイブファイルのパス} {file_path or dir_path}

アーカイブの中の一覧を表示

$ tar -tvf {アーカイブファイルのパス}

アーカイブを展開

$ tar -xvf {アーカイブファイルのパス}

gzip形式の圧縮アーカイブを作成・展開

$ tar -cvzf mytmp.tar.gz ./tmp

※圧縮

$ tar -xvzf mytmp.tar.gz

※展開

Yumによるパッケージ管理

コマンド書式

$ yum [option] {command} {package_name}

例) $ yum install zsyh

主なコマンド
コマンド 説明
check-udpate アップデートできるパッケージの一覧を表示
serach キーワード パッケージ検索
update アップデートできるパッケージを全てアップデート
update パッケージ名 指定したパッケージをアップデート
install パッケージ名 指定したパッケージをインストール
clean ダウンロードしたパッケージと古いヘッダーを削除(clean allと同じ)
clean oldheaders 古いヘッダーを削除
clean packages ダウンロードしたパッケージを削除
remove パッケージ名 指定したパッケージのアンインストール

サービスの管理

サービスの一覧

$ chkconfig --list

$ chkconfig --list {サービス名}

CPUの稼働状況

$ vmstat

$ vmstat 10 ※10秒毎

プロセスの確認

$ ps aux

$ ps aux | grep mysqld 

$ ps aux | awk '{ if($8=="S" { print $0 })}'

HDDの使用状況

$ df -h

メモリの使用状況

$ free -s 4

パッケージのアップデート

$ yum list installed

※インストールされているパッケージのアップデート状況を確認

$ yum check-update

※アップデート対象を表示

$ yum update

※パッケージを一括更新

不正なログインチェック

$ who -u -H ※現在ログインしているユーザーを調べる $ last -i -n 100 ※最後ni ログインしたユーザー履歴を調べる

ネットワーク

ifconfig

https://www.atmarkit.co.jp/ait/articles/1710/12/news016.html

$ ifconfig

netstat

https://www.atmarkit.co.jp/ait/articles/1412/10/news003.html

$ netstat

$ netstat -rn

デフォルトゲートウェイの確認

ping

https://www.atmarkit.co.jp/ait/articles/0108/30/news002.html

$ ping 192.168.10.11

$ ping www.yahoo.co.jp

traceroute

https://www.atmarkit.co.jp/ait/articles/0108/30/news003.html

$ traceroute www.yahoo.co.jp

nslookup

https://www.atmarkit.co.jp/ait/articles/0307/19/news003.html https://www.atmarkit.co.jp/ait/articles/0203/21/news003.html

$ nslookup www.yahoo.co.jp

whois

$ whois yahoo.co.jp

ドメイン情報取得

dig

$ dig yahoo.co.jp

ドメイン情報取得

host

$ host yahoo.co.jp

ドメイン情報取得