お知らせ
センター紹介
サービス(Services)
Menu(English)
IPAセキュリティ情報
お知らせ
センター紹介
サービス(Services)
Menu(English)
IPAセキュリティ情報
UNIX は、アメリカAT&T 社のベル研究所で開発された、マルチタスク、マルチユーザ機能を有するOS(オペレーティングシステム) の一種です。また、後にカリフォルニア大学バークレー校で実装されたUNIX(BSD) などと共に、これらから派生したOS の総称です。
1991 年にリーナス・トーバルズ氏がLinux カーネル1)を開発しました。このLinux カーネルはPOSIX2)に準拠し、GPL ライセンス3)が採用されたことで、フリーのUNIX クローン(UNIX 互換OS) として利用されるようになりました。
UNIX(Linux) のユーザには、システム上であらゆる操作が可能な権限(管理者権限) を持つスーパーユーザ (root) と、権限(できること) が制限された一般ユーザがあります。
通常のシステム利用には、一般ユーザで作業を行います。スーパーユーザは、システムの設定を変更したりすることが可能であり、ミスなどによってシステムを破壊する場合もあるため、システム管理者がシステムに対する操作を行う場合のみに使用します。
UNIX やLinux で使われているウィンドウシステム(GUI) は、X Window System という仕組みを使っています。
最近のLinux ディストリビューション4)では、デスクトップの外観や操作性を提供する「ウィンドウマネージャ」5)というソフトウェアを組み合わせて、Windows やMac と同じようにGUI 操作で多くの作業ができる環境が提供されています。
キーボードから文字によるコマンドで操作します。コマンド操作を行うには、端末(ターミナルエミュレー タ、仮想端末) を使います。
パソコンのLinux 環境であれば、GNOME 端末などを起動すれば、コマンド操作が可能となります。ネットワークを経由してサーバに接続する場合は、パソコン上のターミナルエミュレータソフト(PuTTY, Tera Term など6) ) から、SSH(Secure Shell) で接続し、ログインした状態で、コマンド操作が可能となります。
起動した端末、あるいはサーバにログインした端末で、カーソルが表示されている状態を「コマンドプロンプト」、「プロンプト」と呼び、現在コマンドを受け付けられる状態であることをユーザに示しています。
[norin@scsc-fe3 ~]$
システムによってプロンプトは異なります7)が、ユーザ名、ホスト名、現在のディレクトリ、一般ユーザ($)かroot(#) か、といった情報が表示されています。
「~」(チルダ) の部分が現在のディレクトリで、「~」は「ホームディレクトリ」(/home/login-id) を表しています。
コンソールやネットワーク(SSH) を経由してUNIX のコマンド操作を行える状態になることをログイン(login) といいます。このときに利用者毎に登録されているログインID(ログイン名、ユーザ名) とパスワードによって認証を行います。
■ログイン名、ユーザ名(login name, login-id, user name) システムに登録されたユーザを識別する名前です。
■SSH 接続 SSH(Secure Shell) は、ネットワークを経由して別のコンピュータにログインしたり、コマンドを実行するためのプログラムで、ネットワーク上を流れるデータは暗号化されるため、安全に操作することができます。
Windows PC では、PuTTY やTera Term などで接続することができます。Mac やLinux 環境からは、ssh コマンドを使って接続します。
ログイン状態を解除する(シェルを終了する) ことをログアウト(logout) と言います。SSH などネットワークを経由している場合は、接続も解除します。
ログアウトするには、exit コマンドを使います。exit コマンドの代わりに、「Ctrl+D」(Ctrl キーを押しながらd を押す) を使うことも可能です。
基本的なコマンドの実行は、以下の例の様にプロンプト8)からコマンドをタイプして「Enter」キーを押すと、結果が表示されます。
$ pwd /home/norin ← 実行結果
pwd コマンドの実行結果として表示された/home/norin は、今いる場所「カレントディレクトリ」(current directory, working directory) を表示しています。(pwd: Print Working Directory)
$ ls cow2b.sas sastest sx
ls コマンドは、ディレクトリの内容を一覧表示するコマンドです。何も指定せずに実行すると、カレントディレクトリにあるファイルやディレクトリが表示されます。
ユーザがタイプしたコマンドは、シェル(shell) というプログラムによって解釈され、実行されます。シェルは、システムの中核プログラムのカーネルとユーザの間で、コマンドの解釈、結果の表示といったことを行います。また、プログラミング(シェルスクリプト) 言語としてシェルを利用する事もでき、自動実行などに使われています。
利用者がログインすると自動的に起動するシェルを標準シェル(ログインシェル) と言います。多くのLinux ディストリビューションで標準シェルとなっているのが「bash」9)ですが、システムによって、C シェル10)などが使われています。
自分が使っているシェルを確認するには、「echo $SHELL」というコマンドを使います。
$ echo $SHELL /bin/csh
シェル | 説明 |
---|---|
sh | Stephen R. Bourne 氏によるBourne シェル(B シェル) は、UNIX システムの標準となっている。シェルスクリプトの標準として使用されている。 |
bash | sh の上位互換シェルで、Linux やMac の標準シェルとして使用されている。 |
csh | カリフォルニア大学バークレイ校で開発されたシェルで、C シェルと呼ばれている。文法がC 言語に似ている。 |
tch | csh の機能拡張版で、Linux などで広く採用されている。 |
zsh | B シェル系の機能拡張版で、C シェル系の機能も一部取り込まれた高機能シェルです。 |
コマンドの書式(入力形式) は、以下の様になります。
コマンド名 引数1 引数2 ・・・・・
引数(ひきすう) は、コマンドに引き渡す値のことで、引数の間は1 つ以上のスペースで区切られ11)複数の値を引き渡すことができます。
UNIX(Linux) では、コマンド、引数、ファイル名などで、大文字、小文字を区別します。多くのコマンドは、小文字になっています。
コマンドによって引数の値や順番などが違います。
引数の指定例として、cal(calendar) コマンドで引数なし、引数1(2010)、引数1(6) と引数2(1990) を指定した場合の出力を以下に示します。
引数なし(今月のカレンダー)
$ cal June 2009 Su Mo Tu We Th Fr Sa 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30
引数1 を指定(2010 年のカレンダー)
$ cal 2010 2010 January February March Su Mo Tu We Th Fr Sa Su Mo Tu We Th Fr Sa Su Mo Tu We Th Fr Sa 1 2 1 2 3 4 5 6 1 2 3 4 5 6 3 4 5 6 7 8 9 7 8 9 10 11 12 13 7 8 9 10 11 12 13 10 11 12 13 14 15 16 14 15 16 17 18 19 20 14 15 16 17 18 19 20 17 18 19 20 21 22 23 21 22 23 24 25 26 27 21 22 23 24 25 26 27 24 25 26 27 28 29 30 28 28 29 30 31 -中略- October November December Su Mo Tu We Th Fr Sa Su Mo Tu We Th Fr Sa Su Mo Tu We Th Fr Sa 1 2 1 2 3 4 5 6 1 2 3 4 3 4 5 6 7 8 9 7 8 9 10 11 12 13 5 6 7 8 9 10 11 10 11 12 13 14 15 16 14 15 16 17 18 19 20 12 13 14 15 16 17 18 17 18 19 20 21 22 23 21 22 23 24 25 26 27 19 20 21 22 23 24 25 24 25 26 27 28 29 30 28 29 30 26 27 28 29 30 31 31
引数2 を指定(1990 年6 月のカレンダー)
$ cal 6 1990 June 1990 Su Mo Tu We Th Fr Sa 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30
コマンドの動作を変更する指令を「オプション」といい、コマンドの引数として指定します。
多くのコマンドオプションは、「-a」のようにハイフン「-」に続きアルファベットで指定します。コマンドオプションのアルファベットは、大文字、小文字を区別します。例えば、ls コマンドで更新日時の順に表示するには、「-t」オプションをつけたり、詳細な情報を表示する「-l」オプションを付けたりします。また、複数のオプションを続けて「ls -lt」のように指定することもできます。
$ ls cow2b.sas SAS-BI sasuser.v92 sx $ ls -t sx sasuser.v92 SAS-BI cow2b.sas $ ls -lt total 12 lrwxrwxrwx 1 hat center 7 Jun 26 10:41 sx -> /sx/hat drwxr-xr-x 2 hat center 4096 Jun 26 08:42 sasuser.v92 drwxr-xr-x 2 hat center 4096 Jun 17 19:07 SAS-BI -rw------- 1 hat center 3882 Feb 26 17:49 cow2b.sas
「-アルファベット」のような指定方法の他に、「--」ハイフン2 つに続けて英単語で指定するオプションもあります。
先ほどのls コマンド12)で更新日時順と詳細な情報を表示するオプションは以下の様になります。
$ ls --sort=time --format=long total 12 lrwxrwxrwx 1 hat center 7 Jun 26 10:41 sx -> /sx/hat drwxr-xr-x 2 hat center 4096 Jun 26 08:42 sasuser.v92 drwxr-xr-x 2 hat center 4096 Jun 17 19:07 SAS-BI -rw------- 1 hat center 3882 Feb 26 17:49 cow2b.sas
コマンドの利用方法やオプションを調べるために、「オンラインマニュアル」を参照することができます。
オンラインマニュアルを参照するには、コマンドman の引数にコマンド名を指定します。
$ man ls LS(1) User Commands LS(1) NAME ls - list directory contents SYNOPSIS ls [OPTION]... [FILE]... DESCRIPTION List information about the FILEs (the current directory by default). Sort entries alphabetically if none of -cftuvSUX nor --sort. Mandatory arguments to long options are mandatory for short options too. -a, --all do not ignore entries starting with . -A, --almost-all do not list implied . and .. --author :?
マニュアルが長い場合は、1 画面ごとに表示するページャ(less など) と呼ばれるプログラムによって表示されます。次のページを表示するには「スペースキー」を、前のページに戻るには「b」押します。終了するには、「q」を入力します。
コマンドオプションなど引数が多くなると、入力ミスなどが増えます。Enter キーを押す前であればコマンドは実行されませんので、コマンドラインの修正(編集) が可能です。
修正には、矢印キー(←→) やBS(Back Space), DEL(Delete) キーなどが使えます。また、「Ctrl+A」(Ctrlキーを押しながらA) などのコンビネーションキーによる操作(Ctrl+A: 行の先頭に移動)) も可能です。
シェル(bash, tcsh など) には、コマンドの履歴(ヒストリー) を記憶する機能があります。
上矢印キー「↑」を押すか「Ctrl+P」を押すと、コマンドを一つずつさかのぼって表示します。下矢印キー「↓」か「Ctrl+N」で一つずつ戻ります。
表示されたコマンドは、Enter キーを押すと実行されます。また、編集することができますので、間違えた箇所を修正したり、引数を少しずつ変更して実行することができます。
history コマンドを使うと、これまで実行したコマンドを一覧表示することができます。表示したコマンドには、連番がついていますので、「!21」のように、番号を指定して再実行することができます。
キー | 操作説明 |
---|---|
Ctrl + F, → | カーソルを一文字右に移動 |
Ctrl + B, ← | カーソルを一文字左に移動 |
Ctrl + D, Delete | カーソル位置の文字を削除 |
Ctrl + A | カーソルを行の先頭に移動 |
Ctrl + E | カーソルを行末に移動 |
Ctrl + K | カーソル位置から行末までを削除 |
Ctrl + U | 先頭からカーソル位置までを削除 |
Alt + F, Esc F | カーソルを1 単語右に移動 |
Alt + B, Esc B | カーソルを1 単語左に移動 |
Alt + D, Esc D | カーソル位置から単語の終わりまでを削除 |
Ctrl + P, ↑ | コマンドヒストリーを1 つさかのぼって表示 |
Ctrl + N, ↓ | さかのぼったヒストリーを1 つ戻す |
以下に、UNIX(Linux) でよく使う主なコマンドを一覧にしました。詳しくは、オンラインマニュアル(manコマンド名) などを参照してください。
機能 | コマンド | 利用法 | 使用例 |
---|---|---|---|
ファイル操作 | |||
ファイルのリスト表示 | ls | ls [ディレクトリ] | ls -l, ls -lv |
ファイルをコピー | cp | cp [コピー元] [コピー先] | cp -r, cp -rp |
ファイルを削除 | rm | rm [ファイル名] | rm -r |
ファイル名変更、移動 | mv | mv [元のファイル] [変更(移動) 先] | mv hoge work/ |
ディレクトリを作成 | mkdir | mkdir [ディレクトリ名] | mkdir work |
カレントディレクトリ変更 | cd | cd [ディレクトリ] | cd work, cd .., cd |
現在のワーキングディレクトリ | pwd | pwd | |
ディレクトリを削除 | rmdir | rmdir [ディレクトリ名] | rmdir work |
ファイル検索 | find | find [ディレクトリ名] [オプション] | find work/ -name hogehge |
ファイルタイプを表示 | file | file [ファイル名] | file /bin/bash, file .cshrc |
テキスト操作 | |||
テキストファイルの内容を表示 | cat | cat [ファイル名] | cat filename |
テキストを一画面ずつ表示 | more(less) | more(less) [ファイル名] | less filename |
ファイルの先頭を表示 | head | head [オプション] [ファイル名] | head -30 file |
ファイルの末尾を表示 | tail | tail [オプション] [ファイル名] | tail -30 file, file -f file |
パターンマッチ検索 | grep | grep [オプション] [ファイル名] | grep [keyword] file, grep -v [keyword] file |
ソート | sort | sort [オプション] [ファイル名] | sort file, sort -k 3 -n file |
文字数カウント | wc | wc [オプション] [ファイル名] | wc filename |
アクセス権限 | |||
アクセス権限の変更 | chmod | chmod [オプション] [ファイル名] | |
ファイルアーカイブ、圧縮 | |||
複数のファイルを一つに | tar | tar [オプション] [アーカイブ先] [アーカイブもと] | tar zcvf hoge.tar.gz dir/, tar zxvf hoge.tar.gz |
ファイルの圧縮、解凍 | gzip, gunzip | gzip [圧縮するフィル], gunzip [解凍するファイル] | gzip hoge.txt, gunzip hoge.txt.gz |
ファイルの圧縮、解凍 | bzip2, bunzip2 | bzip2 [圧縮するファイル], bunzip2 [解凍するファイル] | bzip2 hoge.txt, bunzip2 hoge.txt.bz2 |
圧縮されたファイルの内容を表示 | zcat | zcat [圧縮されたファイル] | zcat hoge.txt.gz |
各種情報の表示 | |||
オンラインマニュアル | man | man [コマンド名] | man ls, man man |
サーバの状況を表示 | w | w [オプション] | w |
サーバの状況を表示 | top | top [オプション] | top |
プロセス表示 | ps | ps [オプション] | |
ユーザの環境設定表示 | env | env | |
ディスクの使用状況表示 | df | df [オプション] | df -k |
ディスクの使用量表示 | du | du [オプション] [ディレクトリ名] | du -s ./* |
ディスクの容量制限表示 | quota | quota [オプション] quota_state (科学技術計算システム13)では、quota_state を使う) | |
現在の日時を表示 | date | date [オプション] | date |
カレンダー表示 | cal | cal [オプション] [表示指定期日] | cal -3, cal -y |
シェル環境 | |||
bash の起動 | bash | bash | |
alias の設定、表示 | alias | alias [エイリアス名]=’[コマンド[オプション]]’ | alias |
alias の解除 | unalias | unalias [コマンド] | |
環境変数設定(csh) | setenv | setenv [環境変数] [設定値] | setenv LANG C |
環境変数設定(sh,bash) | export | 変数名=設定値; export [環境変数] | LANG=C; export LANG |
コマンド履歴 | history | history | |
ネットワーク | |||
SSH ログイン | ssh(slogin) | ssh -X norin@scion.cc.affrc.go.jp | |
SCP ファイルコピー | scp | scp [コピー元] [コピー先] | scp file.name norin@scion.cc.affrc.go.jp:dirname/ |
SFTP ファイルコピー | sftp | sftp [ユーザ名]@[接続先ホスト名] | sftp norin@scion.cc.affrc.go.jp |
ファイルを格納する入れ物をディレクトリと言います。Windows やMacintosh でフォルダと呼ばれている物がディレクトリにあたります。
ディレクトリ自体もファイルと同様にディレクトリに格納できるので、UNIX(Linux) のファイルシステムはツリー(木) 構造となっています。
ツリーの頂点(木を逆さまにしたイメージで根にあたる部分) をルート(root) と呼び「/(スラッシュ)」で表記します。
現在、ユーザがいるディレクトリのことをカレントディレクトリと呼びます。pwd コマンドでカレントディレクトリを表示することができます。
ログインした時点では、ホームディレクトリと呼ばれる自分専用のディレクトリがカレントディレクトリとなります。ディレクトリを指定せずにファイルやディレクトリの操作(ls 等コマンド操作) を行った場合には、カレントディレクトリでの作業として処理が行われます。
ファイルやディレクトリまでの道筋のことを「パス」と呼びます。このパスの指定方法には、「絶対パス」と「相対パス」があります。絶対パスは、ルート「/」からたどって指定する方法で、相対パスは、カレントディレクトリを起点として指定する方法です。
pwd コマンドを実行すると、「/home/login-id」のように絶対パスで表示されます。ディレクトリの区切りも「/」が使われています。
「ls SAS-BI」のようにls コマンドの引数が「/」で始まる絶対パスでない場合は、カレントディレクトリからの相対パスとして処理されます。
$ pwd /home/hat $ ls cow2b.sas SAS-BI sasuser.v92 sx $ ls SAS-BI milk.sas7bdat systemcpu.sas7bdat
テキストファイル(text file) は、文字や数字などの文字コードで構成され、人間が読んで理解できる形式のデータ(シェルスクリプトやCSV データなど) のファイルです。テキストファイル(テキストデータ) は、端末に表示したりテキストエディタで編集することができます。
これに対して、バイナリファイル(binary file) は、コンピュータが処理するために2 進数で構成されたファイルで、人間がそのまま読んで理解することは困難です。
バイナリファイルには、画像、音声、圧縮されたファイルなどがあります。また、プログラム言語(C, FORTRAN など) で書かれたソースコード(テキスト) に対して、コンパイル(コンピュータで実行可能な形式に変換) されたプログラム(オブジェクトファイルや実行ファイル) をバイナリと呼ぶことがあります。
単にテキストファイルの中身を表示するには、cat(concatenate)14)コマンドを使います。
cat 表示するファイルのパス
ファイルの最後まで表示しますので、長いファイルでは最後しか見ることができません。
[hat@fe03 ~]$ cat cow2b.sas 中略 run; proc reg data=cow; model bl=dayl day; data cow3; set cow; bh=exp(3.26617)*day**(0.05858)*exp(-0.00307*day); proc print; symbol1 interpol=join color=green; symbol2 interpol=join color=red; proc gplot; plot b*day bh*day /overlay; run; [hat@fe03 ~]$
長いファイルを画面毎にスクロール表示するには、lessコマンドを使います。
[hat@fe03 ~]$ less cow2b.sas data cow; input day a b; dayl=log(day); al=log(a); bl=log(b); cards; 6 20.3 23.3 7 18.1 24.6 8 17.6 24 9 16.3 25.6 10 19.9 25.6 11 19.9 26.4 12 19.6 27.3 13 19.9 28.4 14 19.2 28.2 15 20.3 27.4 16 20.5 29.7 17 20.9 30.4 18 20.8 29.4 19 21.8 31.6 20 21.2 31.3 21 21.3 31.2 22 21.9 31.4 cow2b.sas
lessは、逆スクロールや対話的な文字検索なども可能な、moreコマンドの上位互換のツールです。 lessを終了するには q を押します。
lessを実行中に、hを押すとlessのヘルプが表示されます。
SUMMARY OF LESS COMMANDS Commands marked with * may be preceded by a number, N. Notes in parentheses indicate the behavior if N is given. h H Display this help. q :q Q :Q ZZ Exit. --------------------------------------------------------------------------- MOVING e ^E j ^N CR * Forward one line (or N lines). y ^Y k ^K ^P * Backward one line (or N lines). f ^F ^V SPACE * Forward one window (or N lines). b ^B ESC-v * Backward one window (or N lines).
沢山のテキストファイルの先頭だけを確認する場合など、ファイルの先頭の部分を表示するコマンドが head です。
ファイルの末尾を見るコマンドが tail です。 tail -f オプションを使うと、ログファイルなどの末尾に追加された行を続けて表示することができます。
ログイン時の作業ディレクトリ(カレントディレクトリ)が、ホームディレクトリ(/home/login-id)です。
特定のディレクトリ配下のファイルに対して続けて作業(コマンド操作)を行う場合、ファイルが格納されているディレクトリに移動した方がパスの指定が簡単になります。
ディレクトリを移動するにはcd(change directory)コマンドを使います。
$ cd 異動先のパス
SAS-BIディレクトリに移動するには、以下の様にします。
[hat@fe03 ~]$ cd SAS-BI [hat@fe03 ~/SAS-BI]$ pwd /home/hat/SAS-BI
ホームディレクトリに戻るには、cd /home/login-idのようにしても良いですが、引数無しでcdコマンドを実行すると、ホームディレクトリに戻ることができます。
[hat@fe03 ~/SAS-BI]$ cd [hat@fe03 ~]$ pwd /home/hat
よく使うディレクトリを表す記号を使うとパスの指定が簡単になります。
コマンドプロンプトでも紹介しましたが、「~」(チルダ)はホームディレクトリを表しています。 どこかのディレクトリで作業を行っている時に、ホームディレクトリ配下のディレクトリに移動したり、ファイルにアクセスするときなどに使います。 (単にホームディレクトリに戻るだけなら、引数無しの cd コマンドで可能です。)
例えば、SAS-BIディレクトリから、ホームディレクトリ配下のsxディレクトリに移動するには、以下の様にします。
[hat@fe03 ~/SAS-BI]$ cd ~/sx
「..」(ピリオドを2つ続けた記号)は、カレントディレクトリの1つ上のディレクトリを表します。
例えば、カレントディレクトリを1つ上のディレクトリに移動するには、以下の様にします。
[hat@fe03 ~/SAS-BI]$ cd .. [hat@fe03 ~]$ pwd /home/hat
「/」(スラッシュ)を組み合わせてディレクトリを上位にたどって行くことができます。
例えば、2つ上位のディレクトリに移動するには、以下の様にします。
$ cd ../..
「.」(ピリオド1つ)は、カレントディレクトリを表します。
この「.」は、ファイルのコピーや移動先にカレントディレクトリを指定する際に使ったり、シェルスクリプトやプログラムの実行のときにプログラムファイルを指定する場合に使います。
例えば、SAS-BI/milk.sas7bdat ファイルを、カレントディレクトリにコピーする際に、絶対パスではなく「.」を使うことができます。
[hat@fe03 ~]$ cp SAS-BI/milk.sas7bdat .
cd コマンドは、引数に「-」を指定すると1つ前にいたディレクトリに戻ることができます。 これを使うと、2つのディレクトリを行ったり来たりすることができます。
[hat@fe03 ~]$ cd SAS-BI/ [hat@fe03 ~/SAS-BI]$ cd ../sx [hat@fe03 ~/sx]$ cd - [hat@fe03 ~/SAS-BI]$ cd - [hat@fe03 ~/sx]$
コマンドプロンプトの表示で、ディレクトリが変わっていることが確認できます。
ただし、cdコマンド以外では「-」を引数に指定すると、別の機能と見なされますのでご注意ください。15)
ディレクトリを作成するには、mkdirコマンドを使います。
$ mkdir 作成するディレクトリのパス
例えば、カレントディレクトリ配下にDataと言うディレクトリを作成するには、以下の様にします。
$ mkdir Data
また、Dataディレクトリとその配下に2009ディレクトリを一気に作成するには、-pオプションを使って、以下の様に実行します。
[hat@fe03 ~]$ mkdir -p Data/2009 [hat@fe03 ~]$ ls Data 2009
ディレクトリを削除するには、rmdirコマンドを使います。
rmdirで削除するディレクトリ配下には、ファイルが無いことが前提です。(ファイルがあると削除できません)
[hat@fe03 ~]$ rmdir Data/ rmdir: Data/: Directory not empty [hat@fe03 ~]$ rmdir Data/2009/ [hat@fe03 ~]$ rmdir Data/
この例の1行目では、Dataディレクトリに2009ディレクトリがある(ディレクトリが空ではない)ために、削除できませんでした。
lsコマンドで -a オプションを使うと、通常表示されない . (ドット)で始まるファイル(隠しファイル)が表示されます。 隠しファイルは、通常表示する必要のない設定ファイルなどが多く、ドットファイルとも呼ばれています。
.cshrcや.loginなどの設定ファイルで、システムの利用環境などが設定されます。
lsコマンドで -F オプションを使うと、ディレクトリと通常ファイルを区別して表示します。 ディレクトリ名の後ろには / (スラッシュ)が表示され、通所のファイルとは区別されています。
-aオプションと組み合わせて ls -aF とすると、./や ../というディレクトリが表示されます。 これがカレントディレクトリを表す「.」と、1つ上位のディレクトリを表す「..」になります。
lsコマンドに -l オプションを使うと、詳細なファイルリスト情報が表示されますが、最初が「d」で始まるファイルがディレクトリで、「-」で始まるのが通常のファイルです。
その後に続く文字「rw-rw-r–」などは、許可属性(パーミッション)で、ファイルの所有者、グループ、その他のユーザに対するr(read:読み込み)、w(write:書き込み)、x(execute:実行)権限の有無を表しています。
ディレクトリに対する実行権限とは、そのディレクトリをカレントディレクトリとすることを許可する権限となります。
ファイルをコピーするには、「cp」コマンドを使います。
引数には、「コピー元」「コピー先」の順に指定します。コピー先にファイル名を指定すると、その名前でファイルの複製が作成されます。 コピー先にディレクトリを指定すると、そのディレクトリ配下にコピー元と同じ名前のファイル名でコピーされます。
cp cow2b.sas milk.sas cp milk.sas work/ cp milk.sas work/cow3.sas cp work/cow3.sas .
カレントディレクトリを表す「.」を使うことも可能です。
ディレクトリ内のファイルを含めてを丸ごとコピーするには、-R オプションを使います。
cp -R work/ backup
ファイルをコピーすると、更新日時などがコピーを実行した日時に変更されてしまいます。 ファイルのバックアップなど、ファイルの属性(変更日時やパーミッション)をそのまま保持してコピーしたい場合は、 -p オプションを使用します。
cp -p cow2b.sas cow2b.sas.bak
ディレクトリごとバックアップを行う場合などは、 cp -cdpR オプションを組み合わせて使います。 -a オプションは、 -cdpR オプションと同じ動作をします。
cp -a work/ backup
ファイルの移動コマンド「mv」は、コピー(cp)コマンドと同様の使い方ですが、移動元のファイルが消去されます。 移動先に別のファイル名を指定することで、ファイル名の変更ができます。
mv milk.sas cow4.sas mv cow4.sas work/ mv work/milk.sas .
ファイルを削除するコマンド「rm」の基本的な使い方は、「rm ファイル名」とします。 複数のファイルを指定することができます。
ディレクトリを再帰的に(ディレクトリ内のファイルを含めて全て)削除する場合は、-r オプションを使います。
rmで削除したファイルを復活させることはできませんので、rmコマンドの実行は慎重に行ってください。
rm milk.sas rm -r work/
複数のファイルに対してコマンド操作を行う場合に、「ワイルドカード」と呼ばれる特殊文字を使うことができます。
「*」(アスタリスク) は、0 個以上の任意の文字列を表します。例えば、「c*.sas」であれば、c.sas, cow.sas, cow2b.sas などにマッチします。
拡張子が「.sas」のファイルを全て「work」ディレクトリにコピーするには、以下の様にします。
cp *.sas work/
コピーの状況を表示するには、cp -v オプションを使います。
cp -v *.sas work/
「?」(クエスチョンマーク)は、任意の1文字を表します。 例えば、「c??.sas」であれば、 cow.sas にマッチしますが、 c.sasやcow2b.sasにはマッチしません。
$ ls c????.* cow2b.log cow2b.sas
指定した文字のどれかにマッチさせるには、「[」と「]」の間に文字を指定します。
例えば、「c」、「f」、「s」で始まり、任意の拡張子3文字のファイル一覧を表示するには、以下の様にします。
$ ls [cfs]*.??? cow2b.log cow-test1.sas sas.log sasprt.pdf cow2b.sas file.out sas1.fonts.txt sasprt.png cow2.gif fork.txt sasgraph.png
文字を範囲指定する場合は、「-」ハイフンを使います。 例えば、数字で終わるファイルの一覧を表示するには、以下の様にします。
$ ls *[0-9] index.html.1 sas-proc.200907080900 STDIN.o1360 java.log.16134 sas-proc.20090707 STDIN.e1360
UNIX(Linux)では、コマンドのパラメータやデータの入力は「標準入力(stdin)」から行い、実行結果やメッセージは「標準出力(stdout)」に出力されるようになっています。
コマンドに何も指定をしなければ、標準入力と標準出力は、それぞれキーボードと画面(端末)に接続されています。
エラーメッセージの出力先「標準エラー(stderr)」も、標準出力と同じ画面に割り当てられています。
これらの標準入出力や標準エラーの接続先を変更(リダイレクション)することができます。
標準出力をファイルに切り替えるには、「>」という記号を使って以下の様にします。
$ cal >Nov.2009 $ cat Nov.2009 November 2009 Su Mo Tu We Th Fr Sa 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30
cal コマンドの結果は画面には表示されず、Nov.2009ファイルに格納されました。
cat コマンドで、Nov.2009ファイルを表示すると、カレンダーが表示されます。
「>」の記号を2つ続けて「>>」とすると、ファイルの最後に追加されます。
$ cal 12 2009 >>Nov.2009 $ cat Nov.2009 November 2009 Su Mo Tu We Th Fr Sa 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 December 2009 Su Mo Tu We Th Fr Sa 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31
ファイルの日本語文字コードの変換ツールnkfの実行でも「>」を使います。
例:変換元ファイル(in-file.txt)を、文字コードを UTF-8 に変換、同時に改行コードをunix 用に変換して、ファイル(out-file.txt)に保存する。(同じファイルへの入出力はできないので、一旦別のファイル名で保存します。)
nkf -w -Lu in-file.txt >out-file.txt
標準出力と同様に、「<」を使って標準入力をキーボードからファイルに切り替えることができます。
bcと言うコマンドは、通常キーボードからの入力によって計算を行います。
[hat@fe03 ~]$ bc bc 1.06 Copyright 1991-1994, 1997, 1998, 2000 Free Software Foundation, Inc. This is free software with ABSOLUTELY NO WARRANTY. For details type `warranty'. 5+9 14 1248*563 702624 quit [hat@fe03 ~]$
次に、keisan.txtというファイルに、計算式を保存します。 ファイル作成には、catコマンドと標準出力リダイレクションを使います。
ファイルを指定せずにcatコマンドを実行すると、標準入力からの入力待ちの状態になり、入力された文字列をオウム返しのように画面に表示します。 この画面出力をファイルにリダイレクションします。
[hat@fe03 ~]$ cat >keisan.txt 5+9 1248*563 CTRL+D (Ctrlキーを押しながらdを押す) [hat@fe03 ~]$ cat keisan.txt 5+9 1248*563 [hat@fe03 ~]$
標準入力リダイレクションを使って、計算を実行してみます。
[hat@fe03 ~]$ bc <keisan.txt 14 702624 [hat@fe03 ~]$
計算結果が画面(標準出力)に表示されます。
リダイレクションを使わずにbc keisan.txtとすると、計算は実行されますが、入力待ちの状態になります。 quitでbcを終了します。
[hat@fe03 ~]$ bc keisan.txt bc 1.06 Copyright 1991-1994, 1997, 1998, 2000 Free Software Foundation, Inc. This is free software with ABSOLUTELY NO WARRANTY. For details type `warranty'. 14 702624 quit (入力待ち状態になる。quitでbcを終了します。)
エラーや警告のメッセージは通常「標準エラー」に出力され、標準出力と同様に画面に表示されます。
標準エラーをリダイレクトするには、「2>」という記号を使います。
コマンド 2> ファイルのパス
標準出力と標準エラーを1つのファイルに保存するには、以下の様にします。
コマンド &> ファイルのパス
標準エラーのリダイレクションで指定した番号2は、ファイル記述子(ファイルディスクリプタ)と呼ばれる番号で、標準入力は「0」、標準出力は「1」、標準エラーは「2」が割り当てられています。
コマンドの実行結果を画面(標準出力)に出力しないで、直接、他のコマンドの入力に受け渡すことができます。
この機能を「パイプ」と言い、「|(縦棒記号)」を使います。
$ echo "4*a(1) " | bc -l 3.14159265358979323844
ここで、echo “4*a(1)” は、「4*a(1)」という文字列を画面に表示するコマンドです。 これをbcコマンド16)の入力に渡すことで、計算結果が画面に表示されます。
この様に“|”記号を挟んで複数のコマンドを連結することで、複雑な処理を行う事ができます。
例えば、文字コードがShift-JISやEUCなどのファイルを、文字コード変換コマンド(nkf)を使って変換し、1画面ずつ表示するページャ(less)に渡すことで、UTF-8の画面でも文字化けすることなくファイルを確認することができます。
[hat@fe03 ~]$ nkf -w sas-prog-test.log | less 1 SAS システム 2009年11月17日 火曜日 午後02時41分30秒 NOTE: Copyright (c) 2002-2008 by SAS Institute Inc., Cary, NC, USA. NOTE: SAS (r) Proprietary Software 9.2 (TS2M0 DBCS3055) Licensed to THE MINISTRY OF AGRICULTURE, FORESTRY AND FISHERIE, Site 10204 140. NOTE: このセッションは SunOS 5.10 (SUN X64) プラットフォーム上で実行されています 。 You are running SAS 9. Some SAS 8 files will be automatically converted by the V9 engine; others are incompatible. Please see http://support.sas.com/rnd/migration/planning/platform/64bit.html PROC MIGRATE will preserve current SAS file attributes and is recommended for converting all your SAS libraries from any SAS 8 release to SAS 9. For details and examples, please see http://support.sas.com/rnd/migration/index.html This message is contained in the SAS news file, and is presented upon :
プログラムやデータなどのテキストファイルを編集するため、テキストエディタ(単にエディタとも言う)を使うことがあります。
vi は、UNIX(Linux) で使われる標準的な(ほとんど全てのUNIXに入っている)エディタです。 vi には「ノーマルモード」と「挿入モード」があり、多くのコマンドがあるため、初心者にはわかりづらく、とっつきにくい印象ですが、慣れてくれば素早くファイル編集がで きるツールとして活用でき、viの操作を習得することは大変有用です。
Linuxでは、viの機能を拡張したvim(Vi IMproved)が標準のviに置き換えられていることが多くなっています。 vimが導入されていない場合や、システムの環境設定によって、基本的な機能のみで動作するviが起動ようになっている場合もあります。
viがvimに置き換わっている。
[hat@fe03 ~]$ which vi vi: aliased to vim
UNIXで人気のあるエディタとして、emacsというエディタもあります。
また、Windowsのメモ帳(notepad)の様なGUIのエディタもありますが、ターミナル(端末)からリモートで操作を行うには、vi(vim)やemacsなど、キーボードだけで操作できるエディタが必要となります。
既存のファイル、または新しいファイルに対してエディタを起動するには、vi(またはvim)コマンドを使います。
vi [filename] 例:vi hoge.txt 既存ファイルがあれば、そのファイルを開きます。 ファイルが無ければ、新規のファイルとして編集することが出来ます。
新しいファイルの場合、画面は次のようになります。起動直後は、「ノーマルモード」ですのでご注意ください。キーを入力すると、コマンドと解釈されます。
~ ~ ~ ~ ~ ~ "hoge.txt" [New File] 0,0-1 All
編集したファイルを保存して終了するには、ZZ(大文字)とします。 ただし、「挿入モード」の場合は、Esc キーを押して「ノーマルモード」にしてから、ZZ とタイプします。
ファイルを保存するだけの場合は、:w とします。 別名で保存するには、:w filename とファイル名を指定します。
何も編集をしていない状態で終了する場合は、:q とタイプします。 終了と保存を同時 にするには、:wq とタイプします(:wq とZZ は同じ)。
編集した内容がめちゃくちゃで、最初から編集をし直したい場合は、:e!としてファイルを再読込します。 また、編集内容を破棄して強制終了するには、:q!とします。
viでカーソルを移動するには、「j」「k」「l」「h」キーを使います。
↑ k キーは上方向に移動します。 k h キーは左方向に移動します。 ← h l → l キーは右方向に移動します。 j j キーは下方向に移動します。 ↓
vi は「ノーマルモード」と「挿入モード」があります。 挿入モードにするには何通りかの方法がありますが、一番標準的なコマンドは、i を押すやり方です。
i は表示されませんが、一番下の行が – INSERT – に変わり、これを押した後にタイ プした文字が全て画面に入力されるようになります。
次の操作(カーソルを移動する場合も) をしたい場合は、Esc キーを押してノーマル モードに戻ります。
コマンド | 内容 |
---|---|
a | カーソルの後にテキストを入力 |
A | カレント行の末尾にテキストを入力 |
i | カーソルの前にテキストを入力 |
I | 行の先頭にテキストを入力 |
o | カーソル位置の下にテキストを挿入する空行をオープン |
O | カーソル位置の上にテキストを挿入する空行をオープン |
削除コマンドxを使うと、カーソル位置のテキストを削除します。 単語単位削除はdw、行削除はddを使います。
さらに、これらのコマンドの前に数字を入力すると、コマンドの対象範囲が指定できます。 例えば、2xは2文字、2dw は2 word、2dd は2 行の削除となります。
基本的な使い方については、vimのチュートリアルで学習することができます。 vimtutor jaとしてチュートリアルを起動します。
$ vimtutor ja =============================================================================== = V I M 教 本 (チュートリアル) へ よ う こ そ - Version 1.7 = =============================================================================== Vim は、このチュートリアルで説明するには多すぎる程のコマンドを備えた非常 に強力なエディターです。このチュートリアルは、あなたが Vim を万能エディ ターとして使いこなせるようになるのに十分なコマンドについて説明をするよう なっています。 チュートリアルを完了するのに必要な時間は、覚えたコマンドを試すのにどれだ け時間を使うのかにもよりますが、およそ25から30分です。 ATTENTION: 以下の練習用コマンドにはこの文章を変更するものもあります。練習を始める前 にコピーを作成しましょう("vimtutor"したならば、既にコピーされています)。 このチュートリアルが、使うことで覚えられる仕組みになっていることを、心し ておかなければなりません。正しく学習するにはコマンドを実際に試さなければ ならないのです。文章を読んだだけならば、きっと忘れてしまいます!。 さぁ、Capsロック(Shift-Lock)キーが押されていないことを確認した後、画面に レッスン1.1 が全部表示されるところまで、j キーを押してカーソルを移動しま しょう。 Type :quit<Enter> to exit Vim
参考となる情報
最近のLinuxではデフォルトのロケールがUTF-8になっています。
vimも標準で文字コードの自動判別や変換に対応しているのですが、自動判別を有効にするには、.vimrcを設定する必要があります。
科学技術計算システムのフロントエンドサーバは、LANG=en_US.UTF-8になっています。 SASは、EUCが標準なので、SASのプログラムやデータはEUCにする必要があります。(sas_ja.sjisを使う場合は、SJISとする)
SASのプログラムやデータをvimで確認したり編集したりする場合に、文字コードの自動判別や変換ができると大変便利になります。
~/.vimrcに、自動判別の設定を追加します。.vimrcが無い場合は作成します。
:set encoding=utf-8 :set fileencodings=iso-2022-jp,euc-jp,sjis,utf-8 :set fileformats=unix,dos,mac
vimでファイルを開き、任意の文字コードでファイルを保存(変換)することができます。
vimでファイルを開き、vimのコマンドモードで以下のコマンドで文字コードを指定すると、保存するときに、指定した文字コードに変換されます。
文字コードを指定
:setl fenc=文字コード (setl=setlocal, fenc=fileencoding)
改行コードを指定
:setl ff=改行コード (setl=setlocal, ff=fileformat)
上記、文字コードを指定した後に、ファイルを保存します。
:w
自動判別に失敗した場合に、文字コードを指定してファイルを開き直すことができます。
vimでファイルを開き、文字化けした状態で、vimのコマンドモードで以下コマンドでファイルを開き直します。
:e ++enc=文字コード
vimでファイルを開き、^Mという文字が表示される場合、改行コードを変更してファイルを開き直します。
:e ++ff=改行コード
手元のコンピュータ(ローカルホスト)から、ネットワークに接続されている別のUNIX(Linux)コンピュータ(リモートホスト)に、ログインして操作する主なコマンドについて説明します。
SSH : Secure SHell (セキュアシェル)は、ネットワークを通じて別のコンピュータにログインしたり、コマンドを実行したり、ファイルを転送するためのロトコル(規約)、あるいはその実装プログラムです。
ネットワークを流れるデータは暗号化されるため、インターネット経由でも一連の操作を安全(盗聴や成りすましに対して安全)に行うことができます。
Mac OS Xは、内部でUNIX(FreeBSD系)が動作していることもあり、これから説明するsshコマンド(OpenSSH17)のコマンドが利用可能)などの操作をターミナルから行う事ができます。
sshによるリモートログインには、「パスワード認証」と「公開鍵認証」の2つの方法があります。 ここでは、パスワード認証について説明します。
リモートログインを行うコマンドは、ssh (slogin)18)です。
$ ssh login-id@remote.host.jp または、 $ ssh -l login-id remote.host.jp login-id@remote.host.jp's password: <== ここにパスワードを入力
接続すると、パスワードの入力を求めてきますので、パスワードを入力します。 入力したパスワードは表示されません。
接続元(ローカルホスト)のログイン名と、接続先(リモートホスト)のログイン名が同じであれば、login-idの指定を省略できます。
hat@hat-desktop:~$ ssh scion.cc.affrc.go.jp hat@scion.cc.affrc.go.jp's password:
ローカルホストとリモートホストの日本語環境が異なる場合は、ログイン先環境の環境に合わせて、端末ソフトの設定を変更する必要があります。
Windows PCで使えるsshに対応したターミナル(端末)ソフトを紹介します。
SCPは、遠隔のコンピュータとローカルのコンピュータ間でファイル転送を行うプログラムです。
SFTPは、SCP同様にファイル転送を行いますが、FTPと同様の使い方ができます。
どちらの場合も通信は暗号化されますので、ネットワーク上の盗聴などに対して安全です。
基本的な使い方は、cp (コピー)コマンドと同じですが、リモートのファイルを指定する場合は、「ユーザ名@ホスト名:」が入ります。
:(コロン)の後のファイル名は、ホームディレクトリからの相対パスか、ルート(/)からの 絶対パスで指定します。
scp [user@host1:]file1 [user@host2:]file2 scp コピー元ファイル名 コピー先ファイル名
パソコンから、リモートホストへ
$ scp program.f login-id@remote.host.jp:test/prog/
リモートホストからパソコンへ(最後の「.」は、カレントディレクトリを示す)
$ scp login-id@remote.host.jp:test/prog/program.f .
ディレクトリ配下を全てコピーする(作成日時やパーミッション変更無し)
$ scp -rp login-id@remote.host.jp:/home/login-id/test/ .
sftpは、ftpと同様に対話的な操作ができます。 一度の接続で複数のファイルや双方向のファイル転送を行う場合は、sftpが便利です。
$ sftp login-id@remote.host.jp Connecting to remote.host.jp... login-id@remote.host.jp's password: <== ここにパスワードを入力 sftp>
パスワードを入力し、認証に成功すると 「sftp>」と表示したら、コマンドを入力して操作します。
終了するには、quit (bye, exitでもよい)と入力します。
コマンド | 機能 |
---|---|
quit | sftpを終了する (bye, exitでもよい) |
put | ローカルからリモートへ転送 |
get | リモートからローカルへ転送 |
cd | リモートのディレクトリを移動 |
ls | リモートのファイル一覧 |
pwd | リモートのカレントディレクトリを表示 |
rm | リモートのファイルを削除 |
rmdir | リモートのディレクトリを削除 |
lcd | ローカルのディレクトリを移動 |
lls | ローカルのファイル一覧 |
lpwd | ローカルのカレントディレクトリを表示 |
!command | ローカル上のcommandを実行 |
sftpをGUIで操作するツールがあります。
ユーザがタイプしたコマンドライン操作は、シェルというプログラムで解釈され、実行されて結果を画面に表示します。
同じようなコマンド操作を繰り返したり、一連の操作を行いたいときに、その操作手順を登録しておくと便利です。 複数のコマンドが連続して動作するように、実行手順をあらかじめファイルに記述しておいたものが「シェルスクリプト」19)です。 また、シェルスクリプトは、変数や分岐処理などプログラミング言語としても利用できます。
ここでは、Bシェル系(sh, bash)20)のシェルスクリプトについて、説明します。
シェルスクリプトは、テキストファイルとして作成します。 例として、script1.sh という名前で、以下の内容のファイルをviなどのエディタを使って作成します。
#!/bin/sh date pwd echo "I am $USER" echo '4*a(1)' | bc -l cal `date '+%Y'`
1行目の「#!/bin/sh」は、「#!」に続く部分のプログラムでスクリプトが実行されます。
2行目以降は、スクリプトで実行されるコマンドです。
date システムの日時を表示するコマンド pwd カレントディレクトリを表示するコマンド echo "I am $USER" echoコマンドは、文字列を表示するコマンド echo '4*a(1)' | bc -l パイプやリダイレクションも使うことができます cal `date '+%Y'` カレンダーを表示するコマンド
$USERは、ユーザ名が格納された環境変数21)です。
「`」(バッククオート)を使うと、コマンドの実行結果を文字列として扱うことができます。 「cal `date '+%Y'`」では date コマンドの実行結果を cal コマンドの引数に指定しています。
シェルスクリプトを作成しても実行権限がないため、ファイル名を指定しても実行できません。
$ ./script1.sh ./script1.sh: Permission denied.
利用環境に依存しますが、Permission denied.などのメッセージが表示され、スクリプトは実行できません。
実行権限を付与するには、chmodコマンドを使います。
$ ls -l script1.sh -rw-r--r-- 1 hat hat 87 2010-01-05 11:24 script1.sh $ chmod u+x script1.sh $ ls -l script1.sh -rwxr--r-- 1 hat hat 87 2010-01-05 11:24 script1.sh
chmodコマンドのオプション u(ユーザ)に対し +x(実行権を付加)することで、スクリプトを実行可能にします。
実行権限がないファイルでも、shコマンドの引数として指定すれば、シェルスクリプトが読み込まれて実行されます。
$ sh script1.sh
実行権限が付与されていれば、ファイル名を指定してシェルスクリプトを実行することができます。
$ ./script1.sh Tue Jan 5 11:59:03 JST 2010 /home/hat I am hat 3.14159265358979323844 2010 January February March Su Mo Tu We Th Fr Sa Su Mo Tu We Th Fr Sa Su Mo Tu We Th Fr Sa 1 2 1 2 3 4 5 6 1 2 3 4 5 6 3 4 5 6 7 8 9 7 8 9 10 11 12 13 7 8 9 10 11 12 13 10 11 12 13 14 15 16 14 15 16 17 18 19 20 14 15 16 17 18 19 20 17 18 19 20 21 22 23 21 22 23 24 25 26 27 21 22 23 24 25 26 27 24 25 26 27 28 29 30 28 28 29 30 31 31 - 中略 - October November December Su Mo Tu We Th Fr Sa Su Mo Tu We Th Fr Sa Su Mo Tu We Th Fr Sa 1 2 1 2 3 4 5 6 1 2 3 4 3 4 5 6 7 8 9 7 8 9 10 11 12 13 5 6 7 8 9 10 11 10 11 12 13 14 15 16 14 15 16 17 18 19 20 12 13 14 15 16 17 18 17 18 19 20 21 22 23 21 22 23 24 25 26 27 19 20 21 22 23 24 25 24 25 26 27 28 29 30 28 29 30 26 27 28 29 30 31 31
他のプログラミング言語と同様にシェルスクリプトでも、行頭に「#」を記述してコメントを入れることができます。
#!/bin/sh # これはコメントです。 echo "これは表示されます。"
このスクリプトを実行すると、以下の様になります。
$ ./script2.sh これは表示されます。
変数とは一時的に文字や数字などの値を入れて記憶します。変数を指定することで、値を記憶させたり、取り出して使います。
シェルの変数には、「シェル変数」と「環境変数」があります。
シェル変数は、実行中のプロセス(シェルやコマンド、シェルスクリプト)の内でのみ有効な変数です。
シェルスクリプトから起動するコマンドやスクリプトは、「シェル変数」を参照することはできません。
変数に値を代入するには、以下の様にします。 値に何も指定しない場合は、変数は定義されますが、値は何もない(NULL)状態になります。
$ My_Name=Hattori $ echo $My_Name Hattori $ My_Name= $ echo $My_Name $
環境変数は、シェルのプロセスおよびその子プロセスで有効な変数です。シェルから起動した他のコマンドやシェルスクリプトなどに変数を引き渡す場合は、環境変数を使う必要があります。
定義したシェル変数を環境変数に切り替えるには、exportコマンド22)を使います。
$ export My_Name
コマンドと同様に、シェルスクリプトの後にファイル名などを引数として指定することができます。
シェルスクリプトの引数は、「位置パラメータ」と呼ばれる特殊な変数に代入されます。 この位置パラメータを参照することで、引数の値をシェルスクリプトで使うことができます。
位置パラメータは、「$0」「$1」「$2」「$3」\cdots「$10」\cdotsのように表され、「$0」には、実行したシェルスクリプト自身が代入され、「$1」以降に指定した引数が順に代入されます。
#!/bin/sh echo "0=$0 1=$1 2=$2 3=$3 4=$4 5=$5"
このシェルスクリプトに引数を指定して実行すると、以下のようになります。
$ ./hikisu.sh hoge file 35 2000 0=./hikisu.sh 1=hoge 2=file 3=35 4=2000 5=
引数の5番目は指定が無いために、NULLとなっています。
引数の数は、「$#」という変数に代入されます。 引数を4個指定した上記の例で、hikisu.sh内で$#を参照すると、値は4となります。
簡単なサンプルスクリプトを例に、もう少し説明します。
この例では、気象(アメダス)データを取得し、グラフを作成する手順をスクリプトにしています。 実際には、欠測値の取り扱いなどを考慮する必要があります。
#!/bin/sh CHITEN=40336 # 40336=つくば つくば市長峰 高層気象台 YEAR=2018 # 取得データの年 MONTH=12 # 取得データの月 FILE="AR$YEAR$MONTH.$CHITEN.csv" # リアルタイムアメダスのファイル名 DIR="/NDB/csv/amedas/real/$YEAR/$MONTH/" # FTPサーバのディレクトリ # catコマンドで、gnuplotのコマンドを一時データファイルに出力 # nkfコマンドでUTF-8に変換(データファイルは、shift-jisなので) # grep ^地点番号で、地点番号で始まるデータを取り出す(ヘッダ部分を除く) # cutコマンドで、日時と気温のデータだけを取り出す # trコマンドで、","(カンマ)をタブに変換して、一時データファイルに追加 # 一時データファイルにgnuplotのendコマンドを追加 # 上記の一連の結果を{ }でまとめて、amedas-kion.datファイルに出力 { cat <<_EOT_ set term png set output "amedas-kion.png" set xdata time set timefmt "%Y%m%d%H" set title "AMeDAS" set ylabel "Air temperature" set xzeroaxis lt -1 set xlabel "Date" set format x "%m/%d" plot "-" using 1:2 with line ti "Chiten=$CHITEN" _EOT_ nkf -w $DIR$FILE | grep ^$CHITEN | cut -d',' -f2,6 \ | tr "," "\t" echo "end" } >>amedas-kion.dat # gnuplotでグラフを作成する gnuplot amedas-kion.dat # 一時データファイルを削除 rm amedas-kion.dat
このサンプルは、科学技術計算システムのフロントエンドサーバで実行してください。
データファイル23), gnuplot24)などがインストールされている必要があります。
スクリプトの動作については、コメントに記述しています。 各コマンドの詳細は、マニュアルやインターネット上の情報を参照してください。
このスクリプト内でgnuplotのコマンドをcatコマンドを使ってファイルに出力しています。 ここで<<(二重の入力リダイレクション)記号を使っています。
cat <<_EOT_ set term png set output "amedas-kion.png" set xdata time set timefmt "%Y%m%d%H" set title "AMeDAS" set ylabel "Air temperature" set xzeroaxis lt -1 set xlabel "Date" set format x "%m/%d" plot "-" using 1:2 with line ti "Chiten=$CHITEN" _EOT_
これをヒアドキュメントと言い、<<_EOT_から_EOT_までの行を入力として取り込むことができます。
command <<終了文字 hoge hoge foo bar 終了文字
nkfから始まるデータ変換を行うコマンドは、パイプを使って幾つかのコマンドをつなげているため、長い1行のコマンドとなりますが、見やすくするために途中で改行しています。
次の行が続きの行であることを認識させるために、\(バックスラッシュ)を使います。
nkf -w $FILE | grep ^$CHITEN | cut -d',' -f2,6 \ | tr "," "\t"
Windows系では、¥(円マーク)と表示されます。
他のプログラミング言語と同様にシェルスクリプトには、if, test, caseなどの条件判別や分岐処理、for, whileなどの繰り返しループ処理などがあり、高度なプログラムを作ることができます。 ここでは紹介できませんので、インターネット上の情報や書籍等を参考にしてください。
シェルスクリプトや、Perl, Rubyなどは、ソースコード25)を逐次解釈しながら実行するため、エディタなどでプログラムを作成すれば、シェルスクリプトと同様に、すぐに実行することができます。 このようなプログラム(プログラミング言語)をインタープリタと言います。
これに対してC言語26)やFortranなどのコンパイラ方式は、ソースコードをコンピュータが実行できる形式(機械語、オブジェクトコード、バイナリーコードなどと言う)に翻訳してから、プログラムを実行します。 この翻訳を行うソフトウェアをコンパイラと呼び、翻訳することをコンパイルすると言います。
多くの場合、コンパイルされたプログラムの実行は、インタプリタよりも高速です。 しかし、プログラムを開発する際には、プログラムの変更、動作テストの度に、コンパイル作業が必要となります。
多くのLinuxディストリビューションには、無償で使える開発環境GCC(the GNU Compiler Collection)が、パッケージとして導入27)できるようになっています28)。
GCCには、C, C++, Objective-C, Fortran, Javaと、それらのライブラリ29)群が含まれています。
CPUの種類(アーキテクチャ)によって、解釈する機械語(オブジェクトコード)が異なるため、同じプログラムを別のアーキテクチャのコンピュータで実行する30)ためには、ソースコードからコンパイルし直す必要があります。
FortranやC言語は、コンパイラ方式のプログラミング言語で、プログラム作成から実行までには、3つの手順があります。
C言語を使った簡単なプログラミングを説明します。
viなどのエディタを使って、以下のプログラムを作成します。ファイル名は「hello.c」とします。
( $ vi hello.c )
以下のコマンドでコンパイルします。
$ gcc -o hi hello.c -Wall
-o オプションは、出力する実行形式ファイルのファイル名です。 出力ファイル名を指定しない場合は、a.out というファイル名で実行形式ファイルが作成されます。
-Wall オプションは、コンパイル時のWarningを全て(all)出力します。
コンパイルが成功すれば、実行形式のファイルが作成されています。 実行権限も設定されています。
$ ls -l hi -rwxr-xr-x 1 hat hat 8298 2010-01-27 14:35 hi
実行形式ファイルのパスを指定して、プログラムを実行します。
$ ./hi Hello World
C言語と同様の簡単なプログラムを作成して実行してみます。
viなどのエディタを使って、以下のプログラムを作成します。ファイル名は「hello.f90」とします。
( $ vi hello.f90 )
write(*,*)"Hello World" stop end
以下のコマンドでコンパイルします。
$ gfortran -o hi-f hello.f90 -Wall
-o オプションは、出力する実行形式ファイルのファイル名です。 出力ファイル名を指定しない場合は、a.out というファイル名で実行形式ファイルが作成されます。
-Wall オプションは、コンパイル時のWarningを全て(all)出力します。
コンパイルが成功すれば、実行形式のファイルが作成されています。 実行権限も設定されています。
$ ls -l hi-f -rwxr-xr-x 1 hat hat 8717 2010-01-27 15:21 hi-f
実行形式ファイルのパスを指定して、プログラムを実行します。
$ ./hi-f Hello World
このプログラムは、画面に「Hello World」と表示するというプログラムですので、正常に動作していることが確認できます。