ことのはじまり
UNIXコマンドとか使えて当たり前っしょ。というこのご時世。
でも、「うーん、なんで使えるといいんだっけ?ツールとかでうまくいけないっけ?」と思ってしまったのでまとめる。
いや、でも、これなんかまとめてる途中で上げるの恥ずかしくなるやつや、、、。
教材:https://dotinstall.com/lessons/basic_unix_v2
なぜUnixコマンドなのか
ファイルとか手動でダダダだってやったがよくないすか?
Q.フォルダを大量に作らないと行けないときは?
あ、だる、、。効率的にやろうぜってことでのUnixコマンド
そもそもUNIXとは
OSの一種らしい
macOSとかと同様に、OSらしい。主にサーバー用に使われている。
無料配布されていたこともあり、互換OSが沢山誕生している。
それらで各々にカスタマイズされてはいるものの
POSIXという共通規格に守られているため、共通して使える。
プロンプトの見方
プロンプト
[vagrant@localhost unixPractice] $
こんな感じ。
プロンプトのパーツ | 説明 |
---|---|
vagrant | ユーザーの名前 |
@localhost | マシーン名(ローカルホストってマシンにいるよ) |
unixPractice | ディレクトリ |
$ | 一般ユーザー |
# | 管理ユーザー |
pwd
pwd (Print Working Directory)
現在のディレクトリを教えてくれます。
cp
文字通りコピーします。
//ディレクトリの場合(再帰的にコピーするという意味で -r )
$ cp -r hoge1 hoge2
//ファイルもコピーできる
$cp hoge1.txt hoge2.txt
mkdir
ディレクトリを作りましょう
//hogehogeディレクトリを作る
$ mkdir hogehoge
//階層のあるディレクトリも作れる
$mkdir -p hogehoge/fugafuga
*-pを指定することにより、hogehogeディレクトリが存在しない場合はそのフォルダごと作る。
rmdir
空のディレクトリを削除する
$ rmdir hogehoge
rm -rf
rmdirは空専門なので、中身があるときにはこの子
いつもお世話になっております。
$ rm -rf hogehoge
cat
ファイルの中身を連結して表示する。
一画面分しか見えない
後ほど紹介するパイプで、grep
などで検索したワードを表示させるのに便利
$ cat huga.txt | grep 'chage'
chage
lessとの使い分けについての参考:https://uxmilk.jp/12235
less
スクリプトや設定ファイルなどを閲覧のみしたい場合は'less'がよい。
vi
とかだと誤って書き換えるリスクもあるしね。
ここにいい感じでまとまってました。
http://d.hatena.ne.jp/midori_kasugano/20100121/1264032849
history
履歴だします。
$ history
1033 vi hoge.txt
1034 cat hoge.txt
1035 vi huga.txt
1036 cat huga.txt
1037 vi huga.txt
1038 cat huga.txt
1039 vi huga.txt
1040 cat huga.txt
1041 cat huga.txt | grep 'chage'
上記の番号で呼び出すこともできるんです。
$ !1041
cat huga.txt | grep 'chage'
chage
1041で実行したcat huga.txt | grep 'chage'
を再び呼び起こしています。
!!
で直前のコマンドを実行できる
$ !!
cat huga.txt | grep 'chage'
chage
直前に実行した関連コマンドを実行
//途中まででいい
!pw
$ !pw
pwd
/home/vagrant/unixPractice/myapp/test
//:pで検索を出す
!pw:p
$ !pw:p
pwd
--help
コマンドの簡単な説明を表示する
$ mkdir --help
Usage: mkdir [OPTION]... DIRECTORY...
ディレクトリを作成する。ただし既にディレクトリがあれば何もしない。
長いオプションに必須の引数は短いオプションにも必須です.
-m, --mode=MODE set file mode (as in chmod), not a=rwx - umask
-p, --parents no error if existing, make parent directories as needed
-v, --verbose print a message for each created directory
-Z, --context=CTX set the SELinux security context of each created
directory to CTX
When COREUTILS_CHILD_DEFAULT_ACLS environment variable is set, -p/--parents
option respects default umask and ACLs, as it does in Red Hat Enterprise Linux 7 by default
--help この使い方を表示して終了
--version バージョン情報を表示して終了
Report mkdir bugs to bug-coreutils@gnu.org
GNU coreutils home page: <http://www.gnu.org/software/coreutils/>
General help using GNU software: <http://www.gnu.org/gethelp/>
Report mkdir translation bugs to <http://translationproject.org/team/>
For complete documentation, run: info coreutils 'mkdir invocation'
man
マニュアルを表示する
MKDIR(1) User Commands MKDIR(1)
NAME
mkdir - make directories
SYNOPSIS
mkdir [OPTION]... DIRECTORY...
DESCRIPTION
Create the DIRECTORY(ies), if they do not already exist.
Mandatory arguments to long options are mandatory for short options too.
-m, --mode=MODE
set file mode (as in chmod), not a=rwx - umask
-p, --parents
no error if existing, make parent directories as needed
-v, --verbose
print a message for each created directory
-Z, --context=CTX
set the SELinux security context of each created directory to CTX
When COREUTILS_CHILD_DEFAULT_ACLS environment variable is set,
-p/--parents option respects default umask and ACLs, as it does
in Red Hat Enterprise Linux 7 by default
--help display this help and exit
--version
output version information and exit
AUTHOR
Written by David MacKenzie.
REPORTING BUGS
Report mkdir bugs to bug-coreutils@gnu.org
GNU coreutils home page: <http://www.gnu.org/software/coreutils/>
General help using GNU software: <http://www.gnu.org/gethelp/>
Report mkdir translation bugs to <http://translationproject.org/team/>
COPYRIGHT
Copyright © 2010 Free Software Foundation, Inc. License GPLv3+: GNU GPL
version 3 or later <http://gnu.org/licenses/gpl.html>.
This is free software: you are free to change and redistribute it.
:
ln シンボリックリンク
ln -s config/production/database/ dbconfig
ls -l
リンク一覧をみることができる
$ ls -l
合計 28
drwxrwxr-x. 2 vagrant vagrant 4096 10月 7 19:59 2018 app1
drwxrwxr-x. 2 vagrant vagrant 4096 10月 7 19:59 2018 app2
drwxrwxr-x. 2 vagrant vagrant 4096 10月 7 19:59 2018 app3
drwxrwxr-x. 2 vagrant vagrant 4096 10月 7 19:59 2018 app4
drwxrwxr-x. 2 vagrant vagrant 4096 10月 7 19:59 2018 app5
lrwxrwxrwx. 1 vagrant vagrant 27 10月 8 15:45 2018 dbconfig -> config/production/database/
-rw-rw-r--. 1 vagrant vagrant 325 10月 8 01:09 2018 hoge.txt
-rw-rw-r--. 1 vagrant vagrant 207 10月 8 01:13 2018 huga.txt
頭文字のみかた
1 | 2 |
---|---|
d | ディレクトリ |
l | リンク |
- | ファイル |
権限の見方
1 | 2 |
---|---|
r | 読み込み可能か |
w | 書き込み可能か |
x | 実行可能か |
touch
空のファイルを作る
$ touch hogehoge.txt
cat /etc/passwd
システムに設定されているユーザー一覧を確認
ユーザー名/パスワード設定済みか/id/グループid/コメント/実行するファイル
$ 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
sync:x:5:0:sync:/sbin:/bin/sync
shutdown:x:6:0:shutdown:/sbin:/sbin/shutdown
halt:x:7:0:halt:/sbin:/sbin/halt
cat /etc/group
グループ一覧
$ cat /etc/group
root:x:0:
bin:x:1:bin,daemon
daemon:x:2:bin,daemon
sys:x:3:bin,adm
adm:x:4:adm,daemon
tty:x:5:
disk:x:6:
lp:x:7:daemon
mem:x:8:
groups
自分が属しているグループ一覧
$ groups
vagrant
su -l
サブスチチューションユーザー
ユーザーを切り替える。
//オーナーに切り替える $ => #
$ su -l
パスワード:
#
chown
change owner
所有権を変更する
//ユーザーとグループをvagrantに変える
sudo chown vagrant:vagrant messages
wc
行数や文字数をカウントしてくれる
行数 単語数 バイト数の順
$ wc huga.txt
53 40 207 huga.txt
//行数だけのときは -l
$ wc -l huga.txt
53 huga.txt
head
頭から数行を見ることができる。
$ head huga.txt
1.
hoge
2.
huga
3.
tyoge
4.
-n
で行数指定も可能
$ head -n 3 huga.txt
1.
hoge
tail
後ろから見たいときはこちら。
もちろん行数指定も可能
$ tail huga.txt
song
16.
sing
17.
sing sing sing
18.
yaha yaha yaha
grep
単語を検索する
$ grep 'ASUKA' huga.txt
ASUKA
> (リダイレクション)
コマンドの結果でファイルを上書きする
$ echo "date" > cmd.txt
応用して、bashに追加することも可能
bash < cmd.txt
bash < cmd.txt > result.txt
>> (リダイレクション)
コマンドの結果でファイルを末尾に追加する
$ echo "date" >> cmd.txt
| (パイプ)
コマンドの結果をファイルにではなく、別のコマンドに渡すことができる
ls -l /etc/
コマンドを表示するコマンド、それにPHP関連のものだけを抽出するようにする。
$ $ ls -l /etc/ | grep "php"
drwxr-xr-x. 2 root root 4096 6月 21 06:56 2018 php-zts.d
drwxr-xr-x. 2 root root 4096 6月 21 06:56 2018 php.d
-rw-r--r--. 1 root root 67183 1月 14 06:59 2018 php.ini
-rw-r--r--. 1 root root 67145 1月 3 21:14 2018 php.ini.15952.2018-01-14@06:59:58~
-rw-r--r--. 1 root root 62394 5月 24 15:18 2018 php.ini.rpmnew
find
ファイルの検索を行う
権限がないためsudo
をつけて行う
コマンド 起点 検索条件 検索ワードの順で表記
$ sudo find /etc -name "http*"
/etc/httpd
/etc/httpd/conf/httpd.conf.14958.2018-01-14@06:57:43~
/etc/httpd/conf/httpd.conf
/etc/logrotate.d/httpd
/etc/sysconfig/httpd
/etc/rc.d/init.d/httpd
別コマンドを実行したい際には
$ sudo find /etc -name "http*" -type f -exec wc -l {} +
1009 /etc/httpd/conf/httpd.conf.14958.2018-01-14@06:57:43~
1009 /etc/httpd/conf/httpd.conf
9 /etc/logrotate.d/httpd
31 /etc/sysconfig/httpd
131 /etc/rc.d/init.d/httpd
2189 合計
hogehohgegohoegheogheogheoghegoehgeoghegoehgoelgheoghegoehgoehgeogheoghegoehgoegheogheog
1.
このどちらかを実行
$ sudo find /etc -name "http*" -type f | xargs wc -l
1009 /etc/httpd/conf/httpd.conf.14958.2018-01-14@06:57:43~
1009 /etc/httpd/conf/httpd.conf
9 /etc/logrotate.d/httpd
1.
31 /etc/sysconfig/httpd
131 /etc/rc.d/init.d/httpd
2189 合計
感想
意外と使いこなすのは大変そうだけど、極めると一気に実用的になりそう!!
次は上級編だっ、、、!
参考
https://dotinstall.com/lessons/basic_unix_v2
https://uxmilk.jp/12235
http://d.hatena.ne.jp/midori_kasugano/20100121/1264032849