Linux基本操作指南2

Linux基本操作指南2

目次- Linux基本操作指南2

  • ファイルディレクトリ構造
  • ファイル命名規則
  • ファイルシステム構造
  • Linuxアプリケーションの構成要素
  • 絶対パスと相対パス
  • ディレクトリ名とベース名
  • ディレクトリの切り替え
  • ホームディレクトリへの移動
  • 直前にいたディレクトリへの戻り
  • 現在の作業ディレクトリの表示
  • ディレクトリまたはファイルの一覧表示
  • Linuxにおけるディレクトリタイプ
  • ファイルステータスの確認
  • touchコマンド
  • ファイルワイルドカード
  • ディレクトリの作成
  • ディレクトリツリーの表示
  • ディレクトリの削除
  • ファイルとフォルダのコピー
  • ファイルの移動と名前変更
  • ファイルの削除
  • リンク
  • ソフトリンク
  • ハードリンク
  • ファイルタイプの確認
  • 入力と出力
  • I/Oリダイレクト
  • 標準入力とエラー入力の別々保存
  • すべての出力を統合
  • ファイルからのstdin入力
  • 複数行をstdinに送信
  • パイプ

ファイルディレクトリ構造

  • ファイルとディレクトリは逆さの木構造で整理されている
  • ファイルシステムはルートディレクトリ「/」から始まる
  • ファイル名は大文字と小文字を区別する
  • 隠しファイルは「.」で始まる
  • パスの区切り文字は「/」

ファイル命名規則

  • ファイル名の最大文字数は255文字

  • パスを含めたファイル名の最大文字数は4095文字

  • カラーコード表示

  • 青色ファイル → ディレクトリ

  • 緑色ファイル → 実行可能ファイル

  • 赤色ファイル → 圧縮ファイルまたはパッケージファイル

  • 淡い青色ファイル → リンクファイル(主にlnコマンドで作成)

  • 白色ファイル → 通常のファイル(テキストファイル、設定ファイル、ソースコードなど)

  • 赤く点滅:リンクファイルに問題があることを示す

  • 黄色:デバイスファイル

  • 灰色ファイル → その他のファイル

  • スラッシュとNULL以外のすべての文字を使用可能

  • 大文字と小文字は区別される

ファイルシステム構造

  • /boot システム起動ファイルの格納場所、カーネルファイルやブートローダーが含まれる
  • /bin すべてのユーザーが使用できるコマンド
  • /sbin 管理用コマンド
  • /lib システム起動時に必要な基本ライブラリファイル (.soで終了)
  • /lib64 X86_64システム専用の補助ライブラリファイル
  • /etc 設定ファイルの格納場所
  • /home/USERNAME 一般ユーザーのホームディレクトリ
  • /root 管理者のホームディレクトリ
  • /media ポータブルデバイスのマウントポイント
  • /mnt 一時ファイルのマウントポイント
  • /dev デバイスファイルと特殊ファイルの格納場所
  • /opt サードパーティ製アプリケーションのインストール場所
  • /tmp 一時ファイルの格納場所
  • /usr インストールされたプログラムの格納場所
  • /var 変化の多いファイル(ログなど)の格納場所
  • /proc カーネルとプロセスに関する仮想ファイル
  • /sys システムハードウェアに関するファイルの出力
  • /srv システムサービスが使用するデータ

Linuxアプリケーションの構成要素

  • バイナリファイル
  • /bin
  • /sbin
  • /usr/bin
  • /usr/sbin
  • /usr/local/bin
  • /usr/local/sbin
  • ライブラリファイル
  • /lib
  • /lib64
  • /usr/lib
  • /usr/lib64
  • /usr/local/lib
  • /usr/local/lib64
  • 設定ファイル
  • /etc
  • /etc/name
  • /usr/local/etc
  • ヘルプファイル
  • /usr/share/man
  • /usr/share/doc
  • /usr/local/share/man
  • /usr/local/share/doc

絶対パスと相対パス

  • 絶対パス
  • ルートから始まる
  • ファイルの完全な場所を示す
  • 任意のファイルまたはディレクトリにアクセス可能
  • 相対パス
  • ルートから始まらない
  • 現在の位置からの相対的な位置を示す
  • ファイルまたはディレクトリを簡潔に表現可能
  • . は現在のディレクトリ
  • .. は親ディレクトリ

ディレクトリ名とベース名

[root@localhost log]#basename /etc/sysconfig/network-scripts/ifcfg-ens33 
ifcfg-ens33
[root@localhost log]#basename /etc/sysconfig/network-scripts
network-scripts
[root@localhost log]#dirname /etc/sysconfig/network-scripts
/etc/sysconfig
[root@localhost log]#dirname /etc/sysconfig/network-scripts/ifcfg-ens33 
/etc/sysconfig/network-scripts

ディレクトリの切り替え

cd コマンドでディレクトリを変更する

  • 相対パスを使用可能
  • 絶対パスを使用可能

ホームディレクトリへの移動

[root@localhost log]#cd 
[root@localhost ~]#

直前にいたディレクトリへの戻り

[root@localhost ~]#cd /etc/sysconfig/network-scripts/
[root@localhost network-scripts]#cd -
/root
[root@localhost ~]#cd -
/etc/sysconfig/network-scripts

現在の作業ディレクトリの表示

pwd コマンドで現在のディレクトリを表示する

[root@localhost network-scripts]#pwd
/etc/sysconfig/network-scripts
# リンク先の実際のディレクトリを表示
[root@localhost /]#cd lib
[root@localhost lib]#pwd -P
/usr/lib

ディレクトリまたはファイルの一覧表示

ls コマンドでリストを表示する

コマンド形式:Usage: ls [OPTION]... [FILE]...

ls -a 全てのファイルを表示
[root@root ~]# ls -a
.                .cshrc  file15  file3  .passwd.swo
..               file1   file16  file4  .tcshrc
anaconda-ks.cfg  file10  file17  file5  teaching_plan.zip

ls -l 長形式でファイルリストを表示
[root@root ~]# ls -l
total 8
-rw-------. 1 root root 1414 Aug 22  2019 anaconda-ks.cfg
-rw-r--r--. 1 root root    0 Mar  1 18:28 file1

-rw-r--r--.    1        root     root      0    Aug 22 17:21  10
権限      ハードリンク数  所有者      グループ     サイズ  更新日時    ファイル名

ls -R 再帰的にディレクトリを表示
[root@root ~]# ls -R
.:
anaconda-ks.cfg  file12  file16  file2   file5  file9
file1            file13  file17  file20  file6  teaching_plan.zip

ls -d ディレクトリ自体を表示
[root@root ~]# ls -d
.

ls -1(数字1) ファイルを1行ずつ表示
[root@root ~]# ls -1
anaconda-ks.cfg
file1
file10
file11
file12


ls -S ファイルサイズ順に並び替え
[root@root ~]# ls -S
teaching_plan.zip  file11  file15  file19  file4  file8

ls -r 逆順で表示
[root@root ~]# ls -r
teaching_plan.zip  file6  file20  file17  file13  file1

ls -t 時間順に並び替え
[root@root ~]# ls -t
file18  file11  file15  file3  file7  teaching_plan.zip

ls -lh 人間が読める形式で表示
[root@root ~]# ls -1h
anaconda-ks.cfg
file1
file10
file11
file12
file13

ls -d */ カレントディレクトリ内のフォルダのみ表示
l. 隠しファイルのみ表示


# ファイルの作成日時を変更
[root@root ~]# touch -c -m -t 201301211925 b19
[root@root ~]# ll b19
-rw-r--r--. 1 root root 0 Jan 21  2013 b19

# ls -l は ll と同じ
[root@root ~]# ls -l b19
-rw-r--r--. 1 root root 0 Jan 21  2013 b19
[root@root ~]# ll b19
-rw-r--r--. 1 root root 0 Jan 21  2013 b19

Linuxにおけるディレクトリタイプ

    • ファイルを表す
  • d ディレクトリを表す
  • b ブロックデバイス
  • c 文字デバイス
  • l シンボリックリンクファイル
  • s ソケット

ファイルステータスの確認

  File: ‘anaconda-ks.cfg’
  Size: 1747      	Blocks: 8          IO Block: 4096   regular file
Device: fd00h/64768d	Inode: 33574992    Links: 1
Access: (0600/-rw-------)  Uid: (    0/    root)   Gid: (    0/    root)
Context: system_u:object_r:admin_home_t:s0
Access: 2019-08-22 12:09:03.288000381 +0900 # アクセス時間
Modify: 2019-08-22 11:47:12.262947345 +0900 # 変更時間
Change: 2019-08-22 11:47:12.262947345 +0900 # 変更時間
atime アクセス時間  ファイル内容を読むと更新される
mtime 変更時間  内容が変更されると更新される
ctime 変更時間  メタデータが変更されると更新される

touchコマンド

空ファイルを作成し、更新日時を変更します。ファイルが存在する場合は更新日時を変更し、存在しない場合はファイルを作成します。

-a atimeとctimeのみを更新

-m mtimeとctimeのみを更新

ファイルワイルドカード

    • すべての文字列
  • ? 任意の1文字
  • ~ ユーザーのホームディレクトリ
  • [123] いずれかの文字
  • [^123] 除外
  • [0-9] 数字
  • file[a-z] 英小文字(注意:Zを含まない)
  • file[A-Z] 英大文字(注意:aを含まない)
  • [:lower:] 小文字
  • [:upper:] 大文字
  • [:alpha:] すべての英文字 a-zA-Z
  • [:alnum:] 英数字
  • [:digit:] 数字

ディレクトリの作成

mkdir コマンドでディレクトリを作成します

  • -p 再帰的に作成
  • -v 処理の詳細を表示

ディレクトリツリーの表示

インストール方法:yum install -y tree

tree コマンドでディレクトリツリーを表示します

[root@root ~]# tree
.
├── anaconda-ks.cfg
├── file1
├── file10
├── file11
├── file12
├── file13
├── file14
├── file15
├── file16
├── file17
├── file18
├── file19
├── file2
├── file20
├── file3
├── file4
├── file5
├── file6
├── file7
├── file8
├── file9
└── teaching_plan.zip

0 directories, 22 files

-d ディレクトリのみを表示

[root@root ~]# tree -d
.

0 directories

-L # 指定した階層までを表示

[root@root ~]# tree -L 1
.
├── anaconda-ks.cfg
├── file1
├── file10
├── file11
├── file12
├── file13
├── file14
├── file15
├── file16
├── file17
├── file18
├── file19
├── file2
├── file20
├── file3
├── file4
├── file5
├── file6
├── file7
├── file8
├── file9
└── teaching_plan.zip

0 directories, 22 files

ディレクトリの削除

rmdir コマンドで空のディレクトリのみを削除できます

-p 親ディレクトリも再帰的に削除

-v 削除過程を表示

rm -rf 非空ディレクトリを削除する

ファイルとフォルダのコピー

cp コマンドでファイルやフォルダをコピーします。デフォルトでは別名として動作し、元のコマンドは上書き確認なしです。

Usage: cp [OPTION]... [-T] SOURCE DEST
  or:  cp [OPTION]... SOURCE... DIRECTORY
  or:  cp [OPTION]... -t DIRECTORY SOURCE... 
  -i プロンプトを表示
  -n 上書きしない
  -r -R 再帰的にコピー
  -d リンクファイルのみをコピーし、元ファイルはコピーしない
  -a アーカイブモード
  -v 処理過程を表示
  -b 元ファイルをバックアップ
  --backup=number バックアップファイルに数字を付ける
  -p 属性を保持

  • ソースファイルがファイルの場合
  • 目標がファイル
  • 目標ファイルが存在しない場合、新しいファイルを作成し、内容を書き込む
  • 目標ファイルが存在する場合、既存のコマンドはそのまま上書きするため、-iオプションでユーザーに確認を促す
  • 目標がフォルダ
  • フォルダ内に同じ名前のファイルを作成し、ファイル内容を新しいファイルに書き込む
  • ソースファイルが複数ファイルの場合
  • 目標はフォルダでなければならない。フォルダが存在する必要があり、それ以外の場合はエラーになる
  • ソースファイルがフォルダの場合
  • 目標がファイル:不可
  • 目標はフォルダでなければならない。-rオプションが必要
  • 目標が存在しない場合:目標フォルダを作成し、ソースフォルダのデータをコピー
  • 目標が存在する場合:
  • ファイルの場合はエラー
  • フォルダの場合は同名フォルダを作成し、すべてのデータを新フォルダにコピー

ファイルの移動と名前変更

mv コマンドでファイルを移動または名前変更します

Usage: mv [OPTION]... [-T] SOURCE DEST
  or:  mv [OPTION]... SOURCE... DIRECTORY
  or:  mv [OPTION]... -t DIRECTORY SOURCE...
-i プロンプトを表示
-f 強制実行
-b バックアップ
--backup=number バックアップに数字を付ける
-v 処理過程を表示

# ファイル名変更例
[root@root ~]# ls
b111111  
[root@root ~]# mv b111111 bbb233
[root@root ~]# ls
bbb233  

ファイルの削除

rm コマンドでファイルを削除します

Usage: rm [OPTION]... FILE...
-i プロンプトを表示
-r -R 再帰的に削除
-f 強制削除
rm -rf 使用には注意が必要
rm -rf /*
cd /
rm -rf *

ファイル削除
[root@localhost bighome]# rm install.log

フォルダ削除
[root@localhost ~]# rm -r b

-f 確認手順を省略
[root@localhost ~]# rm -rf b

ファイルの中身を削除
[root@localhost ~]# > filename 
[root@localhost ~]# > filename 
[root@localhost ~]# echo "" > filename 
[root@localhost ~]# echo > filename 
[root@localhost ~]# cat /dev/null > filename

リンク

  • ソフトリンク

  • Windowsのショートカットに相当
  • 作成コマンドは ln -s ソースファイル ターゲットファイル
  • ディレクトリにもソフトリンクを作成可能
  • 他のファイルまたはディレクトリへのパスを指し、サイズはパス長の文字数
  • ディスクのリンク数に影響を与えない
  • パーティションを跨いで作成可能
  • ソースファイルが変更されるとソフトリンクも変更される
  • ソースファイルが削除されるとソフトリンクはアクセスできなくなる
  • ハードリンク

  • ディスクのリンク数が変更される
  • ハードディスク上の同じ領域を指す
  • リンク数はハードリンク数に応じて増加
  • ディレクトリには作成できない
  • パーティションを跨ぐことはできない
  • ソースファイルが変更されるとハードリンクも変更される
  • ソースファイルが削除された後もハードリンクはアクセス可能

ファイルタイプの確認

file コマンドでファイルタイプを確認します

入力と出力

  • 標準入力 キーボードからの入力、デフォルトはstdin 0
  • 標準出力 端末ウィンドウへの出力、デフォルトはstdout 1
  • 標準エラー出力 端末ウィンドウへのエラー出力、デフォルトはstderr 2

I/Oリダイレクト

上書き

  • 標準出力をファイルへリダイレクト

  • 2> エラー出力をファイルへリダイレクト
  • &> すべての出力をファイルへリダイレクト

上書き禁止・許可

  • 上書き禁止 set -C
  • 上書き許可 set +C

追記

標準出力をファイルに追記

2>> エラー出力をファイルに追記

&>> すべての出力をファイルに追記

標準入力とエラー入力の別々保存

[root@localhost ~]#ls f 45yuio > log.log 2> error.log
[root@localhost ~]#cat log.log 
f
[root@localhost ~]#cat error.log 
ls: cannot access 45yuio: No such file or directory


すべての出力を統合

  • &> 上書きリダイレクト
  • &>> 追記リダイレクト
  • command > file 2>&1
  • command >> file 2>&1
  • () 複数ファイルの出力を統合
  • /dev/null ブラックホール

ファイルからのstdin入力

tr コマンドで文字を置換します

-t トリム
-d 削除
-s 圧縮、重複除去
-c 反転
[root@localhost ~]#tr 'a-z' 'A-Z' < /etc/issue
\S
KERNEL \R ON AN \M
[root@localhost ~]#tr 'a-z' 'A-Z' 
qwertyy
QWERTYY
12345678
12345678
ASDFGHJ
ASDFGHJ
qwertyuio
QWERTYUIO
^C
[root@localhost ~]#tr ab 12
ab
12
abb
122
asdfghjkl
1sdfghjkl
^C
[root@localhost ~]#tr abc 12
ab
12
abc
122
abc
122
^C
[root@localhost ~]#tr ab 123
ab
12
abb
122
avc
1vc
qbc
q2c
abc
12c
[root@localhost ~]#tr -t abc 12
abc
12c
ab
12
[root@localhost ~]#tr -d abc
qwertyui
qwertyui
an^H^H
n

abc

artyibrtyuiocrtyuiop
rtyirtyuiortyuiop
^C
[root@localhost ~]#tr -d abc < /etc/issue
\S
Kernel \r on n \m

[root@localhost ~]#cat /etc/issue
\S
Kernel \r on an \m
[root@localhost ~]#tr -s a
abc
abc
aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaabc
abc
^C
[root@localhost ~]#tr -sc a 
aasdaaaaaaa
aasdaaaaaaa
^[[A^H^H^C
[root@localhost ~]#tr -sc a 
aaaaaaaaabbbbbbbbbbbbbccccccccddddddddddd
aaaaaaaaabcd
[root@localhost ~]#tr -dc a
aaaaaaaaaaaabbbbbbbbbb
asdfghjkqwertyuiozxcvbnmxcvbnm,.
aaaaaaaaaaaaa
ctrl+d 終了
[root@localhost ~]#tr -dc "a\n"
asdfghjk
a
wertyujk;l'



asdfghj
a
[root@localhost test]#tr -d a < issue > issue 処理後に元ファイルに書き戻すことはできません。新しいファイルに書き込む必要があります。
[root@localhost test]#seq 1 10 > b
[root@localhost test]#cat b
1
2
3
4
5
6
7
8
9
10
[root@localhost test]#tr -d "\n" < b
12345678910[root@localhost test]#tr -d "\n" < b
[root@localhost test]#tr "\n" " " <b
1 2 3 4 5 6 7 8 9 10 [root@localhost test]#tr "\n" " " <b >c
[root@localhost test]#cat c
1 2 3 4 5 6 7 8 9 10 [root@localhost test]#tr " " "\n" <c
1
2
3
4
5
6
7
8
9
10

複数行をstdinに送信

# 方法1
[root@localhost test]#cat > f1
qwert
wertyui
wertyui
wertyuiopasdfghjk
sdfghjkl
sdfyhjkl;sdfghjkl;xcvb

# 方法2
[root@localhost test]#cat > f2 <<EOF
> qwerty
> qwertyu
> wertyui
> qwertyu
> EOF
EOF は必須ではありません。同じ文字であればOKです

パイプ

パイプは「|」で表されます

コマンド1|コマンド2|コマンド3

  • コマンド1の出力をコマンド2の入力として渡し、コマンド2の出力をコマンド3の入力として渡す
  • デフォルトでは標準出力のみパイプに渡される
  • エラー出力も渡したい場合は|&を使う
  • 複数のコマンドを組み合わせるのに使われる
  • パイプを受け取れないコマンドもある
[root@localhost test]#ls f1|tr 'a-z' 'A-Z'
F1
[root@localhost test]#ls f
ls: cannot access f: No such file or directory
[root@localhost test]#ls f|tr 'a-z' 'A-Z'
ls: cannot access f: No such file or directory
[root@localhost test]#ls f|&tr 'a-z' 'A-Z'
LS: CANNOT ACCESS F: NO SUCH FILE OR DIRECTORY
[root@localhost test]#echo file{1..20}|touch
touch: missing file operand
Try 'touch --help' for more information.

タグ: linux bash Shell filesystem directory

5月17日 18:47 投稿