【しばらく編集不可モードで運営します】 編集(管理者用) | 差分 | 新規作成 | 一覧 | RSS | FrontPage | 検索 | 更新履歴

UNIX(Linux)のコマンドを上手に使って作業を楽しようのコーナー - さくさくとね。

目次

さくさくとね。

ファイルモードの変更 chmod (そ)

 r+w+x
 読み 4
 書き 2
 実行 1

chmod 660 sample.c

 再帰的に変更 
chmod -R 660 sample/

ビット演算が苦手な方は

これらの組み合わせで

例:chmod ug+w files

C言語でも変更できます。chmod関数

 #include <sys/stat.h>
 int chmod(const char *path, mode_t mode)
 #include <sys/stat.h>
 #include <stdio.h>

 int main(void)
 {
    chmod( "sample2.c",0777);
    return 0;
 }

文字を連結する(そ)

 $ STRING1=Happy
 $ STRING2=DokiDoki
 $ MOZIRETU=$STRING1$STRING2
 $ echo $MOZIRETU 
 HappyDokiDoki

sedを使う。まず簡単なものから Perlで書いてみる(そ)

 #!/usr/bin/perl
 $str = "How I wonder what you are.\n";
 print $str;
 $str =~ s/what/who/;
 print $str;

$ perl henkan.pl

How I wonder what you are.

How I wonder who you are.

 これと同じことをsedでやってみましょう

 #!/bin/sh

 str="How I wonder what you are"
 echo $str
 str=`echo "$str" | sed -e "s/what/who/" `
 echo $str

$ sh henkan.sh

How I wonder what you are

How I wonder who you are

 できましたでしょうか? これを見るとああラリー氏はsedコマンドと
 同じ呪文をPerlに取り組んだのだなと 類推することができます。

コマンドの場所を調べる(そ)

 
 $ type sh
 sh is /bin/sh
 $ type perl
 perl is /usr/bin/perl
 $ type ruby
 ruby is /usr/bin/ruby
 $ type csh
 csh is /bin/csh
 $ type tcsh
 tcsh is /bin/tcsh
 $ type bash
 bash is /bin/bash

改行コードをチェックする(そ)

 $ od -tc samplelist6_2.c
 0000000   #   i   n   c   l   u   d   e       <   s   t   d   i   o   .
 0000020   h   >  \n  \n   /   *       ?  ?  ?  ?  ?  ?  ?  ?  ?
 0000040   ?  ?   ?  ?  ?  ?  ?  ?  ?  ?  ?  ?  ?  ?  ?  ?
 0000060   ?  ?  ?  ?  ?      (   c   h   a   r       ?  ?  ?  ?
 0000100   ?  ?  ?  ?  ?  ?  ?  ?  )   *   /  \n  \n   i   n   t
 0000120       C   h   a   r   F   u   n   c   L   e   s   s   (   c   o 

ファイルの空き容量を調べる(そ)

$ df -k
 ファイルシステム      1k-ブロック 使用済   使用可 使用率% マウント場所
 /dev/hd?*              ?039592   ?069180   1714408  ?5% /
 /dev/hd?*              ?233248   ?037424   4195824  ?0% /mnt/win
 /dev/hd?*              ?660604   ?709764   1764892  ?0% /home
 /dev/hd?*              ?047724   ?485552   4254964  ?6% /mnt/itizi
 /dev/hd?*              ?047724   ?001036   3739480  ?5% /mnt/itizi2
 /dev/hd?                 19472     19472         0 100% /mnt/cdrom
 /dev/sd?                614224    257520    356704  42% /mnt/mo

メモリを見る(そ)

$ cat /proc/meminfo
        total:    used:    free:  shared: buffers:  cached:
 Mem:  520990720 461414400 59576320 113258496 212582400 74948608
 Swap: 139788288  7262208 132526080
 MemTotal:    508780 kB
 MemFree:      58180 kB
 MemShared:   110604 kB
 Buffers:     207600 kB
 Cached:       73192 kB
 SwapTotal:   136512 kB
 SwapFree:    129420 kB

basename dirnameを使う(そ)

$ basename ./samplelist6_1.c samplelist6_1.c
 分かるかなこれで これ使ったことないから分からん ファイル名を取り出す
$ dirname ./samplelist6_1.c .
 こっちはディレクトリを取り出す
 

画面のエコーバック(そ)

 シェルスクリプトなどでパスワードを要求するようなスクリプトを
 作成したい場合は?
stty -echo echo "Enter your password" read PASSWORD stty echo
 とすれば良い。"stty -echo"は画面に何も表示されなくなります(エコーバックがない
 と言う) "stty echo"で戻ります。

/dev/null ごみ箱の使いかたをマスターしよー!!(そ)

 シェルスクリプトなんかを見ていたりすると良くある呪文
$ command > /dev/null 2>&1
 っていうのに良く遭遇します。そこでこの呪文をマスタしよう。
 まずファイルディスタプリタについて説明します。
 ファイルディスタプリタ 意味
          0             標準入力
          1             標準出力
          2             エラー出力
 まずファイルディスタプリタについて勉強しましょう。
 習うより慣れろで 教えますのでついてきてください。
 じゃあ最初に 画面にgamenと表示してください。
$ echo gamen gamen
 できましたか? この今ディスプレイ状に表示されてるのが標準出力と言いま
 す。では次にこれをファイルhogehogeに出力先を変えてください。
$ echo gamen > hogehoge $ cat hogehoge gamen
 できましたか?これは標準出力先をファイルhogehogeに変えているわけですか
 ら
$ echo gamen 1> hogehoge $ cat hogehoge gamen
 とも書くことができます。
 それでは次に hogehogeファイルと存在しないnothingファイルの中身を表示
 してください
$ cat hogehoge nothing gamen cat: nothing: そのようなファイルやディレクトリはありません
 nothingは存在しませんから エラーが出力されています。これがエラー出力
 です。
 それでは hogehogeファイルとnothingファイルをdokidokiファイルにまとめ
 てみて下さい。
$ cat hogehoge nothing > dokidoki cat: nothing: そのようなファイルやディレクトリはありません $ cat dokidoki gamen
 どうやらエラーの方は書き込まれていないようです。
 エラーを書き込むには2番を指定してやれば 上記の類推からできそうですね。
$ cat hogehoge nothing 2> error gamen $ cat error cat: nothing: そのようなファイルやディレクトリはありません
 おや 今度はgamenが書き込まれてませんね。もう一度dokidokiファイルにま
 とめてみましょう。
$ cat hogehoge nothing > dokidoki 2>&1 $ cat dokidoki gamen cat: nothing: そのようなファイルやディレクトリはありません
 おおっ!! 今度はできましたね。この記述は左から右に読んでいきます。
'' 標準出力をdokidokiファイルに送り その後 エラー出力を標準出力に送る
 つまりエラー出力もdokidokiファイル行きとなる""
 分かりましたか?? 
 ところで /dev/nullとは何でしょう? これはMSでいうごみ箱だと思ってかま
 いません。分かりましたね。良く見かける
cat hogehoge nothing > /dev/null 2&>1
 とは画面上に出力される標準出力もエラーもみんなごみ箱直行!! という意味
 なのです。難しくなんてないでしょ。分かっちゃえば。簡単 簡単!!

bashの表現を使って楽をしよう!!

ワイルドカード

locateを使う

基本

findを使う(そ)

目的のファイルhogehogeを見つけ出す root以下:

rootからhome以下を対象外として検索

カレントディレクトリ中の全てを表示

あえてlsを使う(Coffee)

何らかの事情でfindが電磁の狭間へと消失してしまったとします。痛い状況です。しかし、ファイル名だけの取得なら、(ありがたいことに)別の手段があります。

これだとルートフォルダから探すだけです。なので少し変えて、

これで三階層までのディレクトリ内のファイルリストからgrepできます。-aオプションもつけられるのなら、.(ピリオド)から始まるファイルでもなんとかなります。

あえてlsすら使わない(Coffee)

うっかりlsも消してしまったとします。よくあることです(笑顔)。本当にカレントフォルダのファイル名が読めればよいだけなら、まだ解決策はあります。

問題は、.(ピリオド)で始まるファイル名が出力されず、また、半角でファイル名が区切られていて出力をgrepに投げにくいという点です。まあ、こんなめったに起きない状態でそんなささいなことがさらに問題を引き起こすことになることは無いと、信じたいものです。

echoで.(ピリオド)で始まるファイル名を出力する

出力があまりに多い時は次のように対処

見にくい時は改行で区切る


UNIX(Linux)コマンド関連目次?