テキストファイルの作成/表示/編集
出力をファイルとプログラムにリダイレクトします
標準入出力/エラー
実行中のプログラムは、ある場所から入力を読み取り、ある場所に出力を書き込む必要があります。シェル プロンプトから実行されるコマンドは通常、キーボードからの入力を読み取り、出力を端末ウィンドウに送信します。
プロセスは出力を取得し、ファイル記述子のチャネル番号を使用して出力を送信します。すべてのプロセスは少なくとも 3 つのファイル記述子から始まります。標準入力 0 はキーボードからの入力を読み取ります。標準出力 1 は端末に送信され、標準エラー 2 は端末に送信されます。別のファイルへの別のリンクを開く必要がある場合は、より大きなファイル記述子が使用されることがあります。
出力をファイルにリダイレクトする
> file #重定向stdout覆盖文件
>> file #重定向stdout附加到文件
2 > file #重定向stderr覆盖文件
2> /dev/null #将stderr重定向到/dev/null,从而将其丢弃
>file 2>&1 #重定向stdout和stderr覆盖同一个文件
&>file
>>file 2>&1 #重定向stdout和stderr附加同一个文件
&>>file
リダイレクトの例
タイムスタンプを保存する
[root@servera ~]# date > /tmp/timestamp
[root@servera ~]# cat /tmp/timestamp
Sun Jul 16 06:44:01 EDT 2023
ログ ファイルの最後の 10 行を別のファイルにコピーします。
[root@servera log]# tail -n 10 /var/log/boot.log > /tmp/last-10-msg
[root@servera log]# cat /tmp/last-10-msg
Starting Enable periodic update of entitlement certificates....
Starting Dynamic System Tuning Daemon...
Starting Network Manager Wait Online...
Starting Hostname Service...
[ OK ] Started Enable periodic update of entitlement certificates..
[ OK ] Started OpenSSH server daemon.
[ OK ] Started Permit User Sessions.
[ OK ] Started Command Scheduler.
Starting Terminate Plymouth Boot Screen...
Starting Hold until boot process finishes up...
次のコマンドはエラー メッセージを生成し、エラーをファイルにリダイレクトします。
[root@servera ~]# cat /etc/notexist 2> /tmp/errors
[root@servera ~]# cat /tmp/errors
cat: /etc/notexist: No such file or directory
パイプラインの構築
パイプラインは、| で区切られた 1 つ以上のコマンドのシーケンスです。パイプは、1 つのコマンドの標準出力を次のコマンドの標準入力に接続します。
[root@servera ~]# ls -t /usr/bin | head -n 5 > /tmp/five-last-changed-files
[root@servera ~]# cat /tmp/five-last-changed-files
unversioned-python
lsgpio
lsiio
page_owner_sort
powernow-k8-decode
このパイプでは、head は ls -t 出力コンテンツの最初の 5 行をファイルにリダイレクトします。
リダイレクトをパイプと組み合わせると、シェルは最初にパイプ全体を設定してから、出力/入力をリダイレクトします。パイプラインで出力リダイレクトを使用すると、出力はパイプライン内の次のコマンドに流れるのではなく、ファイルに送られます。
[root@servera ~]# ls / > /tmp/output | less
[root@servera ~]# cat /tmp/output
bin
boot
dev
etc
home
lib
lib64
media
mnt
opt
proc
root
run
sbin
srv
sys
tmp
usr
var
tee コマンドは、標準入力を標準出力にコピーし、標準出力をコマンド引数として指定されたファイルにリダイレクトすることで、この問題を解決します。
[root@servera ~]# ls -l | tee /tmp/output |less
パイプの最後で tee コマンドを使用すると、コマンドの初期出力を保存し、同時にターミナルに出力できます。
[root@servera ~]# ls -t / | head -n 5 | tee /tmp/changed-files
tmp
etc
run
root
boot
[root@servera ~]# cat /tmp/changed-files
tmp
etc
run
root
boot
シェルプロンプトからテキストファイルを編集する
シェル環境を変更する
シェル変数は、特定のシェル セッションに固有です。2 つの端末を開いている場合、または 2 つの別々のログイン セッションを通じて同じリモート サーバーにログインします。シェルを実行すると、各シェルは独自の変数値のセットを持ちます。
シェル変数に値を割り当てるには、次の構文を使用します。
VARIABLENAME=value
[root@servera ~]# COUNT=40
[root@servera ~]# first_name=rkun
[root@servera ~]# file1=/tmp/abc
[root@servera ~]# _ID=RH123
このような変更は、コマンドが実行されるシェルにのみ影響し、他のシェルには影響しません。
set コマンドを使用すると、現在設定されているすべてのシェル値を一覧表示できます。
[root@servera ~]# set | head -n 5
BASH=/bin/bash
BASHOPTS=checkwinsize:cmdhist:complete_fullquote:expand_aliases:extquote:force_fignore:histappend:hostcomplete:interactive_comments:login_shell:progcomp:promptvars:sourcepath
BASHRCSOURCED=Y
BASH_ALIASES=()
BASH_ARGC=()
変数展開を使用して値を取得する
変数展開を使用して、設定された変数値を参照します。名前の前に $ を追加します。
[root@servera ~]# echo $COUNT
40
環境変数を使用したプログラムの構成
シェルは、シェル内でプログラムを実行するための環境を提供します。
シェルで定義されている変数を、export コマンドを使用して環境変数として設定します。
[root@servera ~]# EDITOR=vi
[root@servera ~]# export EDITOR
重要な環境変数 PATH には、プログラムを含むディレクトリのコロンで区切られたリストが含まれます。
[root@servera ~]# echo $PATH
/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/root/bin
ls などのコマンドを実行すると、シェルはこれらのディレクトリから実行可能ファイル ls の場所を見つけます。
変数コマンドのキャンセル
unset
セットアップをキャンセルせずにインポートをキャンセルする
export -n