Posts プログラミング基礎知識 - Linuxの基本コマンド
Post
Cancel

プログラミング基礎知識 - Linuxの基本コマンド

予備知識

ディストリビューション

LinuxにはDebianとかUbuntuCentOSRed HatFedoraというように色々なものがありますが、これらはディストリビューションと呼ばれているものです。Linux自体にこのような種類があるのではなく、Linuxの本体であるカーネルに一般利用者がインストールしたり、利用できる形にまとめ上げたもので、そのまとめ上げる団体が違うイメージです。 ざっくりと分けるとDebian系Red Hat系があり、UbuntuはDebian系で、CentOSFedoraRed Hat系ということになります。 これら2つのDebian系Red Hat系ではパッケージ管理の仕方等で違いがあり、若干戸惑うこともありますが、今回はインストール等が簡単なUbuntuを例に説明します。

シェルと端末

Linuxでなんらかの作業をしようと思うと、まず目にするのが「端末」です。Gnomeでは「端末」あるいは「GNOME端末」、KDEなら「コンソール」または「Konsole」です。

もしも「X Window」をインストールしていない時には、ログイン後ディスプレイに表示された画面が端末です。また、Linuxではありませんが、Macでは端末が「ターミナル」という英語で呼ばれています。

Linuxの多くのコマンドはこの端末を通して実行することになります。

端末に入力した文字列をシェルが受け取り、必要な処理を加えてシステムへその文字列を伝えることでシステムが応答を返し、シェルが仲立ちとなって端末にその応答を出力してくれます(標準出力)。

端末を起動させるとそこにはすでにシェルが起動していて、文字の入力を待ってくれています。シェルに関してはコンピュータの基本 シェル も参考にしてください。

1
[denn@CentOS ~]$

あるいは

1
$

のような表示に続いてカーソルが点滅していると思います。この表示されている部分を「プロンプト」または「コマンドプロンプト」といい、コマンドの入力を待っているわけです。この「コマンドプロンプト」に続けてコマンドを入力するところが「コマンドライン」で、コマンドを入力しエンターキーを押すと入力された1行がシェルに渡されます。そして、シェルがそれに対して適切な処理を行い応答を返してくれます。

例えば、いい加減な文字列をコマンドラインに入力してエンターキーを押すと(これをコマンドラインで~を叩くなどと言います)、

1
2
$ dfaldsa
bash: dfaldsa: コマンドが見つかりません

のように、シェル(上の場合は「Bash」)が返事をくれます。シェルが返してくれた返事の行にはプロンプトがありません。

コマンド

Windowsですと、プログラムファイルは拡張子がexeですが、Linuxにおいては特に拡張子は決まっていません。もちろん拡張子がなくてもOKです。 例えば、コマンドラインにおけるPHPの実行ファイルはWindowsではphp.exeですが、Linuxではphpです。

また、Linuxではただテキストファイルでも下の方で述べるchmodというコマンドで実行属性を付け、そのテキストファイルの1行目に#!/bin/shと書いておくと、そのテキストファイルを実行することができます。この#!は「シバンまたはシェバン (shebang) 」と呼ばれ、この後にを読み込むインタプリタを指定します。

つまり、ファイル(file.txt)の中に次のようなものが書いてあり、chmodというコマンドで実行属性が付いているとすると

>#!/bin/sh echo 'hello'

コマンドラインで下のように実行したら

1
2
$ sh file.txt
$ ./file.txt

どちらも、helloと標準出力されます。つまり、file.txtをどちらも実行している、ということになります。もしfile.txtがパスの通っているところあれば、最初の「./」は必要がないので、これから出てくるコマンド同様、どこからでも実行することが可能です。

helpとman

さて、シェルに渡せる正しいコマンドにはどのようなものがあるのでしょうか。ここでは、これだけは押さえておきたいコマンドを学習していくことにします。

学習に先駆けて コマンドの調べ方 を説明しておきます。一つのコマンドでもオプションがいくつもありすべてを覚えるのはたいへんです。また引数の順番も間違えやすいものです。そんな時に役に立つ調べ方です。

1.「調べたいコマンド」にスペースをあけて、「 --help」を入力してエンターキーを押すと簡単な使い方の説明が表示されます(「 --help」が使えない時には「 -h」を試してみてそれでも説明が表示されないときは下にある別の方法を試してみてください)。

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
$ ls --help
使用法: ls [オプション]... [ファイル]...
List information about the FILEs (the current directory by default).
Sort entries alphabetically if none of -cftuvSUX nor --sort is specified.

Mandatory arguments to long options are mandatory for short options too.
  -a, --all                  . で始まる要素を無視しない
  -A, --almost-all           . および .. を一覧表示しない
      --author               -l と合わせて使用した時、各ファイルの作成者を表示する
  -b, --escape               表示不可能な文字の場合に C 形式のエスケープ文字を表示する
      --block-size=SIZE      scale sizes by SIZE before printing them.  E.g.,
                               '--block-size=M' prints sizes in units of
                               1,048,576 bytes.  See SIZE format below.
  -B, --ignore-backups       do not list implied entries ending with ~
  -c                         with -lt: sort by, and show, ctime (time of last
...続く

のようにコマンド「ls」の使い方が表示されます。

  1. 次に「man」コマンドを試してみましょう。
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
$ 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  is  speci‐
       fied.

       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 ..
...続く

man」にスペースをあけて「調べたいコマンド」を入力します。この場合、標準出力されるのではなくlessというプログラムが文字を表示させています。終了するには、「q」を入力する必要があります。

  1. 最後にもう一つ「info」コマンドです。
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
$ info ls
File: coreutils.info,  Node: ls invocation,  Next: dir invocation,  Up: Directo\
ry listing

10.1 `ls': List directory contents
==================================

The `ls' program lists information about files (of any type, including
directories).  Options and file arguments can be intermixed
arbitrarily, as usual.

   For non-option command-line arguments that are directories, by
default `ls' lists the contents of directories, not recursively, and
omitting files with names beginning with `.'.  For other non-option
arguments, by default `ls' lists just the file name.  If no non-option
argument is specified, `ls' operates on the current directory, acting
as if it had been invoked with a single argument of `.'.
...続く

man同様に、終了するには「q」を入力してください。

カレントディレクトリ(作業ディレクトリ)

ディレクトリとは、ファイルをを入れておく部屋のようなものですが、シェルを立ち上げると、シェルは必ずどこかのディレクトリにいることになります(カレントディレクトリ、略してカレント、あるいは作業ディレクトリと言う場合も)。例えば、UbuntuやCentOSの場合は端末を立ち上げると/home/ログイン名がカレントディレクトリになっています。

ディレクトリの基本知識

LinuxにはWindowsとは違い、ドライブという概念がありません(コンピュータの基本 シェル 参照)。全てのディレクトリは/で表すルートから木の枝のように分岐していきます(あくまでも最初の/がルートで、その後のディレクトリとディレクトリの区切りに使う/は違います)。

次の例では、ルート(/)の下にhomevarいうディレクトリがあり、homeの下にchikkundennvarの下にはlibというディレクトリがあります。 そして、chikkunの下にworkwork2を含むいくつかのディレクトリが並んでいる感じになっています。

    /── home
    │   ├── chikkun
    │   │   ├── work
    │   │   ├── work2
    │   │   ├── ダウンロード
    │   │   ├── テンプレート
    │   │   ├── デスクトップ
    │   │   ├── ドキュメント
    │   │   ├── ビデオ
    │   │   ├── ピクチャ
    │   │   ├── ミュージック
    │   │   └── 公開
    │   └──denn
    │
    └─ var
       └── lib

絶対パスと相対パスとチルダ(~)

ルートからずっとつなげてディレクトリを表現する方法を絶対パスといい、上記のworkというディレクトリは/home/chikkun/workという表現になります。

それに対して、あるディレクトリを基準にして、別のディレクトリのパスを表現する方法を相対パスと言います。

具体的には、例えば端末を立ち上げて、カレントディレクトリが/home/chikkunの場合で説明しますと、

  1. .(ドット) ドット1つで、カレントディレクトリを表しますので、その1つ下のworkディレクトリは

    1
    
    ./work/
    

    もしくは./は省略できるので

    1
    
    work/
    

    となります。

  2. .. ドットが2つで1つ上のディレクトリを表しますので、1つ上のhomeディレクトリは

    1
    
    ../
    

    になります。また、dennというディレクトリは相対パスでは

    1
    
    ../denn/
    

    となります。それでは遠いlibディレクトリは

    1
    
    ../../var/lib/
    

    となり、../../で親の親(ここではルート)を意味しています。

  3. ~ 相対パスとは直接関係ありませんが、~(チルダ)はログインしている人のホームディレクトリになります。つまり、chikkunさんにとって

    1
    
    ~/work
    

    とすると、/home/chikkun/workの意味になります。

ファイルやディレクトリ関係の基本コマンド

ディレクトリやファイル関係の基本コマンドを、簡単に見ていきましょう。

コマンドコマンドの機能
pwd現在のディレクトリ名を表示するコマンド
mkdirディレクトリを作成するコマンド
lsファイル・ディレクトリを表示するコマンド
cdディレクトリを移動するコマンド
cpファイルやディレクトリをコピーするコマンド
mvファイルの移動、ファイル名を変更するコマンド
rmdir説明空のディレクトリを削除するコマンド
rmファイルやディレクトリを削除するコマンド
lessファイルの内容をページ単位で自由に閲覧するコマンド
catファイルの内容を標準出力するコマンド
touchテキストファイルで、中身のないものを作成するコマンド
echo引数の文字列を標準出力するコマンド
  1. pwd

    1
    2
    
    $ pwd
    /home/chikkun
    

    というようにのように、カレントディレクトリを絶対パスで答えてくれます(上記例はchikkunユーザでログインしている例)。pwdは「print working directory」の略です。

  2. mkdir ディレクトリを作成するコマンドです。例えばカレントディレクトリにworkというディレクトリを作成するときは、次のようにします。

    1
    
    $ mkdir work
    

    これで、カレントディレクトリ直下にworkディレクトリができます(work./workと同じでしたので、カレントの直下と言うことになります)。また、絶対パスで作成することも可能です。mkdirは「make directory」の略です。

    1
    
    $ mkdir /home/chikkun/work2
    
  3. ls lsコマンドはディレクトリを指定しない場合は、カレントディレクトリにあるファイルやディレクトリの一覧を出力します。日本語化されているUbuntuでは

    1
    2
    3
    
    $ ls
    examples.desktop  work2         テンプレート  ドキュメント  ピクチャ      公開
    work              ダウンロード  デスクトップ  ビデオ        ミュージック
    

    上記で作成したworkディレクトリとwork2ディレクトリがあります。 lsはよく-lオプション(ファイルの属性なども表示)、あるいは-a(ドットファイル1も対象にする)オプションを付けることがあります。

    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    
     $ ls -la
     合計 124
     drwxr-xr-x 18 chikkun chikkun 4096  5月 12 16:28 .
     drwxr-xr-x  4 root    root    4096  5月 12 14:51 ..
     -rw-------  1 chikkun chikkun  370  5月 12 14:53 .ICEauthority
     -rw-------  1 chikkun chikkun   63  5月 12 14:53 .Xauthority
     -rw-r--r--  1 chikkun chikkun  220  5月 12 14:51 .bash_logout
     -rw-r--r--  1 chikkun chikkun 3637  5月 12 14:51 .bashrc
     #中略
     -rw-r--r--  1 chikkun chikkun 8980  5月 12 14:51 examples.desktop
     drwxrwxr-x  2 chikkun chikkun 4096  5月 12 16:26 work
     drwxrwxr-x  2 chikkun chikkun 4096  5月 12 16:28 work2
     drwxr-xr-x  2 chikkun chikkun 4096  5月 12 14:53 ダウンロード
     drwxr-xr-x  2 chikkun chikkun 4096  5月 12 14:53 テンプレート
     drwxr-xr-x  2 chikkun chikkun 4096  5月 12 14:53 デスクトップ
     drwxr-xr-x  2 chikkun chikkun 4096  5月 12 14:53 ドキュメント
     drwxr-xr-x  2 chikkun chikkun 4096  5月 12 14:53 ビデオ
     drwxr-xr-x  2 chikkun chikkun 4096  5月 12 14:53 ピクチャ
     drwxr-xr-x  2 chikkun chikkun 4096  5月 12 14:53 ミュージック
     drwxr-xr-x  2 chikkun chikkun 4096  5月 12 14:53 公開
        
    
  4. cd カレントディレクトリを変更するコマンドがcd(「change directory」の略)で、次のように変更したいディレクトリを指定します。

    1
    2
    3
    
     $ cd work
     $ pwd
     /home/chikkun/work
    

    workディレクトリに移動したことがpwdでわかります。また

    1
    2
    
    $ cd
    $ cd ~
    

    の2つは同じ意味で、どちらもホームディレクトリにカレントディレクトリが移動します。

  5. cp ファイルやディレクトリをコピーするコマンドで(copyの省略です)、ディレクトリをコピーするには-rオプションが必要です。 また、cpには cp [ファイル名][別のファイル名] cp [ファイル名][コピー先のディレクトリ] の書き方ができるので、

    1
    
    $ cp filename.txt work/filename2.txt
    

    で、filename.txtをworkディレクトリにfilename2.txtとしてコピーできますし、また

    1
    
    $ cp filename.txt work/
    

    で、filename.txtをworkディレクトリに同じ名前でコピーします。またディレクトリの場合は-rオプションを付けて

    1
    
    $ cp -r dir1 dir2
    

    で、ディレクトリdir1をdir2という名前でコピーします(dir1にあるファイルなども全てコピーされるので、dir1とdir2は中身が全て同じディレクトリになります)。

    1
    
    $ cp -r dir1 work/
    

    で、dir1をworkディレクトリの下にコピーします。

  6. mv ファイルやディレクトリを移動させます(moveの省略です)。cpと違い元のファイルやディレクトリは残りません。 mvにも mv [元ファイル名][新しいファイル名] mv [移動させたいファイル名][移動先のディレクトリ] の2つの書き方があって ファイルのmvでカレントディレクトリに

    1
    
    $ mv filename.txt filename2.txt
    

    で、filename.txtをfilename2.txtという名前で移動します。この場合は名前を変更したのと同じになります。また

    1
    
    $ mv filename.txt work/ilename2.txt
    

    で、filename.txtをworkディレクトリにfilename2.txtとして移動します。この場合は移動になります。

    1
    
    $ mv filename.txt work/
    

    で、filename.txtをカレントディレクトリ直下のworkディレクトリに移動します。さらに

    1
    
    $ mv dir1 dir2
    

    で、ディレクトリdir1をdir2という名前で移動します。

  7. rmdir rmdirはディレクトリの削除するコマンドですが(remove directoryの省略です)、どのディレクトリが空(ファイルやディレクトリが1つもない)でないと実行できません。したがってあまり使う機会がないのかもしれませんが、逆に、間違って次に紹介するrm -rfを利用すると、間違って全てのファイルを削除してしまうと言う失敗がないので、一長一短です。下の例ではdir1が空でdir2が空じゃない場合です。

    1
    2
    3
    
    $ rmdir dir1
    $ rmdir dir2
    $ rmdir: `dir2' を削除できません: ディレクトリは空ではありません
    
  8. rm ファイルやディレクトリを削除します(removeの省略です)。ディレクトリの場合は-rが必要です。

    1
    
    $ rm filename.txt
    

    で、filename.txtが削除されます。

    1
    
    $ rm -r dir2
    

    で、dir2ディレクトリを中にあるファイルごと削除します。

  9. less ファイルの中身を閲覧するコマンドで、ファイル名を指定してそのファイルの内容を表示させます。色々な便利な機能がありますが、基本、スペースで次の画面に行き、qで終了します。次のcatの場合は画面上に全ての文字が出力されるのに対して、lessは1ページずつ見せてくれるので、文字数が多いファイルではこちらの方が便利かもしれません。

    1
    
    $ less filename.txt
    

    で。filename.txtの中身が画面に表示されます。

  10. cat 指定したテキストファイルの中身を画面上に出力(標準出力)するコマンドです。

    1
    
    cat filename.txt
    

    で、filename.txtの中身が全て画面上に出力されます(なので、あまり文字がたくさんあるファイルでは、最初の頃の文字列は画面から消えてしまうので、lessを使った方が良いかもしれません。

  11. touch 指定したファイル名で中身になにもないテキストファイルを作成します。

    1
    2
    3
    4
    
    $ touch file.txt
    $ ls -l
    合計 0
    -rw-rw-r-- 1 chikkun chikkun 0  5月 14 11:16 file.txt
    

    で、file.txtという名前で、ファイルサイズ0バイトのファイルができています。

  12. echo 引数を標準出力するコマンド。単に画面に文字列が表示されるというものですが、リダイレクトという方法を利用して、画面への出力(標準出力)でなく、ファイルに書き出すことなども可能です(新規の>と追加の>>の2種類)。}

    1
    2
    3
    4
    5
    6
    7
    8
    9
    
    $ echo "hello"
    hello
    $ echo "hello" > tmp.txt   # tmp.txtというファイルを新たに作成して、helloという文字を1行目に追加
    $ cat tmp.txt 
    hello
    $ echo "world" <span>>></span> tmp.txt  # tmp.txtに、元の文字列の最後の次の行(ここでは2行目)にworldという文字を追加
    $ cat tmp.txt 
    hello
    world
    

アクセス権限関係のコマンド

コマンドコマンドの機能
chown所有者(グループも可)を変更するコマンド
chmodアクセス権限を変更するコマンド
adduserユーザーを追加するコマンド
addgroupグループを追加するコマンド

アクセス権限

ファイルやディレクトリには、アクセス権限という属性があります。

アクセス権限とは,ユーザやグループがファイルやディレクトリに対してアクセスする際、「読み」「書き」「実行」を許可するのか不許可にするかという権限のことでです。 もともと、Linuxは1つのシステムを複数のユーザーで共有できる、マルチユーザー型のシステムですので、システム上のデータをどのユーザーでも自由に操作可能なのでは、セキュリティ上にも問題になります。そこで、ファイルやディレクトリを誰に対して、どういう操作を許可するのかというアクセス権を設定する仕組みがLinuxには組み込まれているのです。   上記で出てきたls -lコマンドで出力されるファイルの属性を再掲します(一部省略)。

1
2
3
4
$ ls -l
-rw-r--r--  1 chikkun chikkun 8980  5月 12 14:51 examples.desktop
drwxrwxr-x  2 chikkun chikkun 4096  5月 12 16:26 work
drwxrwxr-x  2 chikkun chikkun 4096  5月 12 16:28 work2

で、これは次のような意味になっています。

アクセス権

rファイルの読み込み ディレクトリの内容の表示
wファイルへの書き込み ディレクトリ内でのファイルの作成と削除
xファイルの実行 ファイルの参照、カレントディレクトリの移動
-該当権限なし

つまり、上の例のworkというディレクトリは、所有者(owner)とグループ(group)には「読み込み(r)・書き込み(w)・ディレクトリの移動(x)」が許可されており、他人(other)には「書き込み」だけが許可されていません。 また、examples.desktopというファイルは所有者には「読み込み・書き込み」の2つが、グループと他人には「読み込み」のみが許可されています(どちらも実行権限がありません)。

では、そもそも所有者グループ他人とは何でしょうか。

所有者グループ他人

所有者とはls -lで出力される

1
2
$ ls -l
-rw-r--r--  1 chikkun chikkun 8980  5月 12 14:51 examples.desktop

の1つ目のchikkunがexamples.desktopというファイルの所有者ということになります。通常はファイルを作成した人が所有者になります。ただ、後述するchownコマンドで変更が可能です。

そして2つ目のchikkunがグループです。通常のアカウントはデフォルトでユーザ名と同じグループに所属しています。 上記で見たようにアクセス権限は所有ユーザーと他人とは別に、それらを所有するグループに対して読み書き実行のパーミッションを設定することが可能です。つまりあるグループに複数のユーザが加わって、そのユーザ達でアクセス権限を許可するというような使い方ができるわけです。また、1アカウントが複数のグループに所属する事も可能です。

もちろん、そのファイルの所有者でもなく、そのグループにも参加していない人が他人ということになります。

su、sudoコマンド

そもそもユーザ(アカウント)には、システム管理者と一般ユーザがいます。

  1. システム管理者 システム管理者用のアカウントはrootで、ルート、ルートユーザ、スーパユーザなどと呼ばれます。 システムに重要なファイルでも、他人のファイルでもアクセス制限の壁を越えて削除することが可能です。反面、なんらかのミスで消してはならないファイルを消してしまい、OSが立ち上がらない等の問題が起こってしまう可能性もあり、可能な限りrootでの作業を避けた方が良いでしょう。
  2. 一般ユーザー システムを利用する側のユーザは一般ユーザーと呼ばれます。 rootという名前以外の名前を持ち、使えるコマンドや多くのファイルへのアクセスに制限があります。

一般ユーザは所有者が自分でないファイルに関しては、通常、何もできないのでApacheのhttpd.confを編集したりすることができません。 では、どうすれば良いかというと、上記の1であるrootユーザになるか、sudoコマンドを利用する必要があります。

  1. suコマンド suコマンドは一般ユーザがrootになるためのコマンドです。パスワードが聞かれるので、rootのユーザのパスワードを正しく入力して、改行すればrootになれます。
  2. sudoコマンド sudoコマンドは、suと違いrootになるのではなく、root権限が必要なコマンドを叩きたいときに利用します(色々な使い方もできますが、ここではその一部を紹介しています)。

    1
    
    $ sudo emacs /etc/httpd/conf/httpd.conf
    

    などと、実行したい(ここではemacs)コマンドの前にsudoを付けて実行します。

    • sudoは、suのように必要なときだけ実行できるので安全と言われています(rootになって作業をして、一般ユーザに戻るのを忘れて作業をしてしまう、というようなミスがないので)。

    • UbuntuのデフォルトやMacなどでは、本来そのコンピュータをサーバではなく、個人で利用することが前提になっているような場合、sudoが利用できるようになっていて、suでrootにはなれない、あるいはrootになる別な方法があるような場合があります。

    • sudoは1回目はパスワードを聞かれますが、あまり時間が経っていないと、再度sudoしてもパスワードが聞かれません。

    • Ubuntuでは、rootのパスワードとかを設定していないような場合、suではrootになれないので

      1
      
      $ sudo -i
      

      1
      
      $ sudo su
      

      で、rootになります(後者はパスワードを聞いて来ますが、rootのパスワードではなく、その一般ユーザのパスワードを入力します)。

    • 反対にCentOS等ではsudoはインストールされていますが、設定がなされていないことがあり、すぐには使えないことがあります。

アクセス権限のコマンド

  1. chown chown [オプション] [ユーザ]:[グループ] [ファイルやディレクトリ] 上記の「:」 は「.(ドット)」でも可能で、グループを指定しないと所有者だけの変更になります。このコマンドは自分以外の所有者のファイルを変更するか、自分が所有者のファイルを他の人の所有にするので、sudoコマンドが必要です。 chgrpでもグループを変える場合に利用しますが、全てchownで代行できます。

    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
    
    $ cd ~/work
    $ pwd
      /home/chikkun/work
    $ touch file.txt
    $ ls -l
      drwxrwxr-x  2 chikkun chikkun 4096  5月 14 11:16 .
      drwxr-xr-x 20 chikkun chikkun 4096  5月 13 18:39 ..
      -rw-rw-r--  1 chikkun    chikkun    0  5月 14 11:16 file.txt
    $ sudo chown denn file.txt                                           # 所有者だけdennに
    $ ls -l
      drwxrwxr-x  2 chikkun chikkun 4096  5月 14 11:16 .
      drwxr-xr-x 20 chikkun chikkun 4096  5月 13 18:39 ..
      -rw-rw-r--  1 denn    chikkun    0  5月 14 11:16 file.txt
    $ sudo chown chikkun file.txt                                        # 所有者をchikkunに戻す
    $ ls -l
      drwxrwxr-x  2 chikkun chikkun 4096  5月 14 11:16 .
      drwxr-xr-x 20 chikkun chikkun 4096  5月 13 18:39 ..
      -rw-rw-r--  1 chikkun    chikkun 0  5月 14 11:16 file.txt
    $ sudo chown :denn file.txt                                          # グループだけdennに
    $ ls -l
      drwxrwxr-x  2 chikkun chikkun 4096  5月 14 11:16 .
      drwxr-xr-x 20 chikkun chikkun 4096  5月 13 18:39 ..
      -rw-rw-r--  1 chikkun denn       0  5月 14 11:16 file.txt
    $ sudo chown :chikkun file.txt                                       # グループをchikkunに戻す
    $ sudo chown denn:denn file.txt                                      # 所有者もグループもdennに
    $ ls -l
      drwxrwxr-x  2 chikkun chikkun 4096  5月 14 11:16 .
      drwxr-xr-x 20 chikkun chikkun 4096  5月 13 18:39 ..
      -rw-rw-r--  1 denn    denn       0  5月 14 11:16 file.txt
    
  2. chmod

    上記でアクセス権限に触れましたが、これらは変えることが可能で、それがchmodコマンドです。自分のファイルを変更する文にはsudoは必要ありませんが、他のユーザーのものを変更するようなときには必要になります。 その変更方法には2つの方法があります。 1つ目が、[所有者→u|グループ→g|他人→o]に対して、[読み込み→r|書き込み→w|実行→x]を指定する方法です。もう1つが、数字を使う方法です。

    1. chmod [ugoa] [+-=] [rwx] [ファイルやディレクトリ] 権限はカンマで区切ることによりいくつでも記述できて、最初のユーザーの設定項目を省略したときは、すべてのユーザーと同等の意味になります。

      u所有者の権限(user)
      gグループの権限(group)
      oその他のユーザーの権限(other)
      aすべての権限(all)
      +後に記述した権限を付加する
      -後に記述した権限を削除する
      =後に記述した権限にする
      r読み込み権限(read)
      w書き込み権限(write)
      x実行権限(eXecution)

      以下に例を示します。

      1
      2
      3
      4
      5
      6
      7
      8
      9
      10
      11
      12
      13
      
       $ cd ~/work
       $ ls -la
       合計 8
       drwxrwxr-x  2 chikkun chikkun 4096  5月 14 11:16 .
       drwxr-xr-x 20 chikkun chikkun 4096  5月 13 18:39 ..
       $ echo '#!/bin/sh' > file.txt                             # 1行目に「#!sh」があるfile.txtを作成
       $ echo 'echo "hello!"' >> file.txt                        # 2行目に「echo 'hello'」を追加
       $ ls -l
       合計 4
       -rwxrw-r-- 1 chikkun chikkun 23  5月 15 09:19 file.txt
       $ chown u,g+x file.txt                                    # file.txtの所有者とグループに対して実行権限(x)を付加
       $ ./file.txt                                              # file.txtを実行
        hello                                                    # 「hello」が出力される
      

      上記のchown u,g+x file.txtは所有者(u)とグループ(g)に実行権限(x)を付加しているという意味になります。 したがって、./file.txtで実行が可能になっています。

    2. chmod 3桁の数字 [ファイルやディレクトリ] 所有者の数字・グループの数字・他人の数字というように、並べます。そして、その数字の意味は次の表のようです。

      数字対応する属性
      0
      1–x
      2-w-
      3-wx
      4r–
      5r-x
      6rw-
      7rwx


脚注
  1. ファイル名がドットで始まるファイルで、Linuxでは設定ファイルとして利用されることが多く、一隠しファイルになっていて、デフォルトではlsコマンド等では、このドットファイルを無視するようになっている。したがって-aオプションを付けないと表示されません。 

シェア