<command1> | <command2>
コマンド1の標準出力を、コマンド2の標準入力に渡します。
コマンド1は、メイン・プロセスのまま実行し、
コマンド2は、サブ・シェル(サブ・プロセス)の中で動作します。
パイプのバッファ・サイズ
bash は、65535 らしい。
ページサイズ(4096バイト)のものもある。
バッファ・サイズの変更は、カーネルの再コンパイルをしないと、できません。
参考
command 2>&1 | tee log.txt
表示しながら、ファイルに保存します。
2>&1 は、標準エラー出力を、標準出力にマージする指定です。
→ safetee コマンド
関連
exit_code=`exec 3>&1; { ( time command ) 2>&1 3>&-; echo $? 1>&3; } | tee "$WORK/sh.log" 1>&2 3>&-`
実行時間を含めてファイルに保存し、終了コードを取得するには、
command
$WORK/sh.log
make V=1 2>&1 | tee make.log
CheckPipeStatus_func "${PIPESTATUS[@]}"
CheckPipeStatus_func
tee はパイプを使うため、パイプの左で発生したエラーで終了させるには、 bashlib の CheckPipeStatus_func を
使う必要があります。
xargs <Command>
find . -name \*~ -print0 | xargs -0 echo
fint の -print0 は、ファイルの区切りを、ヌル文字 "\0" にします。
xargs の -0 は、ヌル文字 "\0" をパラメーターの区切りとします。
標準入力をコマンドのパラメーターに渡します。
上記の場合、ファイルのパスの並びを echo のパラメーターに渡します。
find . | xargs echo
サンプル
パラメーターに指定できる長さの上限を超えそうになったら、コマンドを複数回実行するようになります。
サンプル
サンプル
find . | xargs -n 1 echo
ファイルのパスを1つずつ echo に渡します。
ファイル記述子を操作します。
exec 5>/dev/stdout
… 以後は、ファイル記述子5を、標準出力にマッピングします
exec 5>-
… ファイル記述子5を、閉じます。
閉じた後は、echo abc >&5 しても、何も表示されなくなります。
echo abc >&5
… 上記を実行した後は、画面に abc が出力されます
Linux では、コマンドのパラメーターの一部に * (ワイルドカード) が含まれる場合、* を
任意の名前の一部に置き換えた、存在するファイルやフォルダーのパスに展開します。
コマンドを実行する前にシェルが展開するため、任意のコマンドで使うことができます。
サンプル
echo folder/*
folder フォルダーに a.txt と b.txt がある場合
echo folder/a.txt folder/b.txt
echo コマンドは、展開後のパラメーターを受け取ります。
注意
ワイルドカードを含むパラメーターは、" " で囲むと展開されません。
これは、* 文字を実行するコマンドを渡すことができるようにするためです。
逆に \* でも * 文字を渡すこともできますが。
echo "folder/*"
echo folder/*
folder フォルダーに a.txt と b.txt がある場合
逆に、空白を含むファイル名があると、ワイルドカードは使えません。
echo コマンドは、"folder/a.txt", "folder/b", "b.txt" を受け取ります。
folder フォルダーに a.txt と b b.txt がある場合
echo folder/*
echo folder/a.txt folder/b b.txt
ただし、空白を含むファイル名があると、ワイルドカードは使えません。
マッチするファイル名が存在しなければ、* のまま渡されます。
echo folder/*.txt
folder フォルダーに、末尾に .txt があるファイルやフォルダーが無い場合
echo folder/*.txt
" " で囲むと
* のまま渡る
* のまま渡る
echo .
隠しファイルも含める場合
ピリオド(=カレント・フォルダー)を指定します。
コマンドのマニュアルを表示します。
man (command)
(command) --help
man (command) | col -b > (command).txt
テキストファイルに落とすときは、次のようにします。太字装飾はなくなります。
コマンドの前に sudo をつけると、スーパーユーザーで実行します。
ただし、パスワードの入力が要求されます。(要・端末)
次の sudo は、直前の sudo から 15分以内(時間はOSによって異なる)であれば、
パスワードを要求されません。
sudo を実行できないアカウントもあります。
$ #//=== input sudo password
$ sudo echo This is with super user. | sudo tee /dev/null
[sudo] password for user1:
サンプル
スーパーユーザで echo を実行することで、パスワードを入力します。
sudo tee は、子プロセスでパイプの先に sudo があってもパスワードを再度
求められないようにします。
前回の sudo から 15分以内でも、sudo のパスワードを求める
shell_DisableForceSudoInput=$w_DisableForceSudoInput
if [ -e ~/reset_env.sh ]; then source ~/reset_env.sh ;fi
export w_DisableForceSudoInput=$shell_DisableForceSudoInput
export WORK="$HOME/work"
# :
#//=== force input sudo password
if [ "$shell_DisableForceSudoInput" != "1" ]; then sudo -k ;fi
sudo echo This script run as super user. | sudo tee /dev/null
参考
サンプル
sudo -k
sudo echo This script run as super user. | sudo tee /dev/null
環境変数 w_DisableForceSudoInput が 1 なら、通常の sudo の動きをする改良版
if [ -e ~/reset_env.sh ]; then source ~/reset_env.sh ;fi
export WORK="$HOME/work"
# :
sudo: timestamp too far in the future:[年月日 時分秒]
トラブルシューティング
が表示されて、15分以内でも sudo パスワードが求められるときは、時計を現在より
少し未来に合わせてください。
参考
Defaults:USER_NAME timestamp_timeout=20
タイムアウト時間を長くする
関連
super user do
特定のユーザーの特定のコマンドを、パスワード不要にする。
Ubuntu は推奨もサポートもされない方法です。
sudo でスクリプトを実行するときの注意
sudo ./a.sh
root ユーザーになってスクリプトを実行することは可能ですが、スクリプトの中で、
新規にファイルを作成したりすると、そのファイルの所有者は root になってしまい
ます。
/etc/sudoers
/etc/sudoers ファイルを編集します。 ただし、文法エラーがあれば保存しません。
visudo -c は、チェックのみ行い、エディターの起動や保存はしません。
参考
参考
nice -n -20 grep -r "keyword" . > grep_out.txt
プロセスの実行優先度を指定して、起動します
サンプル
参考
-n オプション: 優先度(-20〜19)
chmod
ファイルやフォルダーのパーミッションを変えます。
secure shell
→ ssh (Secure Shell)
(Tera Term Pro + TTSSH)
Windows版 ssh クライアント
→ OpenSSH for Windows
telnet や ftp などを、セッション確立の段階から暗号化する、安全なシェルです。
多くの ssh クライアント・ソフトがあります。
従来のコマンド(危険)
ssh のコマンド
機能
リモートログイン
rlogin
ssh (slogin)
リモートでコマンド実行
rsh
ssh
ファイル転送
scp, sftp
rcp, ftp
$ cvs checkout Navi
WARNING: RSA1 key found for host pc01
in /home/masanori.toda/.ssh/known_hosts:1
RSA1 key fingerprint ed:06:11:fd:d8:0e:8f:05:f7:2b:db:70:46:64:9f.
The authenticity of host 'pc01 (192.168.115.196)' can't be established
but keys of different type are already known for this host.
RSA key fingerprint is 69:aa:89:7d:af:a6:4d:10:aa:35:f2:16:77:0a:29.
Are you sure you want to continue connecting (yes/no)?
初めて使うときは以下のように訊ねられます。
ホスト名(下記の場合、pc01)が、自分の意図した接続先であれば、yes します。
使い方 (ssh クライアント)
c:\home>ssh server1
ログイン後は、Linux コマンドが使えます。
exit でログアウトします。
alias ls='ls --color=never -l'
文字に色を付けないとき
→ ssh (Secure Shell) - セキュリティ
関連
→ TeraTerm (Open Source)
ssh サーバー
パスワードの入力においては、セキュア・パスワード認証プロトコルが使われます。
RSA/DSA鍵認証方式(秘密鍵(私有鍵)と公開鍵を使う方式)も使えます?
sudo apt-get install openssh-server
インストール
sudo /etc/init.d/ssh restart
再起動
Ubuntu 10.04.2 LTS
Ubuntu 10.04.2 LTS
参考
$ ssh user1@server1
localhost: ssh
server1: sshd
公開鍵のコピーを使って乱数を暗号化する
暗号化された乱数
秘密鍵(私有鍵)
乱数を生成
秘密鍵を使って復号化
乱数
localhost が秘密鍵を持っていると判断し、
ログオンを許可する。
秘密鍵(私有鍵)は、盗まれないように気をつけなければなりませんが、
パスフレーズ(単に長いパスワードとうい意味)によって暗号化されています。
公開鍵
秘密鍵(私有鍵)を使ってログオンするときの内部の動き
秘密鍵(私有鍵)と公開鍵のペアを作る
ssh-keygen コマンドを使うと、秘密鍵(私有鍵)と公開鍵のペアを作ることができます。
公開鍵:
server1:/home/user1/.ssh/authorized_keys
ログオンするときに入力するパスワードを、ネットワークに流さない方式。
この方式で入力するパスワードは、サーバーのアカウントのパスワードではなく、
秘密鍵のパスフレーズを入力します。
ネットワーク上には暗号化された乱数と、復号化された乱数だけが流れます。
秘密鍵:
localhost:/home/user1/.ssh/identity
localhost:/home/user1/.ssh/identity.pub
公開鍵のコピー:
(変更可能)
(変更可能)
server1:$ cat identity.pub >> ~/.ssh/authorized_keys
公開鍵のコピーを server1 に追加するには、サーバーのシェルから次のコマンドを入力します。
RSA/DSA鍵認証方式を使うときは、下記の場所に配置してください。
localhost:$ ssh-keygen
ssh-add ~/.ssh/identity
ssh-add を使って ssh-agent に秘密鍵(私有鍵)を登録する
ssh-add に秘密鍵を指定して、ssh-agent に登録します。
eval `ssh-agent`
ssh-agent を起動します。
これは、現在のプロセスがパスフレーズの入力を不要にします。
ssh-agent は、RSA/DSA鍵認証を行うときに、パスフレーズの入力を不要にします。
(cache)
UNIX サーバにログインするときは、telnet を使います。
Windows では、コマンドプロンプトを開き、telnet (サーバ名) と入力します。
Red Hat Enterprise Linux ES release 3 (Taroon Update 8)
Kernel 2.4.21-47.0.1.ELsmp on an i686
login:
Password:
Last login: Wed Feb 7 11:32:58 from ---.com
[user1@server1 user1]$ pwd
/home/user1
[user1@server1 user1]$ exit
c:\home>telnet server1
関連
Ctrl+] で、telnet プログラム自体を操作するコマンド・モードになります。
何も入力しないで Enter を押すと、コマンド・モードから抜けます。
コマンド・モードで、漢字コードを EUC などに変えることができます。
Microsoft Telnet クライアントへようこそ
エスケープ文字は 'CTRL+]' です
Microsoft Telnet> set codeset japanese euc
エミュレーションの種類: VT100/漢字コードセット: Japanese EUC
Microsoft Telnet>
ログイン後は、Linux コマンドが使えます。
exit でログアウトします。
screen /dev/ttyS0 115200
参考
シリアル・ポートの設定/確認をします。
複数仮想画面管理。 または、新たなターミナルを開く。
… シリアル・ターミナルを開く。 ボーレートは 115200
仮想画面を閉じるときは、[Ctrl]+[a], [K](または [Shift]+[k]), [y]
シリアル・ポートの設定/確認をします。
serial0.present = "TRUE"
serial0.fileName = "COM1"
serial0.autodetect = "TRUE"
もし、VMWare が起動していたら、一旦サスペンド状態にしてから、
マイドキュメント\My Virtual Machines\*\*.vmx をテキストエディターで開き、
最後に下記を追加します。
パリティ
-parenb
なし
偶数
奇数
parenb -parodd
parenb parodd
データ
cs7
cs8
7ビット
8ビット
ストップ
1ビット
2ビット
cstopb
-cstopb
フロー制御
なし
clocal
hardware
crtscts
crtsxoff
Xon/Xoff
設定例
確認
stty -F /dev/ttyS0
stty -F /dev/ttyS0 115200 cs8 -parenb -cstopb clocal
関連
シリアル・ターミナル
[user1@pc1]$ passwd
(current) UNIX password:
New password:
Retype new password:
現在ログインしているアカウントのパスワードを変更します。
関連
ls -lA
(-l) 詳細を表示する
(-A) 隠しファイルも表示する。 ただし . と .. は表示しない
ls -RA1p
(-R) サブフォルダーも表示する
(-A) 隠しファイルも表示する。 ただし . と .. は表示しない
(-1) 1列で表示する
(-p) フォルダー名の最後に / を付ける
ファイルを一覧します。
ls -p . | grep / | sed -e s%/$%%g
フォルダーのみ一覧します。
関連
$ find /home/user1 -type f
/home/user1/file1.txt
/home/user1/sub/file1.txt
1ファイルあたり1行で絶対パスを列挙します
LS_COLORS
ファイルの種類や、拡張子によって色を変える設定値
$ echo "abc"
abc
$ abc="2"
$ echo "abc = $abc"
abc = 2
表示します。
変数の値を表示します。
テキストファイルを作成します。
$ echo "abc" > a.txt
$ cat a.txt
abc
タブ文字区切りのファイルを作成します。(-e オプション)
$ echo -e "A1\tB1\tC1" > a.txt
$ echo -e "A2\tB2\tC2" >> a.txt
$ cat a.txt
A1 B1 C1
A2 B2 C2
改行しません。
$ echo -n abc ; echo ABC
abcABC
Unicode 文字を表示します。 -e オプションが必要です。
$ echo -e "a is \xE3\x81\x82"
a is あ
関連
参考
→ 文字コードを調べる
-e オプションあり echo はタブや改行文字に置き換えます。
\t は、タブ文字に置き換わります。
\n は、改行文字に置き換わります。
参考
hexdump
$ echo -n "あ" | hexdump -C
00000000 e3 81 82
→ 文字コードを調べる Linux コマンド
関連
文字コードから文字を表示する -e オプション
[スペース]
次のページ
前のページ
[b]
[/] (keyword) [Enter]
検索キーワード入力
[n]
次を検索
前を検索
[N]
[q]
終了
テキストファイルの内容を less モードで表示します。
less -N (ファイル名)
(command) | less
(command) の出力を less モードで表示します。
less モードでの操作
[g]
[G]
先頭
末尾
[PageUp]
[PageDown]
[Home]
[End]
前の行
次の行
[↑]
[↓]
ホイール
ホイール
行番号ジャンプ
(数値) [g]