なにこれ
新しいLinuxの教科書という本を読んで、自分が知らなかった箇所をメモしたので備忘録として残します。
1章
grepコマンド
参照元 or 参照先から一致するのを取る
grep “gprc” main.go ➡️「grpc」を含む文字列
grep “gprc” main.go | sort ➡️↑の文字列をソートしてる
gem list | grep carrierwave ➡️gem listの表示結果から繋いで、carrierwaveって文字だけを抜き出す
2章
prompt
ohishikaito@localhost $ ➡️この$markより左側
echo $SHELL
今使ってるshellを確認できる。
go $ echo $SHELL
/bin/zsh
シェルの種類
- sh
- -csh
- bash
- tcsh
- zsh
3章
知らなかったショートカット
ctrl + B or F
1文字ずつ移動できる
backward forwardの略
esc + B or F
単語移動
option + 矢印の方が正確に移動できる(矢印キー使うのうざいけど!)
Ctrl + W
単語削除
Ctrl + u
カーソルから行頭まで削除(めっちゃ使いそう!)
カットとヤンクって言われるらしい
command + L
ctrl + L で削除したログを復元できた
ctrl + n
ctrl + P で戻った前のログを見れる(あんま使わんけど)
おまけ
日本語は色んな文字コードの規格がある
とりあえず「UTF-8」を選んでおけばおっけー
4章
Linuxは全てファイルからできてる
各ディレクトリの役割
bin
重要度の高いコマンドが格納
dev
デバイスファイルを格納
etc
通常ファイルを置くため
home
ホームディレクトリが配置される
sbin
binと似てるけど、管理者ユーザー向けのコマンドが置かれてる
tmp
一時的なファイル(テンポラリファイル)を置くため
永続的な保存先に選ぶな
usr
各種アプリと、それに付随するファイルを置くため
var
変化するデータ(variable)を置くため
データやログ、電子メール等が格納される
チルダ展開
~のこと
「cd ~」でホームに移動するのは、チルダ展開っていうらしい
lsの「*」と「?」
ls *.rbで.rbのついたファイル➡️ワイルドカード
ls ls Gem?ileでGemfile➡️1文字置き換え
5章
mkdir
-p
存在しない階層フォルダも作れる
rmdir
フォルダ消せる。左から順番に実行
-i
確認でる
cat
ファイル連結して表示できる
cat .ruby-version Gemfile
みたいな
-n
行番号
less
スクロールできるcat
cp
-r
再帰的に実行しないとコピーできん
ln
ショートカットみたいなリンク作れる。使いみちが謎
ln -s app/controllers ctrl
でcontrollersへのリンク
6章
find
find ./app/models -name user.rb
で検索できる
find ./app/models -name 'produc?.rb'
でワイルドカード使える
タイプ指定
find ./app/models -type f -name 'produc?.rb’
-type f || d || l とかがある
man
man lsでlsのdocument見れる
which
which goでgoのPATHが見れる。
which mkでmakeのaliasってのが分かる。すげー優秀
7章
vim
xキー
文字削除
w || b 2回押し
単語移動
0と$
行頭 or 行末に移動
数字➡️shift + g
行番号まで移動
100 ➡️ shift + g ➡️100行目に移動
8章
type mk
mkはmakeのエイリアスだよ
printenv
環境変数の一覧
余談
vimに行番号を表示➡️$ vi ~/.vimrc➡️set number
9章
パーミッションの記号の種類
ファイルのパーミッションの記号と意味
r=読み取り(read)
w=書き込み(write)
x=実行(execute)
-rw-r--r--
「-」=ファイルタイプ(- か d がある)
rw-=オーナーがread & weite
r--=グループ
r—=その他のユーザ
ディレクトリのパーミッションの記号と意味
r=ディレクトリ配下のファイル読み取り
w=ディレクトリ配下の書き込み(ファイル・ディレクトリの作成&削除)
x=実行:ディレクトリをカレントディレクトリにする
drwxrwxr-x.
d=ディレクトリ
「.」は分からん!
余談
vscodeで権限消したらファイル開けない、
読み取り専用にしたら保存できない、
「上書き」って押したら、パーミッションにwが追加されて保存できた
chmod
chmod u+w ファイル名
u=オーナ
g=グループ
o=その他のユーザ
a=ugo全て
ユーザ指定を省略すると、a+を指定したことになる!
数値モード
4=r(読み取り)
2=w(書き込み)
1=x(実行)
合計値で分かる
hoge $ chmod 755 fuga
hoge $ ls -l
-rwxr-xr-x 1 ohishikaido staff 5 6 16 05:38 fuga
10章
プロセス
全てが個別のプロセスIDを持つ
less で閲覧中のファイルがあればプロセスが実行されて、
lessを閉じるとプロセスが消える
psコマンド
TTY
ターミナル
ps ax
全てのプロセス
jobs
zshだとjobsが見れない??
kill
defaultだとkill -15(-TERM)ってのが指定されてる
実行中のvimとかをkillすると、その場で死ぬ
kill -9
例外プロセスで、linuxが処理する?
強制終了みたいなイメージ
11章
stdin 標準入力
stdout 標準出力
sdferr 標準エラー出力
標準出力のリダイレクト
hoge $ ls -l > fuga
hoge $ cat fuga
total 0
-rwxr--r-- 1 ohishikaido staff 0 6 16 06:45 fuga
標準エラー出力のリダイレクト
hoge $ lsdd 2> fuga
hoge $ cat fuga
zsh: command not found: lsdd
>>
追記できる
hoge $ ls -l >> fuga
hoge $ ls -l >> fuga
hoge $ cat fuga
total 8
-rwxr--r-- 1 ohishikaido staff 149 6 16 06:50 fuga
total 8
-rwxr--r-- 1 ohishikaido staff 212 6 16 06:50 fuga
/dev/null
- スペシャルファイル
- 入力先に指定しても何も返さない
- 書き込んでもデータ保存されず消える
出力を消す例)
hoge $ ls > cat /dev/null
hoge $
パイプライン
標準出力を別のコマンドの標準出力につなぐ
例)
hoge $ history | less
1058 history| less
フィルタ
grep、sortとかはよく使う
12章
wc
go $ wc server.go
33 67 771 server.go
33=行数
67=単語数
771=バイト数
ファイル・ディレクトリ数のカウント
隠しファイルに注意(.envとか「.」とか移動用のやつ)
go $ ls / | wc -l
16
sort
並び替え
-n=数値順、
-r=逆順
uniq
重複を取り除く
tr
置換する
cat /etc/passwd | tr a-z A-Z
tail
末尾
tail -n 1 server.go
-f でファイルへの変更内容を監視&出力できる
diff
差分
-uでユニファイド形式ってのが見れる
行基準?みたいな感じで、gitで使ってる表示形式
13章
grep
hoge $ grep bash /etc/passwd
_mbsetupuser:*:248:248:Setup User:/var/setup:/bin/bash
-i
大文字小文字区別なし
hoge $ grep system /etc/passwd
# Note that this file is consulted directly only when the system is running
hoge $ grep system -i /etc/passwd
# Note that this file is consulted directly only when the system is running
root:*:0:0:System Administrator:/var/root:/bin/sh
daemon:*:1:1:System Services:/var/root:/usr/bin/false
-n
行数表示
-v
NOT(条件に一致しない奴らを表示)
14章
sed
使うか分からないから流し読み
1d
最初の1行を消す
hoge $ cat cat
/dev/null
hoge $ se
awk
切り抜きみたいな。正規表現の楽バージョン?
フィールド変数ってのに代入してる
ls -l /usr/bin | awk '{print $5,$9}'
15章
シェルスクリプト実行
./homesize.sh
で実行
カレントディレクトリのshファイルってこと
sourceってつけたら、シェル関係なく実行される?現在のコマンドラインのシェルを使うらしい
16章
位置パラメータ
echo $0 $1
hoge $ ./homesize.sh aadddddd
./homesize.sh aadddddd
17章
$#
$0を除く引数の数
例)
# !/bin/bash
# hoge=hoge
# echo "aaa $hoge"
# echo aa $(date '+%Y')
# echo $0 $1 $#
# echo $@
# if [ "$1" = "binbin" ]; then
# echo hoge
# else
# echo fuga
# fi
# echo $?
# ls ddddddd
# echo $?
# echo $?
# exit 45
# echo $?
# file=$1
# if [ -d "$file" ]; then
# echo $file
# ls $file
# else
# echo $1
# fi
# echo $(seq 1 45)
i=10
echo $((i + 1))
# echo $(i + 1)