LastUpdate: 2022/01/23 17:13:25
戻るIT Pro Linuxコマンド集
http://itpro.nikkeibp.co.jp/article/COLUMN/20060224/230573/?ST=oss
IT Pro シェル・スクリプト・リファンレス
http://itpro.nikkeibp.co.jp/article/COLUMN/20060228/231072/?ST=oss
20060508_よつくかうコマンド
20060508 unixのコード体系
20060508 C シェルモードで、シェルを組むとき
20060508 パーミッション
20070305 開発に必要なソフトなど
20080620 このマシンのIPアドレスを知りたい
20081219 シャットダウン 再起動
20090614_パスの確認
20090614_環境変数
20091119_JOBを定期実行_スケジューラ_
20091119_jobの二重起動防止
20091217_su_と_su_-_の違い_
20100107_プロセスの起動に伴う、メモリーの話
20100108_Sleepを使ったテスト用のshell
20100108_コマンドからプロセスIDを取得_
20100108_rshで_バックグラウンド実行がすぐに復帰しないのは?
20100112_ssh_
20100120_rcp_リモートコピー
20100123_ksh_配列いろいろ
20100215_shell_のデバッグ_
20100916_シンボリックリンクの切り替え_update-alternatives
20110217_zipコマンド
20110610_grep_いろいろ_
コマンド | 意味 |
find 検索開始ディレクトリ -name 'ファイル名称 -print | ファイル名指定の検索 例 etc 配下で、ファイル名に 'config' という文字列を 含むファイルを検索する。 |
grep 検索文字列 [ファイル...] zgrep 検索文字列 [圧縮ファイル...] |
文字列の検索 例 /usr/include 直下のインクルードファイルの中で、'socket' という 文字列を検索する 例 /usr/include の1つ下にあるサブディレクトリの中のインクルード ファイルの中で、'socket'
という文字列を検索する。 |
free | メモリの使用量を見たい free |
df | ディスクの空き容量を見たい df |
sed | ファイル内の文字列の置き換え 例 |
ln -s リンク元 シンボリック名 | シンボリックリンクを生成する 参照 -s が無い時は、ハードリンクとなる |
http://www.net-newbie.com/linux/commands/index.html#TYPE
全てのユーザ、グループに実行権限を与える
chmod a+x filename
例
- ファイルabc.shを 誰でも、なんでもできるようにする
chmod 777 abc.sh- 再帰的に指定する -R
chmod -R 777 folderName
環境変数を一覧表示する
現在いるフォルダを表示する
ファイルを一覧表示する
ls -l 詳細表示 エイリアス ll が設定されている事が多い
ls -f 実行可能ファイルには、*を付ける意味
コマンドの実態を調べる。どこに、ファイルがあるかを調べる時に便利かも
which コマンド
rm
rmdir
削除
rm ファイル名 ファイルを削除する
rmdir ディレクトリ名 指定したディレクトリを削除する。ディレクトリの配下は空である必要がある。
rm -r ディレクトリ名 指定したディレクトリを削除する。ディレクトリの配下が空でなくても、強制的に削除する
改行コードは、 0A (LF ラインフィード)だけ
文字コードはEUC
EUCは、通常の英数は、ShiftJisと同じ
#! /bin/csh
先頭行を上記のように書き始めれば、OK。
これは、/bin/csh を起動して、Cシュエルを起動して、その中でコマンドを実行する…という意味だと思われます。
- | rwx | rwx | rwx | |||
① | ② | ③ | ④ | |||
① | ファイルの種類 |
- d |
通常ファイル ディレクトリ |
|||
② | 所有者に対する保護 |
r w x - |
呼び出し許可 書き込み許可 実行許可 不許可 |
|||
③ | グループ全体に対する保護 | |||||
④ | 全ユーザーに対する保護 |
現在のモードを確認するのは ls -l
変更するのは、 chmod
パーミッション |
ユーザ |
root |
|||||
r | w | x | r | w | x | ||
--- | 0 | × | ※1 | × | ○ | ※1 | × |
--x | 1 | × | ※1 | × | ○ | ※1 | ○ |
-w- | 2 | × | ※1 | × | ○ | ○ | × |
-wx | 3 | × | ※1 | × | ○ | ○ | ○ |
r-- | 4 | ○ | ※1 | × | ○ | ※1 | × |
r-x | 5 | ○ | ※1 | ○ | ○ | ※1 | ○ |
rw- | 6 | ○ | ○ | × | ○ | ○ | × |
rwx | 7 | ○ | ○ | ○ | ○ | ○ | ○ |
※1 vi :w! による強制書き込みは可能
通常、実行するには、読み取り権限が必要である
TeraTerm
http://hp.vector.co.jp/authors/VA002416/ TeraTerm本体のダウンロード
http://www.vector.co.jp/soft/win95/net/se108831.html TeraTermに対する自動ログインなどを行うもの
http://www.vector.co.jp/soft/win95/net/se320973.html
★ おすすめ UTF-8対応TeraTerm Pro TeraTerm Menu も 同梱されており、良いかも
FFFTP
http://www2.biglobe.ne.jp/~sota/ffftp.html
FFFTPのサポート ページ
http://ftp.hm/ffftp/UTF-8に私的に改造されたもの
http://xcres.hp.infoseek.co.jp/ffftp.html
ifconfig -a で みれる。
ifconfig が通らない時は、rootでログイン( su - root )して再試行してみよ
# ifconfig -a lo0: flags=849<UP,LOOPBACK,RUNNING,MULTICAST> mtu 8232 inet 127.0.0.1 netmask ff000000 le0: flags=863<UP,BROADCAST,NOTRAILERS,RUNNING,MULTICAST> mtu 1500 inet xxx.xxx.xxx.xxx netmask ffffff00 broadcast xxx.xxx.xxx.xxx ether xx:xx:xx:xx:xx:xx赤字の箇所が、そのマシンのIPアドレスである
../../solaris/solaris_index.htm#001
今すぐ ハルト(電源断)する
sudo shutdown -h now
今すぐ リブートする
sudo shutdown -r now
別のフォルダにあるものを、仮想的にファルダの再構成ができて便利である。
Windowsのショートカットと似ているが、シンボリックは、利用者から見れば、本物のフォルダのごとく扱うことが可能である。
/home/hoge/ 上で
ln -s /var/www web
とすると、/home/hoge 配下に web というフォルダが見えるようになる。
webフォルダの中身は、/var/www フォルダの中身と同じである
$ echo $PATH
/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin:/usr/games
$PATH に格納されていれば、フォルダを指定しなくても、呼び出す事が可能になる。
WindowsのPATHと同じ概念である。
:区切りで複数指定できるようである。
環境変数の一覧表示の方法
env
printenv
set
変数の設定
変数名=値 のように、すれば良い。
HOGE_HOME=/abc/edf
これは、シェル変数と呼ばれ、外部のプロセスからは参照できない。
子プロセスに 変数を引き渡したい場合は、export を行って環境変数として利用する。
HOGE_HOME=/abc/edf
export HOGE_HOMEexport HOGE_HOME=/abc/edf
とすれば、宣言と同時にexportできるexport を用いても、上位のプロセスには 有効にできない。
上位のプロセスで有効にするには、上位のプロセス内で 変数宣言を行えばよい。
.(ドット)をつけて ファイル名を指定すると、そのファイルを実行するのでなく、そのファイルを自分のプロセス内に展開する事になる。新しいプロセスが生成されなれい。ubuntu 8.04
ユーザーIDログイン時の設定
.bashrc
$ source .bashrc で 設定内容の反映ができる
システム全体の環境変数
/etc/environment
設定内容
PATH="/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin:/usr/games"
LANG="ja_JP.UTF-8"
LANGUAGE="ja_JP:ja:en_GB:en"
cron(クーロン)
UNIXのコマンドやシェルを、指定された日付時刻や時間間隔で実行するソフト(デーモン)。
crontab オプション
cronへのコマンドの登録(cronの設定)は、crontabというコマンドで行う。
オプション 説明 備考 -e cron用の設定ファイルを編集する
(ログインしているユーザー用の設定ファイルがviで開く)cronにはユーザー毎にスケジュールを登録する。 -l 現在の設定の内容を表示する
(ログインしているユーザー用の設定)-r 設定を破棄する
(ログインしているユーザー用の全設定が対象)
http://www.ne.jp/asahi/hishidama/home/tech/unix/cmd/cron.html
設定方法例
crontab での指定方法
分 時 日 月 曜
毎時、毎分、毎週、毎月は 事前登録すみ … 便利機能
すでにスケジューリングされているディレクトリがある。それぞれディレクトリに、実行シェルを置くシンボリックリンクを貼る、などしておけば、実行される。下の表は、実際の実行タイミングである。
ディレクトリ名 | Fedora | Ubuntu |
/etc/cron.hourly | 毎時1分 | 毎時17分 |
/etc/cron.daily | 毎日4時2分 | 毎日6時25分 |
/etc/cron.weekly | 毎週日曜日4時22分 | 毎週日曜日6時47分 |
/etc/cron.monthly | 毎月1日4時42分 | 毎月1日6時52分 |
注意
これらのフォルダに配置するファイル名は、ピリオド がふくまれている場合は無視されてしまう。
run-parts の仕様らしい
Ubuntu の場合 この情報は、/etc/crontab に設定されていた
# /etc/crontab: system-wide crontab
# Unlike any other crontab you don't have to run the `crontab'
# command to install the new version when you edit this file
# and files in /etc/cron.d. These files also have username fields,
# that none of the other crontabs do.
SHELL=/bin/sh
PATH=/usr/local/sbin:/usr/local/bin:/sbin:/bin:/usr/sbin:/usr/bin
# m h dom mon dow user command
17 * * * * root cd / && run-parts --report /etc/cron.hourly
25 6 * * * root test -x /usr/sbin/anacron || ( cd / && run-parts --report /etc/cron.daily
)
47 6 * * 7 root test -x /usr/sbin/anacron || ( cd / && run-parts --report /etc/cron.weekly
)
52 6 1 * * root test -x /usr/sbin/anacron || ( cd / && run-parts --report /etc/cron.monthly
)
#
方法1
JOB起動中にロック用ファイルを排他OPENする。
方法2
自分のシェルから プロセスIDが存在するかを調べる。二つ以上あれば、重複起動である。
参考
http://park15.wakwak.com/~unixlife/linux/sys-logrotate.html
http://www.kozupon.com/logrotate/logrotate.html
http://linux.kororo.jp/cont/server/logrotate.php
su | su前の環境のまま |
su - | 成り代わるユーザーの環境に切り替わる |
http://www.obenri.com/_command/su01.html
Unix系において、プロセスから他のプロセスを実行する場合の話。
親プロセス→子プロセス とうい関係になるが、子プロセスは親プロセスの内容がコピーされたものである。
詳しくはコチラ
第2回 プログラムとプロセス - Linuxカーネルの基本機能:ITpro:
http://itpro.nikkeibp.co.jp/article/COLUMN/20080502/300565/?ST=oss&P=5
単純に 子shellを呼び出すケース
sleep3.ksh
#!/usr/bin/ksh echo $0 start ./sleep2.ksh $@ echo $0 end
sleep2.ksh
#!/usr/bin/ksh echo $0 start ./sleep1.ksh $@ echo $0 end
sleep1.ksh
#!/usr/bin/ksh echo $0 start sleep $1 echo $0 end呼び出し例 ./sleep3.ksh 100
子shellを終了させてから、自分も終了するようなtrapを仕込んでみた
sleep3trapkill.ksh
#!/usr/bin/ksh trap 'trap_02;' 2 trap 'trap_15;' 15 trap_02 (){ echo "$0 trap 02" echo "cpid=[$cpid]" if [[ -z $cpid ]] then echo zero else echo "cpdoをころすぞ" kill -2 $cpid echo "子供をころしたはず" fi exit } trap_15 (){ echo "$0 trap 15" echo "cpid=[$cpid]" if [[ -z $cpid ]] then echo "zero" else kill -15 $cpid fi exit } echo $0 start ./sleep2trapkill.ksh $@ & cpid=$! wait $cpid echo $0 endsleep2trapkill.ksh
#!/usr/bin/ksh trap 'trap_02' 2 trap 'trap_15' 15 trap_02 (){ echo "$0 trap 02" if [[ -z $cpid ]] then echo "zero" else kill -2 $cpid fi exit } trap_15 (){ echo "$0 trap 15" if [[ -z $cpid ]] then echo "zero" else kill -15 $cpid fi exit } echo $0 start ./sleep1trapkill.ksh $@ & cpid=$! wait $cpid echo $0 endsleep1trapkill.ksh
#!/usr/bin/ksh trap 'trap_02' 2 trap 'trap_15' 15 trap_02 (){ echo "$0 trap 2;" exit; } trap_15 (){ echo "$0 trap 15" exit; } echo $0 start sleep $1 echo $0 end呼び出し例 ./sleep3trapkill.ksh 100
$ ./sleep1.ksh 1234 & ./sleep1.ksh start [1] 7483
$ ps a PID TTY STAT TIME COMMAND 6442 pts/0 Ss+ 0:00 -bash 6602 pts/1 Rs 0:00 -bash 7483 pts/0 S 0:00 /usr/bin/ksh ./sleep1.ksh 1234 7484 pts/1 R+ 0:00 ps a
$ pgrep -f "./sleep1.ksh 1234" 7483
rsh machine command & rsh machine 'command &'
これらの方法はうまくいかない
例えば、rsh machine 'sleep 60 &' とした場合 "rsh" はすぐには終 了しない。
"rsh" は、リモートの 'sleep' コマンドをバックグラウ ンドで実行しても、それが終了するまで 60 秒間待つ。
さて、'sleep' を 開始した後、すぐに "rsh" を終了するにはどうすれば良いか。
rsh machine -n 'command >/dev/null 2>&1 </dev/null &'
"-n" は rsh の標準入力を /dev/null に接続するため、 rsh をローカルマシンのバックグラウンドで実行できるようになる
よっ て、"-n" は "< /dev/null" とする場合と同じ。
さらに、リモートマシン 側の入出力のリダイレクション('' の中身)は、rsh に(データの流れが無いの で)セッションはもう終了したと思わせることができる。
ログインの基本 ssh -l useid hostadress
rcpコマンドでは別サーバにファイルやディレクトリをコピーできます。 また、rsh同様に相手サーバにリモート接続の許可を与える設定が必要になります。 設定方法はrshを参考にしてください。
基本編 使用頻度が高い引数の説明
a.リモートサーバにファイルをコピーする。
$ rcp fileA userB@serverB:/fileB
b.リモートサーバにファイルをコピーする。(オーナーやファイルスタンプもコピーする)
$ rcp -p fileA userB@server:/fileB
c.リモートサーバにディレクトリをコピーする。
$ rcp -pr dirA userB@server:/dirB
d.ディレクトリをリモートサーバからローカルサーバにコピーする。
$ rcp -pr userB@server:/dirB dirA
#! /usr/bin/ksh #配列の数を獲得 ct=$# echo -----引数の数----- echo ct=$ct echo -----単純に配列に入れてみる----- a[0]=aaa a[1]=bbb a[2]=ccc #{} で囲むのがポイント echo ${a[0]} echo ${a[1]} echo ${a[2]} echo -----添え字を変数にしてみる----- x=0 y=1 z=2 echo ${a[x]} echo ${a[y]} echo ${a[z]} echo -----このように書いても同じ----- echo ${a[$x]} echo ${a[$y]} echo ${a[$z]} echo -----引数を単純に出力----- echo $1 echo $2 echo $3 echo $4 echo -----引数を全て表示 echo $@ echo -----引数を順にインデックス配列で取りたい----- array=($@) echo ${array[0]} echo ${array[1]} echo ${array[2]} echo -----配列に格納されている数を知りたい ct=${#array[*]} echo $ct echo -----三つ目からの引数を3つづつのグループ化をして扱いたい echo '$0='$0 echo '$1='$1 echo '$2='$2 echo '$3='$3 echo '$4='$4 echo '$5='$5 echo '$6='$6 echo '$7='$7 echo '$8='$8 #ずらす前に退避しておこう a1=$1 a2=$2 echo 引数の数 $# echo 二つずらす shift 2 echo 引数の数 $# #配列に設定 arr=($@) echo 配列の数 ' ${#arr[*]} ' ${#arr[*]} i=0 while (( $i < $# )) do echo ${arr[i]} ${arr[i + 1]} ${arr[i+2]} let i="$i + 3" done echo ----最後までshiftすると戻る?-戻らん!-- echo $# shift $# echo $# #ここで shift すると エラーになる echo -----退避した変数は残っている? echo a1=$a1 echo a2=$a2
-x をつけると、変数が展開されて表示される
通常の場合
$ sh test_if1.sh aaaaa a=aaaaaaaa b=bbbbbbbb ccc -------------------- t $-x をつけた場合
$ sh -x test_if1.sh + echo aaaaa aaaaa + a=aaaaaaaa + b=bbbbbbbb + echo a=aaaaaaaa a=aaaaaaaa + echo b=bbbbbbbb b=bbbbbbbb + [ aaaaaaaa = bbbbbbbb ] + echo ccc ccc + echo -------------------- -------------------- + a=0 + b=0 + [ 0 = 0 ] + echo t t $
例
フォルダ /aaa/bbb と指定するが、その実態を /aaa/bbb1 と、/aaa/bbb2 で切り替えて運用したい。
# update-alternatives --install /aaa/bbb ab /aaa/bbb1 10
# update-alternatives --install /aaa/bbb ab /aaa/bbb2 20
会話形式で切り替えるには
# update-alternatives --config ab
参考
http://blog.eni.co.jp/tech/2009/08/update-alternatives.html
zip option zipFile target
dataフォルダ配下のファイルを data.zip として 圧縮
zip data.zip data/*
dataフォルダを data.zip として圧縮
zip -r data.zip data
解凍は unzip を用いる
unzip data.zip
zip ファイルの中身を見るときは
unzip -l data.zip
grep hoge filename