目次
- 目次
- リダイレクション
- パイプ(標準入力を繋ぐ)
- テキストファイルの捜査
- ファイルの検索
- シェル
- プロセス
- ユーザー、グループ管理
- ファイルの圧縮と展開
- Yumによるパッケージ管理
- サービスの管理
- ネットワーク
リダイレクション
標準出力へ
$ {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(マッチしなかった行を表示)
$ 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
※ドメイン情報取得