【Linux】
■tar
命令: 以下の中から必ず1つだけ指定しなければならない。
c tarファイルを新しく作る
x tarファイルを展開する
t tarファイルの内容を表示する
r tarファイルに追加する。z や Z オプションと同時には使えない。
■一定回数のループ
i=0
while [ $i -lt 5 ]; do
echo $i
i=`expr $i + 1`
done
■リスト処理
vars="x y z"
for var in $vars; do
echo $var
done
■行単位の処理
○コマンド実行結果から:
ls -l | while read line; do
echo $line
done
○ファイルから:
while read line; do
echo $line
done < file.txt
■コマンド実行結果のリスト処理
for file in `ls`; do
echo $file
done
■switch 文
case $var in
hoge)
echo "var is hoge"
;;
foo|bar)
echo "var is foo or bar"
;;
*)
echo "var is unknown"
;;
esac
■limits
limits は通常 シェルスクリプト中では次のようにバッククォーテーションに囲み評価するよ うにして使われます。
eval `limits -e -C daemon`
これで limits の出力が評価され、現在のシェルで設定されます。
■eval
evalは引数の変換を一度に行って実行を行う。たとえば、変数NAME1に「FUKUDA」、NAME2に「NAME1」が入っていた場合とする。この場合で、「NAME2」の変数を利用してNAME1の内容を閲覧したい場合は、使用例のようにevalを利用する。
使用例
$ eval echo $"$NAME2"
FUKUDA
2014年2月24日月曜日
2014年2月23日日曜日
■【Windows】
IF EXIST ファイル名 コマンド [パラメーター]
ディレクトリの存在をチェックしたい時にはパスの最後に「\」を付ける
IF EXIST C:\TEST\ ECHO C:\TESTフォルダは存在
■特定のフォルダ下に指定のフォルダがあるかを調べる
【Windows】
set TARGET_PATH="C:\usr\command\tes t\trr"
set DIR_PATH="C:\usr\command\tes t"
IF %TARGET_PATH% GEQ %DIR_PATH% ECHO 以上の同一
【Unix】
set TARGET_PATH="C:\usr\command\tes t\trr"
set DIR_PATH="C:\usr\command\tes t"
IF %TARGET_PATH% -ge %DIR_PATH% ECHO 以上の同一
■特定フォルダーを除外して圧縮するzipコマンドの例。
【Unix】
zip -r what_ever_you_want.zip ./target_dir/ -x ./target_dir/dont_zip_dir\*
dont_zip_dirフォルダーを除外したtarget_dirまるごとを圧縮する例。
■
【Unix】
${#NAME} $NAMEの文字数(全角文字も1文字)になる。 echo ${#1}
→$1の文字数が表示される
■Winddowsコマンド解析
http://d.hatena.ne.jp/thinca/20100210/1265813598
■Unixコマンド
【Unix】
http://www.ne.jp/asahi/hishidama/home/tech/unix/command.html
■調査対象がファイルかディレクトリかを自動判別し、サイズを取得する。
【Windows】
@echo off
rem 対象の属性情報取得
set TARGET_NAME=%~a1
rem 対象がディレクトリか否かのチェック
set TARGET_DIR_FLAG=%TARGET_NAME:~0,1%
rem 対象がディレクトリであればジャンプ
if "%TARGET_DIR_FLAG%"=="d" (goto FLAG_DIR_SIZE)
rem 対象ファイルのサイズを取得
for %%A in ("%1") do set FILESIZE=%%~zA
echo 使用量 = %FILESIZE%
goto :EOF
:FLAG_DIR_SIZE
set WKF=__work.txt
dir /-c /s /a-d /w %1 | findstr "個の" > %WKF%
for /f "usebackq tokens=3" %%A in (`
find /c /v "" %WKF%
`) do set /a LC=%%A - 2
for /f "skip=%LC% tokens=1,2,3" %%A in (
%WKF%
) do call :SUB1 "%%A" "%%C"
del %WKF%
echo 使用量 = %NUM1%
echo 空き容量 = %NUM2%
echo ファイル = %NUMF1%
goto :EOF
:SUB1
set NUMF=%~1
set NUMF1=%NUMF2%
set NUMF2=%NUMF%
set NUM=%~2
set NUM1=%NUM2%
set NUM2=%NUM%
goto :EOF
IF EXIST ファイル名 コマンド [パラメーター]
ディレクトリの存在をチェックしたい時にはパスの最後に「\」を付ける
IF EXIST C:\TEST\ ECHO C:\TESTフォルダは存在
■特定のフォルダ下に指定のフォルダがあるかを調べる
【Windows】
set TARGET_PATH="C:\usr\command\tes t\trr"
set DIR_PATH="C:\usr\command\tes t"
IF %TARGET_PATH% GEQ %DIR_PATH% ECHO 以上の同一
【Unix】
set TARGET_PATH="C:\usr\command\tes t\trr"
set DIR_PATH="C:\usr\command\tes t"
IF %TARGET_PATH% -ge %DIR_PATH% ECHO 以上の同一
■特定フォルダーを除外して圧縮するzipコマンドの例。
【Unix】
zip -r what_ever_you_want.zip ./target_dir/ -x ./target_dir/dont_zip_dir\*
dont_zip_dirフォルダーを除外したtarget_dirまるごとを圧縮する例。
■
【Unix】
${#NAME} $NAMEの文字数(全角文字も1文字)になる。 echo ${#1}
→$1の文字数が表示される
■Winddowsコマンド解析
http://d.hatena.ne.jp/thinca/20100210/1265813598
■Unixコマンド
【Unix】
http://www.ne.jp/asahi/hishidama/home/tech/unix/command.html
■調査対象がファイルかディレクトリかを自動判別し、サイズを取得する。
【Windows】
@echo off
rem 対象の属性情報取得
set TARGET_NAME=%~a1
rem 対象がディレクトリか否かのチェック
set TARGET_DIR_FLAG=%TARGET_NAME:~0,1%
rem 対象がディレクトリであればジャンプ
if "%TARGET_DIR_FLAG%"=="d" (goto FLAG_DIR_SIZE)
rem 対象ファイルのサイズを取得
for %%A in ("%1") do set FILESIZE=%%~zA
echo 使用量 = %FILESIZE%
goto :EOF
:FLAG_DIR_SIZE
set WKF=__work.txt
dir /-c /s /a-d /w %1 | findstr "個の" > %WKF%
for /f "usebackq tokens=3" %%A in (`
find /c /v "" %WKF%
`) do set /a LC=%%A - 2
for /f "skip=%LC% tokens=1,2,3" %%A in (
%WKF%
) do call :SUB1 "%%A" "%%C"
del %WKF%
echo 使用量 = %NUM1%
echo 空き容量 = %NUM2%
echo ファイル = %NUMF1%
goto :EOF
:SUB1
set NUMF=%~1
set NUMF1=%NUMF2%
set NUMF2=%NUMF%
set NUM=%~2
set NUM1=%NUM2%
set NUM2=%NUM%
goto :EOF
2014年2月16日日曜日
■特定ファイルのサイズ取得
○windows
set ZIP_FILE_LIST=__ work.txt
for %%A in ("%ZIP_FILE_LIST%") do set FILESIZE=%%~zA
echo %FILESIZE%
○Linux
wc -c test.txt | awk '{print $1}'
■main関数の引数の扱いについて
http://www5c.biglobe.ne.jp/~ecb/c/07_05.html
■特定ディレクトリ下に指定ディレクトリがあるかを調べて、その後の処理を行う。
@echo off
set TARGET_PATH="C:\usr\command\tes t\trr"
set DIR_PATH="%MP%\tes t"
set WKF=__work.txt
echo %TARGET_PATH% | findstr /I /C:%DIR_PATH% > %WKF%
for %%A in ("%WKF%") do set FILESIZE=%%~zA
echo %FILESIZE%
if %FILESIZE% EQU 0 goto file_not_find
echo 取得処理を行う
■
hoge.exe 1> out.txt 2> err.txt
「hoge.exe」が出力する文字列のうち、通常の出力を「out.txt」に、エラー出力を「err.txt」に出力させます。これにより必要な情報をある程度分離させることができます。
■
echo Error. 1>&2
Echoによる文字出力を標準出力ではなく標準エラー出力に変更します。これはバッチファイル内で特に有効で、例えばこの記述を含むバッチファイルが「aaa.bat」と仮定すると、コマンドプロンプト上で「aaa.bat > NUL」と指定されて実行していても「Error.」という文字列がプロンプト上に出力されるようになります(ただし別の方法で標準エラー出力がリダイレクトされている場合はこの限りではありません)。
■
type C:\config.sys | more
C:\config.sys を Type コマンドで出力しますが、 More コマンドで、1 画面ごとに出力させます。
■
echo Y | del "%TEMP%\*.*"
TEMP ディレクトリの中のファイル(ディレクトリを除く)を Del コマンドで削除しますが、"*.*" のように指定すると必ず削除するかどうか尋ねられるので、いつでも「はい」(Y) にしたいとき、Echo コマンドで Y を出力させ、それを「 | 」で応答にさせます。
■1行空ける
echo.
○windows
set ZIP_FILE_LIST=__ work.txt
for %%A in ("%ZIP_FILE_LIST%") do set FILESIZE=%%~zA
echo %FILESIZE%
○Linux
wc -c test.txt | awk '{print $1}'
■main関数の引数の扱いについて
http://www5c.biglobe.ne.jp/~ecb/c/07_05.html
■特定ディレクトリ下に指定ディレクトリがあるかを調べて、その後の処理を行う。
@echo off
set TARGET_PATH="C:\usr\command\tes t\trr"
set DIR_PATH="%MP%\tes t"
set WKF=__work.txt
echo %TARGET_PATH% | findstr /I /C:%DIR_PATH% > %WKF%
for %%A in ("%WKF%") do set FILESIZE=%%~zA
echo %FILESIZE%
if %FILESIZE% EQU 0 goto file_not_find
echo 取得処理を行う
■
hoge.exe 1> out.txt 2> err.txt
「hoge.exe」が出力する文字列のうち、通常の出力を「out.txt」に、エラー出力を「err.txt」に出力させます。これにより必要な情報をある程度分離させることができます。
■
echo Error. 1>&2
Echoによる文字出力を標準出力ではなく標準エラー出力に変更します。これはバッチファイル内で特に有効で、例えばこの記述を含むバッチファイルが「aaa.bat」と仮定すると、コマンドプロンプト上で「aaa.bat > NUL」と指定されて実行していても「Error.」という文字列がプロンプト上に出力されるようになります(ただし別の方法で標準エラー出力がリダイレクトされている場合はこの限りではありません)。
■
type C:\config.sys | more
C:\config.sys を Type コマンドで出力しますが、 More コマンドで、1 画面ごとに出力させます。
■
echo Y | del "%TEMP%\*.*"
TEMP ディレクトリの中のファイル(ディレクトリを除く)を Del コマンドで削除しますが、"*.*" のように指定すると必ず削除するかどうか尋ねられるので、いつでも「はい」(Y) にしたいとき、Echo コマンドで Y を出力させ、それを「 | 」で応答にさせます。
■1行空ける
echo.
2014年2月11日火曜日
Linux2
Linux2
http://x68000.q-e-d.net/~68user/unix/
■
basename パス名+ファイル名からパス名を削除する
与えられた文字列の最後の / 以降を表示するコマンドである。
■
compress ファイルを圧縮する
●オプション
-c 圧縮結果を標準出力に書き出す。ファイル操作は行なわれない。
-f 圧縮ファイルが元ファイルより大きくなっても強制的に圧縮ファイルを作る
-v 圧縮率を表示
■
cp ファイルをコピーする
●オプション
-i コピー先のファイルが存在する場合、上書きしてよいか確認を求める。
-f 上書き確認を行わない。これはデフォルトだが、alias cp cp -i としている場合に便利
-p タイムスタンプもそのままコピーする
-R ディレクトリを再帰的にコピーする
% cp -R dir1/ dir2
とすると (`/'を付けると)、dir2 の下に dir1 以下のファイル・ディレクトリをコピーする。つまり
dir2/foo
dir2/bar
というファイルができる。
■
df ディスクの使用状況を表示
●オプション
-k 512バイト単位ではなく、1キロバイト単位で表示
-i i-node の消費量も表示
-H 人間が読みやすい単位で表示
■
du 指定ディレクトリ以下のディスク使用量を再帰的に表示する
-L シンボリックリンクも計算する
-a 各ファイルごとに使用量を表示する
-d 深さ 指定したディレクトリの深さだけしか表示しない。
-k 単位をKBで表示する
-s 指定ディレクトリのサブディレクトリの使用量を表示しない。
****************************************************************
●2GB 問題
Solaris・HP-UX・Linux などの gzip は 2GB 超のファイルに未対応であることが多い。
gzip 自体には「2GB」というファイルサイズの上限はない。また、最近の Solaris・HP-UX・Linux などの OS 自体は 2GB 超のファイルを問題なく扱える。ただし互換性からか、ソースをコンパイルすると、ファイルオフセット (off_t) が 32bit になってしまう環境が多い。このような環境でコンパイルしたバイナリは、gzip に限らず 2GB 超のファイルを生成できないし、既にある 2GB 超のファイルにアクセスすることはできない。
一般的には、コンパイル時に -D_FILE_OFFSET_BITS=64 -D_LARGEFILE64_SOURCE というオプションを付けてコンパイルすればファイルオフセットが 64bit になることが多いようだ (Solaris2.6・Solari8・ HP-UX 11i・Linux で確認。AIX ではちょっと違うらしい)。
世の中で広く使われている gzip のバージョンは 1.2.4 であるが、ファイルオフセットが 32bit な環境で make すると、ファイルオフセットが 32bit な gzip が生成され、2GB 超のファイルを扱うことができない。SunSite や Linux 標準の gzip はこのように make されたものが多いので、2GB 超のファイルに未対応なことが多いのである。この場合、Makefile の CFLAGS に、上記のオプションを追加して再コンパイルすれば解決する。
gzip-1.3.3 の configure は少し賢くて、64bit ファイルポインタが使える場合は上記オプションを勝手に追加してコンパイルしてくれるため、2GB 問題は起こらないだろう。
ちなみに、ファイルオフセットが 32bit なのか 64bit なのかは以下のソースをコンパイルして実行すればわかる。
#include <stdio.h>
#include <sys/types.h>
#include <sys/stat.h>
main(){
printf("%d\n", sizeof(off_t));
}
出力結果が 4 ならば 32bit、8 ならば 64bit である。4 と表示された場合でも、上記オプションを付けてコンパイルすると、大抵の環境では 8 に変わるだろう (今どきの OS ならば)。
****************************************************************
■
less ファイル表示プログラム (ページャ)
あるコマンドを実行結果や、ファイルの内容を見たいとき、1画面に収まりきらずスクロールしてしまって最初の部分が見えないことがある。そういう場合、
% ls -l | less
や
% less file.txt
などとすることでゆっくり見ることができる。
■
ls ファイル・ディレクトリを表示
-a 「.」 から始まるファイルも表示。「.」「..」も表示する。
-A 「.」 から始まるファイルも表示。「.」「..」は表示しない。
root が ls を実行した場合、常に -A オプションが付けられたものとして動作する。
-l ファイル、ディレクトリの詳細な情報を表示する
-T タイムスタンプを年月日時分秒まで表示 (要 -l オプション)
-o ファイルフラグを表示。BSD 系のみ (要 -l オプション)
>> コマンド chflags *
-1 (マイナスエルじゃなくてマイナスイチ) 1行につき1つのファイルの情報を表示
-C マルチカラムで表示 (-1 の逆)。
% ls | more
などとすると、ls が出力先がパイプだと判断し、自動的に -1 を指定したのと同じように動作するが、-C を付けるとそれを抑制し、1行に複数のファイルを表示する。
-F ファイルタイプの識別子を付ける。
ディレクトリの後ろに「/」、シンボリックリンクの後ろに「@」、実行形式ファイルの後ろに「*」をつける
-L シンボリックリンク自体ではなく、リンク先のファイルの情報を表示
-R 再帰的にディレクトリ以下のファイルを表示する。
つまり ls -R / で全てのファイルが表示されることになる
-c ファイルの変更日時ではなく、最後にファイルステータスを変更した日時を表示
>> 用語集 タイムスタンプ *
-u ファイルの変更日時ではなく、最後にファイルにアクセスした日時を表示
>> 用語集 タイムスタンプ *
-d ディレクトリを指定した場合、ディレクトリ以下のファイルではなくディレクトリ自体の情報を表示。
ls -l /usr/bin は、ls -l /usr/bin/* と同じような動作をするが、ls -ld /usr/bin だと、
drwxr-xr-x 2 bin bin 5120 Oct 7 05:26 /usr/bin
と、ディレクトリ自体の情報を表示する
-f ファイル名をソートせずに表示
-r 逆順にソートして表示
-t ファイルを変更した日時の順でソートする。最近どのファイルが更新されたか調べたいときは
% ls -lt | head
最近どのファイルが参照されたかを調べたいときは
% ls -lut | head
が便利。
-i ファイルの i-node を表示
>> コマンド ln *
-s 各ファイルのファイルシステムブロックの使用量を表示 (512バイト単位)
たとえ1バイトのファイルでも1ブロック (512バイト) を消費している。その消費量を表示する。ブロックの単位は環境変数 BLOCKSIZE で設定できる。
>> 環境変数 BLOCKSIZE *
>> 用語集 穴あきファイル *
-k -s オプションが指定された場合、使用量を 1K バイト単位で表示する
-x ファイルを横方向ではなく、縦方向にソートする
(-x オプションは SystemV 系と GNU の ls のみ)。
-q ファイル・ディレクトリ名の中に表示不可能な文字があった場合、`?' という文字に置き換えて表示する。このオプションはデフォルトで有効になっている。このおかげで日本語を含むファイル名を ls で表示しようとすると、???? などとなってしまう。この機能は、出力先がパイプやファイルだと抑制されるので、
% ls | less
% ls | cat
などとすると、日本語ファイル名を表示できる。
■
realpath 相対パスを絶対パスに展開する
■
rm ファイルの削除
-i 1つ1つのファイルについて本当に削除するか確認を求める
-r 再帰的に指定ディレクトリ以下を削除する
-f パーミッションに関係なく全て削除する。
■
rmdir ディレクトリの削除
■
split ファイルを複数のファイルに分割する。結合は cat で行う。
-b num numバイトごとに分割
-l num num行ごとに分割
ファイル sample を 1400キロバイトごとに分割するには
% split -b 1400k sample
とする。分割されたファイルは xaa、xab、xac ... となる。結合するには
% cat xaa xab xac > sample
とすればよい(xaa xab xacの順番のとおりに結合される)。
■
su root (スーパーユーザ) になる。他人の名前でログインする
-f ユーザの .cshrc を読み込む
-l 本当のログインのようにする
HOME、SHELL、PATH、TERM、USER 以外の環境変数の設定は捨てられる
-m 環境変数をそのままに残しておく。
HOME・SELL・USER など、環境変数を元のままにしておく。また、ログインシェルは元のユーザのシェルを使用する。
■
sudo 他ユーザ権限でコマンドを実行する
●オプション
-l ユーザに許されているコマンドの一覧を表示。
% sudo -l
Password: (パスワードを入力)
You may run the following commands on this host:
(root) /usr/local/sbin/visudo
(root) /sbin/shutdown
この例では、visudo と shutdown コマンドを root 権限で実行することができる。
-b コマンドをバックグラウンドで実行
-u 指定したユーザ権限でコマンドを実行。以下のようにすれば、anotheruser の権限で anycommand が実行できる。
% sudo -u anotheruser anycommand
■
tar アーカイバ。複数のファイルを1つにまとめる。
命令: 以下の中から必ず1つだけ指定しなければならない。
c tarファイルを新しく作る
x tarファイルを展開する
t tarファイルの内容を表示する
r tarファイルに追加する。z や Z オプションと同時には使えない。
オプション:
f tarファイルを指定する
一見、毎回 f オプションを指定する意味がないように思えるが、本来 tar はテープドライブに書き出すコマンドなので、f でアーカイブ名を指定しないとテープドライブのデバイス /dev/rst0 を対象に読み書きしてしまう。
p パーミッションや owner、group の情報を保存する。
これは展開時にのみ影響する。
v バーボーズモード。処理内容を詳しく表示する
パーミッションなどの詳細な情報が表示されるため、はじめのうちはアーカイブ作成・展開時に tar cvf や tar xvf などと v オプションを付けたくなるかもしれない。しかし、慣れてきたら v オプションを指定しないようにしよう。
なぜなら、アーカイブ作成・展開時に何かのエラーが標準エラー出力に表示されるかもしれないからだ。もし v オプションを付加すると、エラー表示が v オプションによる冗長出力に埋もれて気づかない可能性がある。
z gzip で圧縮・伸長する。このオプションをサポートしているのは GNU tar だけである。
% tar ztf foo.tar.gz (gzip -dc foo.tar.gz | tar tf - と同じ)
y bzip2 で圧縮・伸長する。このオプションをサポートしているのは GNU tar だけである。
% tar ytf foo.tar.bz2 (bzip2 -dc foo.tar.gz | tar tf - と同じ)
Z compressで圧縮・伸長する
% tar Zxvf foo.tar.Z
⇒ compress で圧縮されている foo.tar.Z を展開する。
O 抽出したファイルを標準出力に出力する (x オプションと併用)
% tar xvfO hoge.tar file1.dat > file2
⇒ hoge.tar から file1.dat を取り出し、file2 というファイル名で保存
C 指定のディレクトリにファイルを展開する
普通に
% tar xvf /dir/foo.tar
とすると、カレントディレクトリにファイルが展開される。/bar/ に展開したい場合は
% tar xvf /dir/foo.tar -C /bar
とする。これは
% (cd /bar ; tar xvf /dir/foo.tar)
と同じ。
カレントディレクトリ以下のファイルを archive.tar にまとめるには
% tar cvf /tmp/archive.tar .
*.tar.gz や *.tgz を扱う場合は z を付ける、ということを覚えておけばい
なお、GNU tar 以外の tar は z オプションがないので、gzip されたファイルを扱うには、以下のようにパイプでつなぐ必要がある。
% tar cvf - . | gzip -c > hoge.tar.gz
⇒ カレントディレクトリ以下を tar でアーカイブし、gzip で圧縮
http://x68000.q-e-d.net/~68user/unix/
■
basename パス名+ファイル名からパス名を削除する
与えられた文字列の最後の / 以降を表示するコマンドである。
■
compress ファイルを圧縮する
●オプション
-c 圧縮結果を標準出力に書き出す。ファイル操作は行なわれない。
-f 圧縮ファイルが元ファイルより大きくなっても強制的に圧縮ファイルを作る
-v 圧縮率を表示
■
cp ファイルをコピーする
●オプション
-i コピー先のファイルが存在する場合、上書きしてよいか確認を求める。
-f 上書き確認を行わない。これはデフォルトだが、alias cp cp -i としている場合に便利
-p タイムスタンプもそのままコピーする
-R ディレクトリを再帰的にコピーする
% cp -R dir1/ dir2
とすると (`/'を付けると)、dir2 の下に dir1 以下のファイル・ディレクトリをコピーする。つまり
dir2/foo
dir2/bar
というファイルができる。
■
df ディスクの使用状況を表示
●オプション
-k 512バイト単位ではなく、1キロバイト単位で表示
-i i-node の消費量も表示
-H 人間が読みやすい単位で表示
■
du 指定ディレクトリ以下のディスク使用量を再帰的に表示する
-L シンボリックリンクも計算する
-a 各ファイルごとに使用量を表示する
-d 深さ 指定したディレクトリの深さだけしか表示しない。
-k 単位をKBで表示する
-s 指定ディレクトリのサブディレクトリの使用量を表示しない。
****************************************************************
●2GB 問題
Solaris・HP-UX・Linux などの gzip は 2GB 超のファイルに未対応であることが多い。
gzip 自体には「2GB」というファイルサイズの上限はない。また、最近の Solaris・HP-UX・Linux などの OS 自体は 2GB 超のファイルを問題なく扱える。ただし互換性からか、ソースをコンパイルすると、ファイルオフセット (off_t) が 32bit になってしまう環境が多い。このような環境でコンパイルしたバイナリは、gzip に限らず 2GB 超のファイルを生成できないし、既にある 2GB 超のファイルにアクセスすることはできない。
一般的には、コンパイル時に -D_FILE_OFFSET_BITS=64 -D_LARGEFILE64_SOURCE というオプションを付けてコンパイルすればファイルオフセットが 64bit になることが多いようだ (Solaris2.6・Solari8・ HP-UX 11i・Linux で確認。AIX ではちょっと違うらしい)。
世の中で広く使われている gzip のバージョンは 1.2.4 であるが、ファイルオフセットが 32bit な環境で make すると、ファイルオフセットが 32bit な gzip が生成され、2GB 超のファイルを扱うことができない。SunSite や Linux 標準の gzip はこのように make されたものが多いので、2GB 超のファイルに未対応なことが多いのである。この場合、Makefile の CFLAGS に、上記のオプションを追加して再コンパイルすれば解決する。
gzip-1.3.3 の configure は少し賢くて、64bit ファイルポインタが使える場合は上記オプションを勝手に追加してコンパイルしてくれるため、2GB 問題は起こらないだろう。
ちなみに、ファイルオフセットが 32bit なのか 64bit なのかは以下のソースをコンパイルして実行すればわかる。
#include <stdio.h>
#include <sys/types.h>
#include <sys/stat.h>
main(){
printf("%d\n", sizeof(off_t));
}
出力結果が 4 ならば 32bit、8 ならば 64bit である。4 と表示された場合でも、上記オプションを付けてコンパイルすると、大抵の環境では 8 に変わるだろう (今どきの OS ならば)。
****************************************************************
■
less ファイル表示プログラム (ページャ)
あるコマンドを実行結果や、ファイルの内容を見たいとき、1画面に収まりきらずスクロールしてしまって最初の部分が見えないことがある。そういう場合、
% ls -l | less
や
% less file.txt
などとすることでゆっくり見ることができる。
■
ls ファイル・ディレクトリを表示
-a 「.」 から始まるファイルも表示。「.」「..」も表示する。
-A 「.」 から始まるファイルも表示。「.」「..」は表示しない。
root が ls を実行した場合、常に -A オプションが付けられたものとして動作する。
-l ファイル、ディレクトリの詳細な情報を表示する
-T タイムスタンプを年月日時分秒まで表示 (要 -l オプション)
-o ファイルフラグを表示。BSD 系のみ (要 -l オプション)
>> コマンド chflags *
-1 (マイナスエルじゃなくてマイナスイチ) 1行につき1つのファイルの情報を表示
-C マルチカラムで表示 (-1 の逆)。
% ls | more
などとすると、ls が出力先がパイプだと判断し、自動的に -1 を指定したのと同じように動作するが、-C を付けるとそれを抑制し、1行に複数のファイルを表示する。
-F ファイルタイプの識別子を付ける。
ディレクトリの後ろに「/」、シンボリックリンクの後ろに「@」、実行形式ファイルの後ろに「*」をつける
-L シンボリックリンク自体ではなく、リンク先のファイルの情報を表示
-R 再帰的にディレクトリ以下のファイルを表示する。
つまり ls -R / で全てのファイルが表示されることになる
-c ファイルの変更日時ではなく、最後にファイルステータスを変更した日時を表示
>> 用語集 タイムスタンプ *
-u ファイルの変更日時ではなく、最後にファイルにアクセスした日時を表示
>> 用語集 タイムスタンプ *
-d ディレクトリを指定した場合、ディレクトリ以下のファイルではなくディレクトリ自体の情報を表示。
ls -l /usr/bin は、ls -l /usr/bin/* と同じような動作をするが、ls -ld /usr/bin だと、
drwxr-xr-x 2 bin bin 5120 Oct 7 05:26 /usr/bin
と、ディレクトリ自体の情報を表示する
-f ファイル名をソートせずに表示
-r 逆順にソートして表示
-t ファイルを変更した日時の順でソートする。最近どのファイルが更新されたか調べたいときは
% ls -lt | head
最近どのファイルが参照されたかを調べたいときは
% ls -lut | head
が便利。
-i ファイルの i-node を表示
>> コマンド ln *
-s 各ファイルのファイルシステムブロックの使用量を表示 (512バイト単位)
たとえ1バイトのファイルでも1ブロック (512バイト) を消費している。その消費量を表示する。ブロックの単位は環境変数 BLOCKSIZE で設定できる。
>> 環境変数 BLOCKSIZE *
>> 用語集 穴あきファイル *
-k -s オプションが指定された場合、使用量を 1K バイト単位で表示する
-x ファイルを横方向ではなく、縦方向にソートする
(-x オプションは SystemV 系と GNU の ls のみ)。
-q ファイル・ディレクトリ名の中に表示不可能な文字があった場合、`?' という文字に置き換えて表示する。このオプションはデフォルトで有効になっている。このおかげで日本語を含むファイル名を ls で表示しようとすると、???? などとなってしまう。この機能は、出力先がパイプやファイルだと抑制されるので、
% ls | less
% ls | cat
などとすると、日本語ファイル名を表示できる。
■
realpath 相対パスを絶対パスに展開する
■
rm ファイルの削除
-i 1つ1つのファイルについて本当に削除するか確認を求める
-r 再帰的に指定ディレクトリ以下を削除する
-f パーミッションに関係なく全て削除する。
■
rmdir ディレクトリの削除
■
split ファイルを複数のファイルに分割する。結合は cat で行う。
-b num numバイトごとに分割
-l num num行ごとに分割
ファイル sample を 1400キロバイトごとに分割するには
% split -b 1400k sample
とする。分割されたファイルは xaa、xab、xac ... となる。結合するには
% cat xaa xab xac > sample
とすればよい(xaa xab xacの順番のとおりに結合される)。
■
su root (スーパーユーザ) になる。他人の名前でログインする
-f ユーザの .cshrc を読み込む
-l 本当のログインのようにする
HOME、SHELL、PATH、TERM、USER 以外の環境変数の設定は捨てられる
-m 環境変数をそのままに残しておく。
HOME・SELL・USER など、環境変数を元のままにしておく。また、ログインシェルは元のユーザのシェルを使用する。
■
sudo 他ユーザ権限でコマンドを実行する
●オプション
-l ユーザに許されているコマンドの一覧を表示。
% sudo -l
Password: (パスワードを入力)
You may run the following commands on this host:
(root) /usr/local/sbin/visudo
(root) /sbin/shutdown
この例では、visudo と shutdown コマンドを root 権限で実行することができる。
-b コマンドをバックグラウンドで実行
-u 指定したユーザ権限でコマンドを実行。以下のようにすれば、anotheruser の権限で anycommand が実行できる。
% sudo -u anotheruser anycommand
■
tar アーカイバ。複数のファイルを1つにまとめる。
命令: 以下の中から必ず1つだけ指定しなければならない。
c tarファイルを新しく作る
x tarファイルを展開する
t tarファイルの内容を表示する
r tarファイルに追加する。z や Z オプションと同時には使えない。
オプション:
f tarファイルを指定する
一見、毎回 f オプションを指定する意味がないように思えるが、本来 tar はテープドライブに書き出すコマンドなので、f でアーカイブ名を指定しないとテープドライブのデバイス /dev/rst0 を対象に読み書きしてしまう。
p パーミッションや owner、group の情報を保存する。
これは展開時にのみ影響する。
v バーボーズモード。処理内容を詳しく表示する
パーミッションなどの詳細な情報が表示されるため、はじめのうちはアーカイブ作成・展開時に tar cvf や tar xvf などと v オプションを付けたくなるかもしれない。しかし、慣れてきたら v オプションを指定しないようにしよう。
なぜなら、アーカイブ作成・展開時に何かのエラーが標準エラー出力に表示されるかもしれないからだ。もし v オプションを付加すると、エラー表示が v オプションによる冗長出力に埋もれて気づかない可能性がある。
z gzip で圧縮・伸長する。このオプションをサポートしているのは GNU tar だけである。
% tar ztf foo.tar.gz (gzip -dc foo.tar.gz | tar tf - と同じ)
y bzip2 で圧縮・伸長する。このオプションをサポートしているのは GNU tar だけである。
% tar ytf foo.tar.bz2 (bzip2 -dc foo.tar.gz | tar tf - と同じ)
Z compressで圧縮・伸長する
% tar Zxvf foo.tar.Z
⇒ compress で圧縮されている foo.tar.Z を展開する。
O 抽出したファイルを標準出力に出力する (x オプションと併用)
% tar xvfO hoge.tar file1.dat > file2
⇒ hoge.tar から file1.dat を取り出し、file2 というファイル名で保存
C 指定のディレクトリにファイルを展開する
普通に
% tar xvf /dir/foo.tar
とすると、カレントディレクトリにファイルが展開される。/bar/ に展開したい場合は
% tar xvf /dir/foo.tar -C /bar
とする。これは
% (cd /bar ; tar xvf /dir/foo.tar)
と同じ。
カレントディレクトリ以下のファイルを archive.tar にまとめるには
% tar cvf /tmp/archive.tar .
*.tar.gz や *.tgz を扱う場合は z を付ける、ということを覚えておけばい
なお、GNU tar 以外の tar は z オプションがないので、gzip されたファイルを扱うには、以下のようにパイプでつなぐ必要がある。
% tar cvf - . | gzip -c > hoge.tar.gz
⇒ カレントディレクトリ以下を tar でアーカイブし、gzip で圧縮
登録:
投稿 (Atom)