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_いろいろ_


20060508_よつくかうコマンド

コマンド 意味
find 検索開始ディレクトリ -name 'ファイル名称  -print ファイル名指定の検索

例 etc 配下で、ファイル名に 'config' という文字列を 含むファイルを検索する。
find /etc -name '*config*' -print

grep  検索文字列 [ファイル...]
zgrep  検索文字列 [圧縮ファイル...]

20110610_grep_いろいろ_

文字列の検索

例 /usr/include 直下のインクルードファイルの中で、'socket' という   文字列を検索する
grep socket /usr/include/*.h

例 /usr/include の1つ下にあるサブディレクトリの中のインクルード   ファイルの中で、'socket' という文字列を検索する。
grep socket /usr/include/*/*.h
 

free メモリの使用量を見たい
free
df ディスクの空き容量を見たい
df
sed ファイル内の文字列の置き換え


sed -e 's/あかいろ/赤色/g' file.txt > file_update.txt
file.txt内の「あかいろ」を「赤色」に置き換えて、file_update.txtに出力する。
http://itpro.nikkeibp.co.jp/article/COLUMN/20060227/230879/
 

ln -s リンク元 シンボリック名 シンボリックリンクを生成する  参照

-s が無い時は、ハードリンクとなる

http://www.net-newbie.com/linux/commands/index.html#TYPE

 


chmod

全てのユーザ、グループに実行権限を与える

chmod a+x filename


env

環境変数を一覧表示する


pwd

現在いるフォルダを表示する

ls

ファイルを一覧表示する

ls -l    詳細表示    エイリアス ll が設定されている事が多い
ls -f    実行可能ファイルには、*を付ける意味


which

コマンドの実態を調べる。どこに、ファイルがあるかを調べる時に便利かも

which コマンド

rm 
rmdir

削除

rm ファイル名    ファイルを削除する

rmdir ディレクトリ名    指定したディレクトリを削除する。ディレクトリの配下は空である必要がある。

rm -r ディレクトリ名    指定したディレクトリを削除する。ディレクトリの配下が空でなくても、強制的に削除する

 


20060508 unixのコード体系

改行コードは、  0A  (LF ラインフィード)だけ

文字コードはEUC

EUCは、通常の英数は、ShiftJisと同じ


20060508 C シェルモードで、シェルを組むとき

#! /bin/csh

先頭行を上記のように書き始めれば、OK。

これは、/bin/csh を起動して、Cシュエルを起動して、その中でコマンドを実行する…という意味だと思われます。


20060508 パーミッション

rwx rwx rwx      
     
           
ファイルの種類 -
d
通常ファイル
ディレクトリ
所有者に対する保護 r
w
x
-
呼び出し許可
書き込み許可
実行許可
不許可
グループ全体に対する保護
全ユーザーに対する保護

現在のモードを確認するのは   ls -l

変更するのは、 chmod

パーミッションによる、できる事

パーミッション

ユーザ

root

w x 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! による強制書き込みは可能

通常、実行するには、読み取り権限が必要である


20070305 開発に必要なソフトなど

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

 


20080620 このマシンのIPアドレスを知りたい

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


20081219 シャットダウン 再起動

今すぐ ハルト(電源断)する

sudo shutdown -h now

今すぐ リブートする

sudo shutdown -r now

20090417 シンボリックリンク

別のフォルダにあるものを、仮想的にファルダの再構成ができて便利である。

Windowsのショートカットと似ているが、シンボリックは、利用者から見れば、本物のフォルダのごとく扱うことが可能である。

/home/hoge/ 上で 

ln -s /var/www web  

とすると、/home/hoge 配下に web というフォルダが見えるようになる。

webフォルダの中身は、/var/www フォルダの中身と同じである


20090614 パスの確認

$ echo $PATH
/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin:/usr/games

$PATH に格納されていれば、フォルダを指定しなくても、呼び出す事が可能になる。
WindowsのPATHと同じ概念である。

:区切りで複数指定できるようである。


20090614 環境変数

環境変数の一覧表示の方法

env

printenv

set


変数の設定

変数名=値 のように、すれば良い。

HOGE_HOME=/abc/edf

これは、シェル変数と呼ばれ、外部のプロセスからは参照できない。

子プロセスに 変数を引き渡したい場合は、export を行って環境変数として利用する。

HOGE_HOME=/abc/edf
export HOGE_HOME

export 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"
 

 


20091119 JOBを定期実行 スケジューラ

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 )
#


20091119 jobの二重起動防止

方法1
JOB起動中にロック用ファイルを排他OPENする。

方法2
自分のシェルから プロセスIDが存在するかを調べる。二つ以上あれば、重複起動である。


20091129 ログローテーション

参考

http://park15.wakwak.com/~unixlife/linux/sys-logrotate.html

http://www.kozupon.com/logrotate/logrotate.html

http://linux.kororo.jp/cont/server/logrotate.php


20091217 su と su - の違い

su su前の環境のまま
su - 成り代わるユーザーの環境に切り替わる

http://www.obenri.com/_command/su01.html


20100107 プロセスの起動に伴う、メモリーの話

Unix系において、プロセスから他のプロセスを実行する場合の話。

親プロセス→子プロセス とうい関係になるが、子プロセスは親プロセスの内容がコピーされたものである。

詳しくはコチラ

第2回 プログラムとプロセス - Linuxカーネルの基本機能:ITpro:
http://itpro.nikkeibp.co.jp/article/COLUMN/20080502/300565/?ST=oss&P=5


20100108 Sleepを使ったテスト用のshell

単純に 子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 end
sleep2trapkill.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 end
sleep1trapkill.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

20100108 コマンドからプロセスIDを取得

pgrepを使うと、自分のgrepのpidを含まないので、便利

$ ./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

20100108 rshで バックグラウンド実行がすぐに復帰しないのは?

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 に(データの流れが無いの で)セッションはもう終了したと思わせることができる。


20100112 ssh

ログインの基本  ssh -l useid hostadress


20100120 rcp リモートコピー

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


20100123 ksh 配列いろいろ

#! /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




20100215 shell のデバッグ

-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
$


20100916 シンボリックリンクの切り替え update-alternatives

フォルダ /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


20110217 zipコマンド

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


20110610 grep いろいろ

grep hoge filename

 


戻る