unix
おドン
unix
準備中
準備中
準備中

コマンド

cal #カレンダー表示
date #日付表示
date > hoge.dat #日付出力
cat hoge.dat #ファイルの内容表示
cal >> hoge.dat #>>はファイルへ追記
rm hoge.dat #削除

プログラム作成

code hoge.c #visual studio codeのコマンドがcode

コマンド

pwd #カレントディレクトリ
mkdir folder1#ディレクトリ作成
cd folder1
ln hoge.c folder2 #folder2にもhoge.cができる.
これは, hoge.cが二つのディレクトリを持つこととなる.

ファイル名1のファイルからデータを読み込んで, コマンドで処理した結果をファイル名2へ出力

コマンド < ファイル名1 >ファイル名2

ファイルの結合

cat hoge1.dat hoge2.dat >hoge3.dat

空のファイル作成

echo > hoge1.dat

ファイルのコピーと移動

cp hoge.dat hoge_cp.dat

ファイル名変更

mv hoge_old.dat hoge_new.dat

ライブラリinclude

#include "-----"
#include <---->
この二つの書式の違いは, ファイルを探し出すディレクトリの違いによる."ファイル名" の指定では, ファイルをカレントディレクトリから探し出し, なければ, 次に指定された あるいは標準ディレクトリから探す. <ファイル名>の指定では, ファイル名を特定あるいは, 標準の場所のみから探す.

printf

%d int
%f double
%e doubleをeを用いて指数部を表現
%E doubleをEを用いて指数部を表現
%g 桁数短いときf, 長いときe
%G 桁数短いときf, 長いときE
%c 1文字
%s 文字列
%ld, %lf longを使ったとき

コマンドの並列実行

command1 & command2 & command3

パイプ機能

コマンド1 | コマンド2
cat hoge1.dat | sort
>>>>>>hoge1.datの中身をsortする.

BシェルとCシェル

sh #Bシェル
csh #Cシェル
ログアウトすると元のシェルに戻る.

シェルスクリプトの作り方

コマンドが書かれたファイルを作る.
初めの行が#ならCシェル. 何もなければ, Bシェル.

特殊パラメータ変数

%set aa=(1 2 3 4 5)
%echo $#aa
5
%echo $aa[3]
3

位置バラメータ変数

$1~$9はargv[1]~argv[9]のを表す.
$0はコマンド名そのものを表す.

シェルスクリプト

#
echo 1 cal
echo 2 date
echo input 1 or 2
set a=$<
switch($a)
case 1:
cal
breaksw
case 2:
date
breaksw
default:
edho \?\?
breaksw
endsw

gets()は危険なので極力使わない.

//shortを標準入力から得て, numに格納.
short GetShort(){
char buf[80];
short num;
fgets(buf, sizeof(buf)-1,stdin);
num=(short)atoi(buf);
return(num);
}

半自動ビルド

Autotoolset(GNU Autotools)

./configure
make
make install
説明----./configureを実行することにより, 自分の環境を自動で調査して, makeファイルが生成される.
configureがエラーが出て失敗してしまった場合は, config.logにすべて記録されている. config.logを見てエラーで止まる状況を詳細に確認できる. ライブラリがないのであれば, 対象とするライブラリをinstallする必要がある.

cmakeを利用したビルド

cmakeでmakeファイルを作成.
makeでビルド

静的ライプラリ

*.aのファイル.
/lib, /usr/lib, usr/local/libに配置されている.

macOSにunixを採用したのがスティーブ・ジョブズ最大の功績ですね.

コピー

cp コピー元のファイルパス コピー先のファイルパス

ターミナルの便利機能

途中までタイプしてtabキーで補完

ワイルドカード

* #任意の文字
???? #任意の4文字
??* #3文字以上
> #標準出力をリダイレクト(ファイルが存在すれば上書き)
>> #(ファイルが存在すれば追加)
mkdir #ディレクトリの作成

ディレクトリ

bin #基本コマンド(lsやcp)
dev #デバイスファイル(reboot , mountなどシステム管理用のコマンド)
etc #設定ファイル
sbin #管理コマンド
tmp #一時的ファイル

usr #各種コマンド, ドキュメントなど
/bin #基本コマンド(コンパイラやファイルを圧縮するtar)
/sbin #管理コマンド(netstat, Netinfo関連のコマンドなどシステム管理用のコマンド)
/share #ドキュメントなどの共有フォルダ
/libexec #サーバプログラム, 他のプログラムから呼び出されるユーティリティ
/lib #ライブラリ
/local #ユーザがインストールしたコマンド

var #内容が比較的頻繁に更新されるデータ
/log #ログファイル
/root #スーパユーザのホームディレクトリ

private #各種コマンドやドキュメント

grepコマンド

grep 見つける文字列 ファイルパス
grepコマンドでファイルパスを指名しなかった場合, データは標準入力から読み込まれる.つまり, リダイレクションやパイプが使用できる.
cat -n hoge.txt | grep 見つけたいも列 #行番号付きで文字列を見つける.
grep -i 見つける文字列 ファイルパス #iをつけることで, 大文字と小文字を区別しなくなる.
grep -v 見つける文字列 ファイルパス#指定した文字列以外を表示
ファイルは複数あってもいい. grep 見つける文字列 hoge1.txt hoge2.txt
grep -e 文字列1 -e 文字列2 ファイルパス #OR条件で複数の見つける文字列を指定可能-eをつける.
grep 文字列1 ファイルパス |grep 文字列2 #AND条件で複数の見つける文字列を指定可能

正規表現

^や*を用いて, 柔軟に指定可能
grep '^文字列' ファイルパス #行頭に見つける文字列がある行だけを抜き出す. (行中にある場合は抜き出されない.)
grep '文字列$' ファイルパス #行末に見つける文字列がある行だけを抜き出す. (行中にある場合は抜き出されない.)
grep -v -e '^文字列' -e '^$' ファイルパス #文字列と空行(^$)を含まない行を抜き出す
grep 'M.c' hoge.txt #Mac, Mbcなど「.」が任意の一文字を表す
grep 'Ma*c' hoge.txt #Mc, Mac ,Maacなど「*」の直前のaが0回以上(0回を含める)繰り返される文を抜き出す
grep 'M.*' hoge.txt #「.*」でシェルのワイルカードの*と同じ意味になる.
grep 'M[abc]c' hoge.txt #Mac, Mbc, Mcc
grep 'M[a-z]c' hoge.txt #Mac, Mbc, ... , Mzc
数字の場合は[0-47]や大文字も含める場合は[a-zA-Z]
正規表現の例えば*を検索したい場合は, \*とすれば*を検索できる.

コマンドがどこにあるか調べる

which コマンド名

ファイル検索

find 起点となるディレクトリ -name 名前 #起点となるディレクトリより下の階層の名前に一致するファイルを検索
注意点: ワイルドカードを使用するとシェルによって展開されてしまうため, シングルまたはダブルクオーテーションでくくる.例: '*.jpg'
find 起点となるディレクトリ -mtime 5 #ちょうど5日前のファイルを検索. -5で5日前から現在. +5で5日前より過去のファイルだけ検索
ファイルの種類を選択可能find 起点となるディレクトリ -type d #dはディレクトリ, fはファイル, lはシンボリック
fide . \! -name "*.txt" -name "*.???" #カレントディレクトリで拡張子がtxtではなくて, 三文字の拡張子を持つもの
-----------------------------------------------
同じようなコマンドにlocateがある.こっちの方が入力が簡単.
locate 名前
locateはデータベースを基にしている. データベースは週一で更新される. 手動で更新するためには
sudo /usr/libexec/locate.updatedb

フィルタコマンド

cat ファイルの内容を表示
head 入力ファイルの最初の部分を表示
tail 入力ファイルの最後の部分を表示
sort 行を並び替える
tr 文字を置換する
uniq 重複行を削除
wc 文字数、単語数、行数を数える
cat -n hoge.txt |tail |grap '文字列' #hoge.txtに行番号をつけ, 最後の10行を抜き出し, 文字列の行を抜き出す
sort 'テキストファイルパス' #行頭の文字を辞書順に並び替え. 降順にする場合は -rをつける.

csvファイル(コンマで区切られたファイル)の並び替え

sort +2 -3 -t, hoge.csv
sort +(最初の列番号-1) 最後の列番号
注意: これは辞書順に並び替えるので, 26, 11, 9 →11, 26, 9となる.
数字順に並び替えるには, -nをつける.
sort +2 -3 -t, hoge.csv #3行目を小さい数字順に並び替え
sort hoge.txt hoge2.txt #複数のファイルを使用して並び替えることもできる

重複行の削除

uniq hoge.txt > hoge_sakujo.txt
sort hoge.txt |uniq >hoge_sakujo.txt

文字数を数える

wc hoge.txt
表示は 行数 単語数 文字数(バイト数)
-c 文字数だけ
-l 行数だけ
-w 単語数だけ

文字数の置換

tr 文字1 文字2 < ファイルのパス
もしくは,
cat ファイルのパス | tr 文字1 文字2
cat hoge.txt |tr abc AB #aはAに, b,c はBに変換される.
tr -d 文字 #文字を削除
スペースを指定する場合は" "
tr "[a-z]" "[A-Z]" < hoge.txt #小文字を大文字にする.
"\n" #改行
"\t" #タブ
連続したスペースを一つにまとめる.
tr -s " " < hoge.txt
カンマ, スペース, タブを一つにまとめる.
tr -s " \t," "," < hoge.txt

デベロッパーツールコマンド

Apple Developer ConnectionのWebサイトで登録することで, ダウンロードすることができる.
/Developer/Toolsディレクトリという専門のディレクトリに保存される.
これらのコマンドは/Developer/Tools/コマンド のように絶対パスで指定することで実行できるが, 面倒であるので,
set path= ($path /Developer/Tools)
これで, コマンド名だけで実行できるようになる

ファイルを変更できないようにする.

command+I
一番下の鍵マークをクリック
読み出しのみに変更
-----------------------
chmod u=rx hoge.txt

ファイル作成

touth hoge.txt

シェルを賢く使おう

ls -ld [A-Z]* #大文字から始まるファイルを表示
ls *.{gif,jpg} #gifかjpgのファイルを表示
history #過去のコマンドを表示
!77 #77番目のコマンドを実行
history | grep コマンド名 #コマンド名を持つ過去のコマンドを表示

シェル変数を使ってみよう

##注意cshでしか使えない.
set myVal=Hello #set 変数名=値
echo $myVal #Helloが表示される
unset 変数名 #変数を削除
スペースを含めたいときは, ダブルかシングルクオーテーションで囲むか「\ 」を使う.
シェルは[.]や[/]があると, その前までが変数だと認識する.
set Doc=~/Documents
set Dow=~/Download
cp $Doc/hoge.txt $Dow
どこまでが変数か明確にする場合は{} でくくる.

色々なシェル

sh #もっとも古くからあるシェル
bash #shに加えて特に対話能力が劇的に改善されている
csh #bashやtcshに比べると見劣りする
tcsh #cshの機能拡張版
zch #もっとも高機能なシェル
macOSではshはbash, cshはtcshが使われている.

シェルスクリプト

##同じような繰り返しを行う
シェルはユーザが入力したコマンドを解釈してカーネルに伝えるコマンドインタプリタ であると同時に, プログラミング言語でもある
#!/bin/tcsh #foreach文を使用した[.htm]から[.html]への変換
#カレントディレクトリからファイルを一つずつ取り出して変数fileに入れる. foreach file (*htm)
mv $file $(file:r).html
end
これをhml2htmlというファイル名で保存
chmod a+x ファイルパス
を実行して許可を出す
変数から拡張子を取り除くには[:r]を使う.

ユーザーが作成したコマンドはどこに置けばいいか

/usr/local/bin
これ以外だとOSアップデートで消される.


Copyright (C) 2014 Odon Laboratry  All Rights Reserved.