Linuxコマンド
cat
ファイルの中身を表示するコマンド。
ユーザー一覧を確認する方法
cat /etc/passwd
- 実行結果
root:x:0:0:root:/root:/bin/bash bin:x:1:1:bin:/bin:/sbin/nologin daemon:x:2:2:daemon:/sbin:/sbin/nologin adm:x:3:4:adm:/var/adm:/sbin/nologin lp:x:4:7:lp:/var/spool/lpd:/sbin/nologin 以下略
passwd
というファイルの中身を表示する。
CentOSサーバーのユーザー一覧を確認するときに使う。
自分で作成したユーザー以外にも、システム備付のユーザーが大量に表示される。
chgrp
ファイル・ディレクトリのグループを変更するコマンド。
chgrp -R nginx /etc/phpMyAdmin
phpMyAdmin
ディレクトリおよびその子孫ディレクトリのグループをnginx
に変更している。
chmod
ファイル・ディレクトリのパーミッションを変更する。
数字モード
777
のように数値でアクセス権を設定する。
桁の意味
100の位
が所有者
10の位
がグループ
1の位
がその他
のユーザー
数字の意味
4
は読み込み権限
2
は書き込み権限
1
は実行権限
7
= 4 + 2 + 1
なので、読み・書き・実行
ができる。
5
= 4 + 1
なので、読み・実行
ができる。
のような仕組み。
chmod実行例1
chmod 700 xxx
xxx
(ファイルまたはディレクトリ)のパーミッションを700
に変更。
chmod実行例2
chmod -R 700 xxx
-R
オプションにより、xxx
ディレクトリの中のファイル・ディレクトリも一括でパーミッションを変更。
シンボルモード
シンボルモードのオプション
ターゲット
オプション | 説明 |
---|---|
u | user(所有者) |
g | group(所有グループ) |
o | others(所有者・所有グループ以外のユーザー) |
a | all(u, g, oすべて) |
省略 | a を指定したことに |
演算子
オプション | 説明 |
---|---|
+ | 権限を追加 |
- | 権限を削除 |
= | 指定した権限にする |
アクセス権
オプション | 説明 |
---|---|
r | 読み込み権限 |
w | 書き込み権限 |
x | 実行権限 |
s | SUID(Set User ID)権限 |
sはxよりも上位の権限。
rwx
は、読み・書き・実行
だが、
rws
は、読み・書き・SUIDで実行
。
/usr/bin/su
や/usr/bin/sudo
などのファイルはs
権限が設定されており
root
ユーザー以外でsu
やsudo
コマンドを実行しても
root
ユーザーが代理実行するような設定になっている。
chmodの実行例1
chmod o+x xxx
othersに実行権を追加。
chmodの実行例2
chmod o-x xxx
othersから実行権を削除。
chown
ファイル・ディレクトリの所有者を変更する。
chown -R nginx:nginx /home/user1/xxx
/home/user1/xxx
以下のすべてのディレクトリとファイルの所有者を nginx:nginx に変更。
-R
はリカーシブ。指定ディレクトリ配下のすべてのディレクトリ・ファイルに対してchownを行う。
-R
を付けなければ、指定したディレクトリまたはファイルだけをchwon。
cp
ファイルをコピー
cp aaa bbb
aaa
というファイルをコピーして、bbb
というファイルを作成する。
ディレクトリをコピー
コピー先のディレクトリがない場合
cp -r aaa bbb
aaa
というディレクトリをコピーして、bbb
というディレクトリを作成する。
-r
オプションがないと、
cp: ディレクトリ `aaa' を省略しています
というエラーが出てコピーに失敗する。
コピー先のディレクトリが元々ある場合
cp -r aaa bbb
bbb
というディレクトリが元々ある場合、bbb/aaa
というディレクトリが作成される。
crontab
cron
でコマンドを定期実行。
crontabを編集
crontab -e
crontabを表示
crontab -l
curl
curl(カール)とは、指定したURLからデータを取得するためのコマンド。
client for URLの略。
curl -OL
curl -OL https://ja.wordpress.org/wordpress-5.7.2-ja.tar.gz
https://ja.wordpress.org/wordpress-5.7.2-ja.tar.gz
というURLへアクセスしてデータをダウンロード、
wordpress-5.7.2-ja.tar.gz
というファイルへ保存する。
オプションなしでURLを指定すると、標準出力に取得したデータが表示される。
-O
オプションを指定すると、ファイルに保存される。
-L
オプションを指定すると、URLにリダイレクトが含まれていた場合に、リダイレクト後のURLからデータを取得できる。
curl -sS
curl -sS -o 出力先PATH http://対象のURL
-s
は、silentオプション。
経過を出力しなくなる。
-sS
は、silentだけどエラーだけは出力するためのオプション。
curl -I
curl -I http://example.com
curl -I
でリクエストヘッダの中身を見られる。
nginxの.confの中に
add_header $document_root$fastcgi_script_name $document_root$fastcgi_script_name
のように書けば
$document_root$fastcgi_script_name
の値をヘッダから確認できる。
date
日付と時刻を表示するコマンド。
基本の使い方
date
- 実行結果
2021年 7月 2日 金曜日 21:11:47 JST
フォーマットを指定
date "+%Y_%m%d"
- 実行結果
2021_0702
dd
ファイルをブロック単位でコピーする。
サイズを指定して空のファイルを作成したり、既存のファイルを上書きしたりする。
dd if=/dev/zero of=/swapfile bs=1M count=4096
- 出力結果
4096+0 レコード入力 4096+0 レコード出力 4294967296 バイト (4.3 GB) コピーされました、 38.3469 秒、 112 MB/秒
if
はinput file(入力ファイル)、
of
はoutput file(出力ファイル)。
bs
はblock size、
count
は、ブロック数。
/dev/zero
は中身がnull(0x00)のファイル。
dd if=/dev/zero of=/swapfile bs=1M count=4096
は、
/dev/zero
というファイルを元に、
/swapfile
というファイルを作成している。
swapfile
はサイズが4096MB(4GB)で、
中身が0000……
(数字の0ではなく、nullの0)で埋め尽くされている。
/swapfile
の部分に既存のファイルを指定すれば、ファイルの中身にデータを上書きして、ツールなどを使った復旧が不可能なようにファイルの中身を消し去ることができる。
df
df -h
- 実行結果
ファイルシス サイズ 使用 残り 使用% マウント位置 devtmpfs 988M 0 988M 0% /dev tmpfs 1000M 0 1000M 0% /dev/shm tmpfs 1000M 8.5M 991M 1% /run tmpfs 1000M 0 1000M 0% /sys/fs/cgroup /dev/mapper/centos-root 14G 5.1G 8.4G 38% / /dev/sda1 1014M 198M 817M 20% /boot tmpfs 200M 0 200M 0% /run/user/1000
ディスク使用量等を確認する
du
du . -m
- 実行結果
78 ./xxx 78 .
ディレクトリの容量を調べる
du
の後ろの.
の部分にはディレクトリを指定する
デフォルトでは単位がKBで結果が表示されるが-m
オプションをつけるとMBになる
env
env
環境変数を一覧で表示する。
find
ファイルやディレクトリを検索。
findのオプション
オプション | 説明 |
---|---|
-type d | ディレクトリだけ検索 |
-type f | ファイルだけ検索 |
-exec command {} + | find の実行結果に対して、さらに別のコマンドを実行{} の部分に find の実行結果が入る+ はコマンドをまとめて実行するオプション |
-mtime | ファイルのデータが最後に変更された日付で絞り込み |
findの基本的な使い方
find .
カレントディレクトリを起点に、ディレクトリとファイルを検索。
find /aaa/bbb
指定したパスを起点に、ディレクトリとファイルを検索。
-type (ファイル・ディレクトリだけを検索)
find /home/user1/xxx -type d
ディレクトリだけを一覧表示。
find /home/user1/xxx -type f
ファイルだけを一覧表示。
-name(特定の拡張子だけを検索)
find . -type f -name "*.txt"
-name
オプションで、ファイル名を指定する。
ワイルドカードを使うと、特定の拡張子だけを検索できる。
-exec (findの実行結果に対して追加のコマンドを実行)
find /home/user1/xxx -type d -exec chmod 700 {} +
ディレクトリだけをリストアップして、chmod
を実行。
find
の実行結果が{}
に代入されて、chmod
が実行される。
末尾の+
により、コマンドがまとめて実行される。
find
の結果により、
chmod 700 aaa
chmod 700 bbb
chmod 700 ccc
のような3つのコマンドが実行されるような場合に
chmod 700 aaa bbb ccc
のようにコマンドが統合してくれる。
(処理が速くなる)
find /home/user1/xxx -type f -exec chmod 600 {} +
ファイルだけをリストアップして、chmodを実行。
-mtime (期間指定でファイルを検索)
find . -mtime -3
現在~3日前(0時間~72時間前)に変更されたファイルだけを検索。
find . -mtime 3
ちょうど3日前(72時間~96時間前)に変更されたファイルだけを検索。
find . -mtime +3
更新日が3日超より古い(96時間前~)ファイルだけを検索。
ファイルの中身を検索
find . -type f -exec grep xxx {} +
カレントディレクトリを起点にファイルを検索、
grep
を使いxxx
という文字が含まれる行(とそのファイル名)を表示。
firewall-cmd
firewall-cmd --list-all
firewall-cmd --list-all
firewallのサービス・ポートなどの解放状況を表示。
- 実行結果
public (active) target: default icmp-block-inversion: no interfaces: enp0s3 sources: services: dhcpv6-client ssh ports: protocols: masquerade: no forward-ports: source-ports: icmp-blocks: rich rules:
デフォルトでは、
services: dhcpv6-client ssh
ports
は空欄となっているはず。
表示されているもののみ許可、表示されていないものはポートがブロックされている。
services
にssh
とあれば、ssh
サービスは許可している。
SSH
が何番ポートで動いているかは
/usr/lib/firewalld/services/ssh.xml
というファイルの中で定義されている。
(デフォルトでは22
番ポート)
firewall-cmd --get-services
firewall-cmd --get-services
firewalldで管理できるサービス一覧を表示。
ブロックされているものも含めて全サービスを確認できる。
firewall-cmd --remove-service
firewall-cmd --remove-service=dhcpv6-client --permanent
dhcpv6-client
をブロックする。
(firewalld
の許可対象から削除する)
–permanent
オプションを指定しないと、サーバー再起動で設定がリセットされるので注意。
firewall-cmd --add-service
firewall-cmd --add-service=http --permanent firewall-cmd --add-service=https --permanent firewall-cmd --add-service=ftp --permanent
http
・https
・ftp
を許可する。
firewall-cmd --reload
firewall-cmd --reload
firewalld
の設定をリロード。
リロードしないと、–remove-service
や–add-service
で、削除・追加したものが有効にならない。
grep
指定した文字列を含む行を抽出するコマンド
ファイルの中身をフィルター
grep xxx example.txt
example.txt
というファイルの中で、xxx
という文字が含まれる行だけを表示する
コマンドの実行結果をフィルタ
|
を使って、前のコマンドの実行結果をフィルターする
yum list installed | grep php
yum list installed
の実行結果(数百行ある)から、php
という文字が含まれる行だけを表示する
grepで OR検索をする
ps auxf | grep -e php-fpm -e PID
ps auxf
の実行結果からphp-fpm
またはPID
を含む行だけを表示
ps auxf | grep -e php-fpm
だけだと先頭のヘッダー行が見えないのでどの列が何の項目なのか分からない
PID
を含む行も表示して、項目名を出力させると見やすくなる
groups
gzip
ファイルを圧縮・解凍するコマンド。
gzipでファイルを圧縮
gzip xxx
xxx
というファイル・ディレクトリを圧縮。
xxx
がなくなり、xxx.gz
というファイルが生成される。
gzipでファイルを解凍
gzip -d xxx.gz
xxx.gz
というファイルを解凍。
xxx.gz
がなくなり、xxx
とういファイルまたはディレクトリが生成される。
id
id user1
user1
というユーザーのグループ名などを確認する。
- 実行結果
uid=1000(user1) gid=1000(user1) groups=1000(user1),10(wheel)
uid
がユーザーIDとユーザー名、gid
がグループIDとグループ名。
ユーザーに対して複数のグループを割り当てることが可能で、その場合はgroups
に複数のグループが表示される。
ip
ip a
IPアドレスを確認する。
localectl
ロケールを確認
localectl status
- 実行結果
System Locale: LANG=ja_JP.UTF-8 VC Keymap: jp X11 Layout: jp
ロケールを設定
System Locale
がLANG=ja_JP.UTF-8
以外になっている場合は、以下のコマンドを実行
- bash
localectl set-locale LANG=ja_JP.UTF-8
ロケールを日本語(ja_JP.UTF-8)に設定
キーマップを設定
VC Keymap
がjp106
以外になっていたら、jp106
に変更する
利用可能なキーマップの一覧を表示(jp関連のものだけ)
localectl list-keymaps | grep jp
上記のコマンドで選択可能なキーマップの一覧を表示
- 実行結果
jp jp-OADG109A jp-dvorak jp-kana86 jp106
一覧にjp106
があることを確認
キーマップをjp106に設定
一般的な日本語キーボードの配列はjp106
というやつなので、キーマップをjp106
に変更する
localectl set-keymap jp106 localectl status
- 実行結果
System Locale: LANG=ja_JP.UTF-8 VC Keymap: jp106 X11 Layout: jp X11 Model: jp106 X11 Options: terminate:ctrl_alt_bksp
上記のような表示になっていればOK
mkdir
ディレクトリを作成するコマンド。
カレントディレクトリにディレクトリを作成
mkdir xxx
カレントディレクトリにxxx
というディレクトリを作成する。
xxx
は任意の文字列。
パスを指定してディレクトリを作成
mkdir /home/user1/xxx
/home/user1/
というディレクトリの下に、xxx
というディレクトリを作成する。
親ディレクトリも含めてディレクトリを作成
mkdir -p /aaa/bbb/ccc
-p
オプションを付けると、親ディレクトリもまとめて作成していれる。
/aaa
ディレクトリを作成、
/aaa/bbb
ディレクトリを作成、
/aaa/bbb/ccc
ディレクトリを作成。
nmcli
nmcli(Network Manager Command Line Interface)は、ipの設定などを行うコマンド
nmcli device
ネットワークデバイスの状態を確認するコマンド
nmcli device status
- 実行結果
enp0s3 ethernet connected enp0s3 enp0s8 ethernet disconnected --
上記の例だと、ネットワークデバイスが2種類刺さっていて
enp0s3は動いているけど
enp0s8の方は機能していない
nmcli connection show
nmcli connection show
- 実行結果
NAME UUID TYPE DEVICE enp0s3 xxx-xx-xx-xxx ethernet enp0s3 enp0s8 yyy-yy-yy-yyy ethernet --
enp0s8
のDEVICE
が–
となっていて機能していないことがわかる
nmcli connection delete
コネクションを削除するコマンド
nmcli connection delete xxx-xx-xx-xxx
xxx-xx-xx-xxx
の部分は
nmcli connection show
のコマンドで確認した
UUID
の値
nmcli connection add
コネクションを作成するコマンド
nmcli connection add type ethernet ifname enp0s8 con-name enp0s8
enp0s8
のDEVICE
で新しいコネクションを作成
NAME
にenp0s8
を設定
IPアドレスを設定
nmcli connection modify enp0s8 ipv4.method manual ipv4.addresses 192.168.100.2/24
enp0s8
のネットワークで、IPアドレス(v4)に192.168.100.2
を設定
IPアドレスは各自の環境に合わせて設定する
VirtualBoxを使用している場合
ホストOSのVirtualBox Host-Only Network
のIPアドレスが192.168.100.1
ならば
enp0s8
には192.168.100.2
~192.168.100.254
の間で好きなIPを設定できる
デバイスの再確認
nmcli device status
- 実行結果
enp0s3 ethernet connected enp0s3 enp0s8 ethernet connected enp0s8
IPアドレスを設定したことにより
enp0s8
がdisconnected
からconnected
に変わっていればOK
passwd
passwd user1
user1
というユーザーのパスワードを設定。
- 実行結果
ユーザー user1 のパスワードを変更。 新しいパスワード: 新しいパスワードを再入力してください: passwd: すべての認証トークンが正しく更新できました。
新しいパスワード
の入力を求められるので、任意の文字列を設定する。
reboot
reboot
サーバーを再起動する。
rm
rm -rf /home/user1/xxx
指定したファイル・ディレクトリを一括削除。
ディレクトリの場合は、ディレクトリ内のディレクトリ・ファイルもまとめて削除する。
sed
文字列を置換するコマンド。
sed -i -e "s/aaa/bbb/g" test.txt
test.txt
というファイルの中で、aaa
という文字をbbb
という文字に置き換える。
-i
はinplace(直接編集)オプション。
-i
がないと、置換後のものがコンソールに表示される。(ファイルの中身は変化しない)
-i
があると、文字列を置換してファイルの中身を書き換える。
-e
の後ろに“s/元の文字列/置き換え後の文字列/g”
というルールを書く。
末尾のg
がないと、各行の最初にマッチした要素だけ置き換え。
末尾のg
があると、全てのマッチした要素を置き換え。
sedで/(スラッシュ)を置換する方法
127.0.0.1:9000
という文字列を
/var/run/php-fpm/php-fpm.sock
という文字に置き換えるようなケース。
sed -i -e "s/127.0.0.1:9000//var/run/php-fpm/php-fpm.sock/g" www.conf
上記のように書いてしまうと、
どれが区切り記号の/
で、どれが置換文字列の/
なのか、システムは判別できない。
実は、区切り記号には、/
以外も使える。
@
や!
などを区切り記号として使う。
sed -i -e "s@127.0.0.1:9000@/var/run/php-fpm/php-fpm.sock@g" www.conf
上記のように書くと、
@
は区切り記号として認識され、
/
はただの文字として扱われる。
“s@元の文字列@置き換え後の文字列@g”
区切り記号は、改行とバックスラッシュ以外で、元の文字列と置換後の文字列に含まない記号ならば何でもOK。
shutdown
shutdown
サーバーをシャットダウンする。
source
source ~/.bashrc
.bashrc
への変更を反映させる。
su
ユーザーを変更するコマンド。
su
su
とだけ打つと、root
ユーザーに切り替わる。
パスワード入力を求められるので、root
のパスワードを入力する。
su user1
su
の後ろにユーザー名を指定すると、そのユーザーに切り替わる。
systemctl
サービスの状態を確認したり、起動・停止・再起動するコマンド。
systemctl status
systemctl status firewalld
firewalld
が起動しているか、自動起動になっているかなどを確認。
systemctl enable
systemctl enable firewalld
firewalld
を自動起動に設定する。
次回のサーバー起動からfirewalld
が自動起動するようになる。
systemctl start
systemctl start firewalld
firewalld
を起動する。
tail
ファイルの末尾を表示する
ログファイルなど、行数が多すぎるファイルの末尾の部分だけを見るために使う
基本の使い方
tail xxx.txt
xxx.txt というファイルの末尾の10行だけが画面に出力される
行数を指定
-n
オプションで出力する行数を指定できる
tail -n 20 xxx.txt
上記の場合は、xxx.txt
というファイルの末尾20行を表示
(オプションを指定しない場合、デフォルトの表示は10行)
継続監視
-f
オプションをつけるとファイルを継続して監視できる
(ログファイルが更新された場合など、最新の情報を表示できる)
tail -f -n 20 xxx.txt
上記の場合は、xxx.txt
というファイルの末尾20行を、常に最新の状態で表示
終了する場合はCtrl + C
tar
複数のファイルを1つにまとめる(アーカイブする)コマンド。
普通は圧縮・解凍も同時に行う。
tarコマンドのバージョンを確認する方法
tar --version
tarのオプション
オプション | 説明 |
---|---|
c | createの略 アーカイブを作成する |
x | extractの略 アーカイブを解凍する |
v | verboseの略 圧縮・解凍の対象になったファイル・ディレクトリ一覧を出力する |
f | fileの略 ファイル名を指定する |
z | gzipの略 gzipで圧縮・解凍(.tgzを圧縮・解凍) |
j | bzip2で圧縮・解凍(.tar.bz2を圧縮・解凍) |
J | xzで圧縮・解凍(.tar.xzを圧縮・解凍) |
.tgz(gzip)の圧縮と解凍
tarで.tgzを作成する
tar czvf xxx.tgz yyy
yyy
というファイルを圧縮してxxx.tgz
を作成。
tar czvf xxx.tgz yyy zzz
のように、複数のファイル・ディレクトリ(yyy zzz)を指定することも可能。
tarで.tgzを解凍する
tar xzvf xxx.tgz
xxx.tgz
というファイルを解凍。
.tar.bz2(bzip2)の圧縮と解凍
bzip2
はgzip
よりも圧縮率が高い。
gzip
よりも圧縮・解凍に時間はかかるが、容量が小さくなる。
ディスクスペース節約や、別のサーバーにファイル転送するときに有利。
tarで.tar.bz2を作成する
tar cjvf xxx.tar.bz2 yyy
yyy
をbzip2
で圧縮、xxx.tar.bz2
というファイルを作成する。
tarで.tar.bz2を解凍する
tar xjvf xxx.tar.bz2
xxx.tar.bz2
をbzip2
で解凍する。
.tar.xz(xz)の圧縮と解凍
xz
はbzip2
よりもさらに圧縮率が高い。
xz
が使えるのは、tar バージョン1.22
以降。
tarで.tar.xzを作成する
tar cJvf xxx.tar.xz yyy
yyy
をxz
で圧縮、xxx.tar.xz
というファイルを作成する。
tarで.tar.xzを解凍する
tar xJvf xxx.tar.xz
xxx.tar.xz
をxz
で解凍する。
複数のファイル・ディレクトリを圧縮する
tar cJvf xxx.tar.xz aaa bbb ccc.txt
aaa
とbbb
とccc.txt
をxz
で圧縮、xxx.tar.xz
というファイルを作成する。
tee
ファイルへの出力と、コンソールへの出力を同時に行うコマンド。
pwd | tee -a test.txt
- 実行結果
/home/user1
コンソールにpwd
の結果が表示され、かつtest.txt
というファイルの中にも同じ結果が書き込まれる。
cat test.txt
- 実行結果
/home/user1
-a
は追記オプション。
test.txt
がもともと存在するファイルの場合、
-a
オプションなしだと、test.txt
の中身は上書きされ、/home/user1
の1行だけになる。
-a
オプションありだと、test.txt
の中身はそのままで、末尾に/home/user1
が追加される。
pwd
だと、コンソールにしか出力されない。
pwd > test.txt
だと、ファイルには出力されるが、コンソールには出力されない。
pwd | tee test.txt
だと、ファイルとコンソールの両方に出力される。
pwd
は例として挙げただけなので、pwd
の部分が他のコマンドでも使える。
timedatectl
タイムゾーンの確認・変更などをするコマンド
タイムゾーンを表示
timedatectl
- 実行結果
Local time: 日 2021-07-25 08:24:08 JST Universal time: 土 2021-07-24 23:24:08 UTC RTC time: 土 2021-07-24 23:24:07 Time zone: Asia/Tokyo (JST, +0900) System clock synchronized: yes NTP service: active RTC in local TZ: no
タイムゾーンを設定
Time zone
がAsia/Tokyo (JST, +0900)
以外になっていたら以下のコマンドを実行
timedatectl set-timezone Asia/Tokyo
タイムゾーンをAsia/Tokyo
に変更できる
利用可能なタイムゾーンの一覧を表示
timedatectl list-timezones | grep Tokyo
timedatectl list-timezones
でタイムゾーンに設定できるキーワード一覧を表示できる
大量のテキストが表示されるのでgrepで表示を絞り込んだほうがいい
uname
カーネル名を表示
uname
- 実行結果
Linux
ハードウェア名
uname -m
- 実行結果
x86_64
useradd
useradd user1
user1
という名前のユーザーを追加。
usermod
usermod -aG wheel user1
user1
というユーザーを、wheel
というグループに追加。
wheel
というのは、sudo
コマンドが使える管理者グループ。
visudo
visudo
visudo
を実行すると、テキストエディタが起動し、/etc/sudoers.tmp
というファイルを開いた状態になる。
/etc/sudoers.tmp
は、sudo
コマンドの権限管理をするファイル。
yum
yumのバージョンを確認する方法
yum --version
yumでパッケージを一括アップデート
yum update -y
yumで管理しているパッケージを一括でアップデート。
yumでパッケージを一括アップデート(リポジトリを指定)
yum update --enablerepo=remi,remi-php74 -y
リポジトリを指定して、既存のパッケージを一括アップデート。
インストール済みのパッケージを確認
yum list installed | grep xxx
yumでインストール済みのパッケージを表示。
grep で結果を絞り込み。
zip
圧縮
zip -r xxx.zip yyy
yyy
というディレクトリを圧縮してxxx.zip
というファイルを生成している
解凍
unzip xxx.zip
xxx.zip
というファイルを解凍して、xxx
というディレクトリが生成される