よく使うLinuxコマンドのメモ
今回はLinuxのよく使うコマンドをメモとして残します。 簡単なものは覚えているのですが、オプションを忘れて検索することが多いです。検索して使えるので特に問題ないですが、せっかくなら一箇所にまとめておきたいのでこの記事を作ります。
大きくはsed と grepのことを書き残そうと思ったのですが、思ったよりも書きたいコマンドが多かったです。 一個ずつに分けたほうが見やすいですが、思い出すためのメモなので気にしません。この記事を見れば使い方を思い出せるのが目的です。
新しいものをやよく使うものが増え次第、ここに追加していくつもりです。
多すぎて見にくいので整理方法も考え中です。検索できるようにすればいいのか。
ls
ls -la
出力内容
- ファイルタイプ
- パーミッション
- ハードリンク
- オーナー
- グループ
- サイズ
- タイムスタンプ
- ファイル名
オプション
-t # 更新時間順
-S # ファイルサイズ順
-X # 拡張子でまとめる
-R # 再帰的に表示する、見づらいけど
-m # カンマ区切りで出力
使うとしたら上記でしょうか。
stat
stat 001.txt
ファイルのステータスや情報を確認します。
オプション
-f # ファイルシステムの情報を表示
-t # 簡易な表示にする
file
file 001.txt
形式を確認。拡張子からではなく中身から判別。
file -z
圧縮状態の元の形式を確認できます。
mv
mv 001.txt bac
ファイルやディレクトリの移動。名前変更にも使います。
オプション
-i # 上書きの確認
-n # 上書き出来ない
cp
cp 001.txt bac
ファイルやディレクトリをコピーします。
オプション
-r # 再帰的にコピーできます。
-s # シンボリックリンクを作れます。
touch
touch 001.txt
タイムスタンプの更新、なければ空のファイルを作成します。
tee
ls | tee 01.txt | less
標準出力に流しながらファイルに出力できます。
ls | tee 01.txt 02.txt 03.txt
複数のファイルに出力したい場合に使えます。
rsync
rsync -av dev/ backup/
変更を同期します。
ローカルでもバックアップとかに使えますが、ほとんど使わないと思います。
ln
ファイルのハードリンクとシンボリックリンクを作ります。
ln -s ファイル リンク
でシンボリックリンク
ln ファイル リンク
でハードリンク
rm
rm 01.txt
ファイルを削除します。
対象ファイル名は*
で副数の任意文字、?
で1文字の任意文字を定義できます。
rm -r dir
ディレクトリを再帰的に削除する場合です。
mkdir
mkdir dev
ディレクトリを作成します。
オプションでパーミッションの設定とかも出来ますが、私は作ってから変更します。
mkdir -p
にすると親ディレクトリが無い場合も階層ごと作成できて便利です。
cd
カレントディレクトリを移動
cd -
にすると直前のディレクトリに戻ることができる。
オプション
-P # シンボリックリンクではない物理的な場所に移動
tar
tar -czf a.tgz 01.txt
アーカイブを作成、圧縮します。
tar -xzf a.tgz
アーカイブを展開します。
アーカイブにしたものが.tar
。それを圧縮したものが.tgz
や.tar.gz
になります。
オプション
-c # 作成
-x # 展開
-z # gzip圧縮
-v # 対象ファイルのリストを表示
-f # アーカイブファイル名を指定
ssh
ssh xxx
sshで接続
ssh -l user xxx
ssh user@xxx
ログイン名を指定して接続
ssh -l user xxx ls -la > 01.txt
ログインしてコマンドを実行。結果はローカルのテキストファイルに出力。接続先ではなく接続元ということ。
オプション
-p # ポートを指定
-l # ユーザー名を指定
-i # 公開鍵を指定
alias
alias
定義されているエイリアスを表示します。
alias xxx
定義されているエイリアスxxxを表示します。
alias xxx='ls -la'
エイリアスxxxを作成します。
一時的な定義なので、よく使うものは.bashrc
に定義することでいつでも使えます。
alias -p
定義されているエイリアスを定義する書式で出力します。
.bashrc
に定義するときや再利用に使います。
unalias
unalias xxx
定義されているエイリアスxxxを削除します。
whoami
自分のユーザー名を表示
groups
自分が所属しているグループを表示
pwd
カレントディレクトリを表示
オプション
-P # シンボリックリンクではない物理的な場所を表示
type
type xxx
コマンドの起動先を表示します。which
みたいな感じです。
オプション
-a # 該当をすべて表示、通常一番上が実行される
-P # PATH内のみ対象にする、whichと同じ
-t # 種別を表示
echo
echo $LANG
定義されている変数の中身を出力します。
pushd
pushd dir
カレントディレクトリをディレクトリスタックに追加、さらにカレントディレクトリを移動します。
-n
でスタックへの追加のみにできます。その場合は移動しません。
popd
popd
ディレクトリスタックから一つ取り出して移動します。
-n
でスタックの削除のみにできます。その場合は移動しません。
dirs
dirs
ディレクトリスタックを表示します。
オプション
-c # 空にする
-p # 行に分けて表示
-v # 番号付きで表示
chmod
chmod 774 001.txt
ファイル、ディレクトリのパーミッションの変更。
所有者、グループ、その他の順に設定。数値は以下を足します。
4 # 読みこみ 2 # 書き込み 1 # 実行
他の書き方
以下の書き方もできる。
# chmod ユーザー 追加か解除か アクセス権限 ファイル名
chmod o-x 01.txt # その他ユーザーの実行権限を解除
chmod u+r 01.txt # 所有者の読み取り権限を追加
chmod g+w 01.txt # グループの書き込み権限を追加
オプション
-v # 実行結果を表示
-R # 再帰的に実行
chgrp
chgrp group 001.txt
ファイル、ディレクトリの管理グループを変更します。
オプション
-v # 実行結果を表示
-R # 再帰的に実行
chown
chown user 001.txt
ファイル、ディレクトリの管理者を変更します。
オプション
-v # 実行結果を表示
-R # 再帰的に実行
groupadd
groupadd group
グループを作成
gpasswd
gpasswd -a user group
グループにユーザーを追加
gpasswd -d user group
グループのユーザーを解除
gpasswd group
グループのパスワードを設定
groupmod
groupmod -n newName oldName
グループ名を変更
groupmod -g newID oldName
グループIDを変更
groupdel
groupdel group
グループを削除
useradd
useradd user
ユーザーを作成します。adduser
のほうが便利です。
adduser
adduser user
ユーザーを作成します。対話式にパスワードなどの設定が出来ます。
usermod
usermod user
ユーザーの情報を変更します。
usermod -l newuser olduser
ユーザー名を変更します。
オプション
-L # ユーザーをロック
-U # アンロック
-l # ログイン名を変更
-p # パスワードを変更
-g # プライマリーグループを変更
-G # セカンダリーグループを変更
-G-a # セカンダリーグループを追加
userdel
userdel user
ユーザーを削除
userdel -r user
ホームディレクトリも削除
ps
実行中のプロセスを表示します。
PIDを確認してkillコマンドで終了させるとかですね。
kill
kill 111
PID 111を終了
tail
tail -f 001.log
ファイルの末尾を表示します。デフォルトは10行です。
-n 5
で行数の指定が可能。
-f
でファイルの更新を監視できます。止めるときは<C-c>
です。
head
ファイルの先頭を表示します。tailの逆。
head -n 8 001.log
cat
cat 001.txt
cat 001.txt 002.txt > 0102.txt
簡単に内容を確認する際に使います。別のファイルに流したり、結合させるのがもともとの役目の様子です。
オプション
-n # 行番号
-s # 連続した空行をまとめる
他にもプションはあるけど、そんなに使わないです。
less
パイプでつなげて使うとか。コマンド | less
ls -la | less
ファイルを指定してとか。
less 01.txt
オプション
-s # 連続した空行をまとめる
-S # 折り返さない
-N # 行番号を表示
-~ # 末尾以降の~チルダを表示しない
使うとすれば上記か。
キー操作
操作はjkとGとg。
dで半画面進む、uで半画面戻る。
/で検索、nとNで一致候補を前後、qで終了。
find
find ./ -name '01.txt'
ファイル名で検索します。
オプション
-type d # ディレクトリが対象
-type f # ファイルが対象
-type l # シンボリックリンクが対象
grep
grep xxx 01.txt
ファイル中の文字列 xxx を検索
ls -la | grep xxx
コマンドの出力から文字列 xxx を検索
オプション
-G # 正規表現を使用
-r # 再帰的に検索
-5 # 前後5行を表示
-n # 行番号
-l # ファイル名のみ表示
xargs
xxx | xargs yyy
xxxの実行結果を受け取り、yyyの引数にして渡します。ややこしいけどとても便利。
単体でなく、使えるパターンだけ覚えておけば良い。
xxxの実行結果が末尾に「01.txt 02.txt 03.txt」 とつけられるイメージ
sed
cat ./01.txt | sed -e 's/xxx/XXX/g' > ./02.txt
sed -e 's/xxx/XXX/g' ./01.txt > ./02.txt
オプション-iをつけないと出力するだけ、付けるとファイルを上書きします。 -eはコマンドを指定するもので省略できます。複数の操作を行う場合、その度に必要。
grep 'emotion/core' -rl src/ | xargs sed -i -e 's/emotion\/core/emotion\/styled/'
よく使うのは置換のとき。emotion/coreをemotion/styledに置換しました。
オプション
-i # 結果を標準出力しないで上書き
-i.bak # 上書き前を拡張子をつけてバックアップ
-e # 処理内容を指定
-e 's/xxx/XXX/g' # 正規表現で置換
-e '30,31d' # 30,31行を以外を出力
-n # 標準の出力がなくなる -pのコマンドのみ出力
-n -e '30p' # 30行を出力
tree
tree
ツリー形式でファイルディレクトリを表示します。
tree -f -i
ツリー構造にしないでパスを表示します。ファイルリスト作るときに便利です。
オプション
-a # 隠しファイルも対象
-d # ディレクトリのみ
-L 2 # 2階層まで
-i # ディレクトリも出力
-f # 表示をツリー状にしない
apt
apt install xxx
パッケージ管理コマンド。主なコマンドは以下
list # パッケージ一覧を表示
search # パッケージを検索
show # 特定のパッケージの情報を表示
install # 指定パッケージをインストール
remove # 指定パッケージを削除
autoremove # 使われていないパッケージを削除
update # 利用可能パッケージの一覧を更新
upgrade # パッケージを更新
full-upgrade # パッケージを更新、不要なものは削除
curl
curl url > 01.txt
urlにHTTPリクエストを行います。
curl -X POST url -d 'name=user&data=text' > 01.txt
urlにHTTP POST リクエストを行います。こうなると何かしらのアプリケーション使ったほうがいいです。ブラウザ拡張とか。
xdg-open
xdg-open .
現在のディレクトリをデフォルとアプリケーションで開く。
ファイル名を指定すればデフォルトアプリケーションでファイルを開きます。
おわりに
基本的にコンソールでの作業がほとんどなのでこれらを身につけられるととても快適になります。 サーバエンジニアの最初の一歩でしょうか。
また新しいものや気になるものがあったら追記していく予定です。
awkに関する書籍を読んでいるので、それについても後日まとめる予定です。
UbuntuのLTSも18.04がリリースされたので頃合い見計らってアップデートしたいです。