ファイル管理コマンド
cd
../ コマンドは複数回使用可能です。
現在のユーザーのホームディレクトリに迅速に移動する方法:
$ cd # 方法1
$ cd ~ # 方法2
$ cd /home/ユーザー名 # 方法3 //任意のユーザー
頻繁に2つのパス間を切り替える必要がある場合、関連するショートカット操作もあります:(cd -)長いパスの場合に便利
# cdコマンドでディレクトリ1に移動: /usr/include/c++/7.5.0/ext/pb_ds/detail/list_update_map_/
# cdコマンドでディレクトリ2に移動: /home/luffy/get/onepiece/itis/a/goldfish
# 2つのディレクトリ間を頻繁に切り替える
$ cd -
ls
ls は list の略で、指定されたファイル情報を表示します。ディレクトリの場合、対応するディレクトリ内のサブファイルを表示します。構文形式は以下の通りです:
$ ls [args] # 現在のディレクトリを表示
$ ls [args] ディレクトリ名 # 指定されたディレクトリを表示
$ ls [args] ファイル名 # 特定のファイルの情報を表示
[args] は複数同時に使用可能
- ls -a (隠しファイル+非隠しファイル)
lsに -aパラメータを追加すると(allの意味)、指定されたディレクトリ内のすべてのファイルが表示されます。
デフォルトでは、隠し属性を持つファイルは表示されません。Linuxでは、どのようなファイルが隠されるか?非常に簡単で、ファイル名の前にドット(.)を付けると、ファイルは隠し属性を持ちます。
例:.demo, .a.txt。
- ls -l : -lパラメータ(listの意味)ファイルの詳細情報を表示、略称
ll
これには含まれます:ファイルタイプ、ファイル所有者によるファイルの操作権限、ファイル所属グループユーザーによるファイルの操作権限、他の人によるファイルの操作権限、ハードリンクカウント、ファイル所有者、ファイル所属グループ、ファイルサイズ、ファイルの変更日付、ファイル名
# ファイル詳細情報の紹介
d rwx rwx r-x 5 robin robin 4096 Jan 13 17:35 udp
| | | | | | | | | |
ファイル ファイル所 ファイル所 他人 ハードリンク ファイル ファイル ファイルサイズ ファイル変更時間 ファイル名
タイプ 有者権限 属グループ権限 権限 カウント 所有者 所属グループ
- -: 通常のファイル、Linuxターミナルでは実行権限がない場合は白色、圧縮ファイルは赤色、実行可能プログラムは緑色
- d: ディレクトリ(directory)、Linuxターミナルでは青色、ディレクトリの権限がすべて開放されている場合は緑色の背景色
- l: シンボリックリンクファイル(link)、Windowsのショートカットに相当、Linuxターミナルでは淡青色
- c: キャラクタデバイス(char)、Linuxターミナルでは黄色(キーボード)
- b: ブロックデバイス(block)、Linuxターミナルでは黄色(ハードディスク)
- p: パイプファイル(pipe)、Linuxターミナルでは茶色
- s: ローカルソケットファイル(socket)、Linuxターミナルではピンク色
ls -F ファイルがディレクトリの場合、末尾に/が表示されます
- ls -lFh (hはより人間に適した表示、例えばメモリ表示はMB単位)hなしの場合はバイトサイズ表示
ファイルサイズ → 単位はバイト、ディレクトリの場合は4096と表示されます。これはディレクトリ自身のサイズで、ディレクトリ内のファイルサイズは含まれません。
ユーザータイプとファイルの権限
Linuxには3つの主要なユーザータイプがあります:ファイル所有者、ファイル所属グループユーザー、その他のユーザー。同じファイルに対してこれら3種類のユーザーに異なる操作権限を設定し、ユーザーがファイルへのアクセスを制限できます。
- 読み取り権限:
rで表現、即ち:read - 書き込み権限:
wで表現、即ち:write - 実行権限:
xで表現、即ち:excute - すべての権限なし:
-で表現
ハードリンクカウントは整数です。この数がN(N>=1)の場合、(複数のエイリアス)これは1つまたは複数のディレクトリに合計N個のファイルがあることを意味しますが、これらのN個のファイルは複数のディスクスペースを占有しません。同じディスクスペースを使用しています。そのうちの1つのファイルを通じてディスクデータを変更すると、他のファイルの内容も変更されます。ディスクファイルにハードリンクを作成するたびに(lnを使用)、ディスク上に新しいファイル名が表示されますが、ハードリンクカウントが1増えますが、この新しいファイルはディスクスペースを占有しません。ファイル名は元のディスクアドレスにマッピングされたままです。
ディレクトリの作成と削除
tree コマンド --ツリー形式でディレクトリ構造を表示
ディレクトリの作成は2種類に分かれます。1つは単一のディレクトリを作成する方法、もう1つは一度に複数のディレクトリを作成する方法です。使用されるコマンドはmkdirで、後続のパラメータは作成するディレクトリの名前です。複数のディレクトリを作成する場合は、パラメータ**-p**を追加する必要があります。
作成するディレクトリのパスは相対パスでも絶対パスでもかまいません。
# 単一レベルのディレクトリ
$ mkdir 新しいディレクトリ名
mkdir a b //複数の単一レベルのディレクトリを同時に作成
# 複数レベルのディレクトリ、-pパラメータが必要
$ mkdir parent/child/baby1/baby2 -p
- ディレクトリの削除
既存のパスを削除するには2つの方法があります。rmdirまたはrmを使用できます。
rmdir: 空のディレクトリのみを削除でき、少し不便です
rm: ファイルとディレクトリの両方を削除できます。ディレクトリを削除する場合、-rパラメータを追加する必要があります。これは再帰(recursion)を意味します。
rmコマンドには、頻繁に使用される2つの追加パラメータがあります:
- -i: 削除時にプロンプトを表示
- -f: ファイルを強制的に削除、プロンプトなしで直接削除でき、復元できません。慎重に使用してください
cpコマンド(ファイルのコピー)
このコマンドを使用してファイルとディレクトリの両方をコピーできます
# `構文: cp コピー元ファイル コピー先ファイル`
# `シナリオ1: ファイルA、AをコピーしてファイルBを取得`
$ cp ファイルA ファイルB
# `シナリオ2: ファイルAが存在し、ファイルBも存在する場合、以下のコピーを実行 ==> ファイルAがファイルBを上書き`
$ cp ファイルA ファイルB
- #ディレクトリをコピーするには -rパラメータが必要
# シナリオ1: ディレクトリA、コピーして存在しないディレクトリBを取得
$ cp ディレクトリA ディレクトリB -r
# シナリオ2: ディレクトリAが存在し、ディレクトリBも存在する場合、以下のコピーを実行 ==> **ディレクトリAがコピーされ、ディレクトリBに配置されます**
$ cp ディレクトリA ディレクトリB -r
# シナリオ3: Aディレクトリ内の1つまたは複数のファイルをBディレクトリにコピー
$ cp A/a.txt B # Aディレクトリ内のa.txtをBディレクトリにコピー
$ cp A/* B -r # Aディレクトリ内のすべてのファイルをBディレクトリにコピー、Aディレクトリにサブディレクトリがあるかどうかは不明なため、-rを追加する必要があります
mv ファイルの移動、名前変更、上書き
mv はmoveの略で、このLinuxコマンドはファイルのディレクトリを移動することも、ファイルの名前を変更することもできます。
- ファイルの移動
構文: mv 移動するファイル ディレクトリ
ファイルAがあり、ディレクトリBに移動します
ここでAはファイルまたはディレクトリでも可能、Bは存在するディレクトリである必要があります
$ mv A B (Aは複数のファイルでも可能、例:A.tmp b.tmp)
- ファイルの名前変更
構文: mv 名前を変更するファイル 新しい名前(元は存在しない、これは非常に重要)
ここでAはファイルまたはディレクトリでも可能、存在する必要があります、Bは元は存在しません $ mv A B
- ファイルの上書き
構文: 存在するファイルA 存在するファイルB
ここでAは**ファイル(ディレクトリではない)であり、存在する必要があります、Bもファイル(ディレクトリではない)**であり、存在する必要があります
Aファイルの内容がBファイルの内容を上書きし、Aファイルは削除され、Bファイルのみが残ります $ mv A B
ファイル内容の表示
最も一般的に使用されるのはvimですが、ここではvim以外のいくつかの方法を紹介します:
$
cat ファイル名
このコマンドはファイルの内容をターミナルに表示できます。ターミナルにはバッファがあるため、表示できるバイト数も制限されています。ファイルが大きすぎると完全に表示できない場合があります。そのため、このコマンドは比較的小さいファイルの内容を表示するのに適しています。
more
このコマンドはcatよりも少し高度で、スクロールしてファイルの内容を表示できます。使用方法は以下の通り:
$ more ファイル名
- Enter: 次の行を表示
- スペース: 1ページ下にスクロール
- b: 前のページに戻る
- q: moreを終了
less はmoreとほぼ同じ
$ less ファイル名
- b: 前のページに戻る
- スペース: 次のページに進む
- Enter: 次の行を表示
- 上下キー: 上下にスクロール
- q: 終了
head デフォルトで最初の10行、tailコマンドと似ています
$ head ファイル名 最初の何行を表示するかを指定 $ head -行数 ファイル名
リンクの作成
シンボリックリンク(ショートカットに相当)とハードリンク(コピーされず、新しいファイル名が追加され、ハードリンクカウントが1増え、ソースファイルを直接変更可能)
- シンボリックリンク
# 構文: ln -s ソースファイルパス シンボリックリンクファイル名(パスを含めることが可能)
# ディレクトリファイルを表示
[root@VM-8-14-centos ~/luffy]# ll
total 8
drwxr-xr-x 3 root root 4096 Jan 25 17:27 get
-rw-r--r-- 1 root root 37 Jan 25 17:26 onepiece.txt
# onepiece.txtにシンボリックリンクを作成し、サブディレクトリgetに配置
[root@VM-8-14-centos ~/luffy]# ln -s /root/luffy/onepiece.txt get/link.lnk
[root@VM-8-14-centos ~/luffy]# ll get
total 4
lrwxrwxrwx 1 root root 24 Jan 25 17:27 link.lnk -> /root/luffy/onepiece.txt
drwxr-xr-x 2 root root 4096 Jan 24 21:37 onepiece
注意:リンクファイルを作成する場合、リンクファイルに絶対パスを記述すると、リンクファイルを自由に移動できます。相対パスの場合、移動できず、リンク先のファイルを見つけられなくなります。
- ハードリンク(シンボリックリンクと比較して、パラメータsがありません)
# 構文: ln ソースファイル ハードリンクファイル名(パスを含めることが可能)
# ハードリンクファイルを作成し、サブディレクトリに配置
[root@VM-8-14-centos ~/luffy]# ln onepiece.txt get/link.txt
# リンクファイルとハードリンクカウントを表示、1から2に増加
[root@VM-8-14-centos ~/luffy]# ll get
total 8
lrwxrwxrwx 1 root root 24 Jan 25 17:27 link.lnk -> /root/luffy/onepiece.txt
-rw-r--r-- 2 root root 37 Jan 25 17:26 link.txt
drwxr-xr-x 2 root root 4096 Jan 24 21:37 onepiece
ハードリンクとシンボリックリンクは異なり、ファイル名を通じて直接対応するハードディスクアドレスを見つけるため、パスに基づくのではなく、ソースファイルに相対パスを使用できます。絶対パスを指定する必要はありません。
ディレクトリにはハードリンクを作成できません。
ファイル権限の変更
ファイル権限はファイル所有者、ファイル所属グループユーザー、その他のユーザーの3つのタイプのユーザーに対して設定されます。対応する操作コマンドは
chmodです。設定方法は2つあり、それぞれ文字設定法と数字設定法です。
- 文字設定法は、r、w、x、-などのキーワードを使用して、ユーザーがファイルに対する操作権限を記述します。
- 数字設定法は、0、1、2、4、5、6、7などの数字を使用して、ユーザーがファイルに対する操作権限を記述します。
- chmod
#chmod
#構文形式: chmod who [+|-|=] mod ファイル名
- who:
- u: user -> ファイル所有者
- g: group -> ファイル所属グループユーザー
- o: other -> その他
- a: all, 上記の3つのタイプのユーザー u+g+o
- 権限に対する操作: +: 権限を追加 -: 権限を削除 =: 権限を上書き
- mod: 権限 r: read, 読み取り w: write, 書き込み x: execute, 実行 -: 権限なし
数字設定: # 構文形式: chmod [+|-|=] mod ファイル名- mod: 権限の記述、すべての権限を解放する場合は7
- 4: read, r
- 2: write, w
- 1: execute , x
- 0: 権限なし
# ファイル所有者の権限を読み取りと実行に設定、つまり権限を上書き
robin@OS:~/Linux$ chmod u=rx b.txt
robin@OS:~/Linux$ ll b.txt
-r-xrw-r-- 2 robin robin 2929 Apr 14 18:53 b.txt*
# その他のユーザーに書き込みと実行権限を追加
robin@OS:~/Linux$ chmod o+wx b.txt
robin@OS:~/Linux$ ll b.txt
-r-xrw-rwx 2 robin robin 2929 Apr 14 18:53 b.txt*
# ファイル所属グループユーザーの読み取りと実行権限を削除
robin@OS:~/Linux$ chmod g-rx b.txt
robin@OS:~/Linux$ ll b.txt
-r-x-w-rwx 2 robin robin 2929 Apr 14 18:53 b.txt*
# ファイル所有者、ファイル所属グループユーザー、その他のユーザーの権限をすべて読み取り+書き込み+実行に設定
robin@OS:~/Linux$ chmod a=rwx b.txt
robin@OS:~/Linux$ ll b.txt
-rwxrwxrwx 2 robin robin 2929 Apr 14 18:53 b.txt*
分解: chmod 0567 a.txt
0 5 6 7
8進数 ファイル所有者 ファイル所属グループユーザー その他
r + x r + w r+w+x
ファイル所有者の変更
デフォルトでは、ファイルはどのユーザーによって作成されたかによって、そのユーザーに属します。そのユーザーがどのグループに属しているかによって、ファイルはそのグループに属します。
chown はファイル所有者を変更できますが、ファイル所有者を変更するのはユーザー間の操作であり、管理者権限(sudo)を介してのみ完了できます。
しかし、通常新しいユーザーにはsudo権限がないため、デフォルトでは管理者権限を使用して一部の管理者のみが実行できるコマンドを実行できません。
新しいユーザーの追加(adduser、パスワード設定passwd、切り替えsu)
# 新しいユーザーsanjiを追加
[root@VM-8-14-centos ~]# adduser sanji
# 新しいユーザーsanjiにパスワードを設定
[root@VM-8-14-centos ~]# passwd sanji
Changing password for user sanji.
New password:
Retype new password:
passwd: all authentication tokens updated successfully.
# ユーザーsanjiに切り替え
[root@VM-8-14-centos ~]# su - sanji
sudo権限の追加(sudoersファイルにあります)
sudoersファイルは/etcディレクトリにあります。
私たちは驚くべきことに、このファイルの所有者rootも読み取り権限しか持っておらず、デフォルトでは変更できません。root以外の他のユーザーはこのファイルに対して何の操作権限も持っていません。
解決策:
まずrootユーザーに切り替え
rootユーザーでこのファイルの属性を変更し、書き込み権限を追加
ファイル内容を変更し、一般ユーザーsanjiを追加し、保存して終了
ファイル権限を元の400(r--------)に戻す
ユーザーsanjiに切り替え、この時sudoを使用できるようになり、権限追加が成功
# 1. rootユーザーに切り替え
$ su root
Password: # rootユーザーのパスワードを入力
# 2. ファイル権限を変更、少し強引でも問題ありません、結局元に戻す必要があるので、直接777でOK
$ chmod 777 sudoers
# 3. vimでこのファイルを開く
$ vim sudoers
# 4. この行を見つけ、ファイルの後半部分にあります
root ALL=(ALL) ALL
# 5. 同じ形式で下に新しい行を追加
root ALL=(ALL) ALL # 元の内容
sanji ALL=(ALL) ALL # 新しく追加する行、ユーザー名をsanjiに指定
# 6. 保存して終了 (escを押してから :wqを入力)
# 7. ファイルを元の権限に戻す
$ chmod 400 sudoers
リダイレクションコマンド(最も頻繁に使用されるのは出力リダイレクション)
出力データの位置を変更し、リダイレクションを使用すると、ファイルのコピー、ファイル内容の追加が簡単に行えます。
記号:> または>>
>ファイル内容を指定されたファイルに書き込み、ファイルに既にデータがある場合、新しいデータで元のデータを上書きします
>>出力内容を指定されたファイルの末尾に追加します
catコマンドと一緒に使用できます。
- 出力リダイレクション:
記号を使用して、コマンドの出力をファイルにリダイレクトできます。ファイルが存在しない場合、作成されます;ファイルが既に存在する場合、その内容は上書きされます。
cat filename > outputfile
- 入力リダイレクション:
記号を使用して、ファイルから入力を取得できます。これは、入力を受け取り、その入力に基づいて操作を実行するコマンドと一緒に頻繁に使用されます。
cat < inputfile
これはinputfileの内容をターミナルに表示します。
- パイプ:
これは直接のリダイレクションではありませんが、|(パイプ)記号を使用すると、1つのコマンドの出力を別のコマンドの入力として使用できます。これはリダイレクションに似ていますが、より柔軟です。
cat filename | grep "pattern"
これはfilenameに「pattern」が含まれるすべての行を表示します。
echoコマンド
Linuxシェルでは、echoコマンドはテキストや文字列をターミナルに表示するために一般的に使用される組み込みコマンドです。主に変数の値を表示したり、ファイルの内容を作成したり、単純に情報を出力したりするために使用されます。