コマンド
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 | コマンド2cat 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)
./configuremake
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.csvsort +(最初の列番号-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.txtsort 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アップデートで消される.
