ユーザ用ツール

サイト用ツール


サイドバー

Menu


ターミナル:shellコマンド

コマンド忘備録

毎回忘れて毎回googleかmanに聞いてる気がするので。以下$は一般ユーザ、#はrootでのコマンドを意味する。

ls

ファイルやディレクトリの一覧を表示する(list segment)。

オプション意味
a隠しファイル込みで表示(all)
l色々情報を出す(long)
h容量に接頭辞をつける(human-readable)
–colorファイル・ディレクトリの種類ごとに色を変える
t更新時順で表示(time)
v数字順で表示(version)
Sファイルサイズ順で表示(Size)

head, tail

ファイルの先頭・末尾を出力する。

オプション意味
n出力する行数を指定

grep

文字列の検索

オプション意味
r再帰的に行う(recursive)
i大文字と小文字を区別しない(ignore-case)

du

ディレクトリの使用容量の確認(disk usage)。あるディレクトリ内のファイルサイズの総量を調べたいときは

$ du -sh /(path to directory)/*/
オプション意味
aファイルの容量も表示(all)
sサブディレクトリ以下はまとめる(summary)
h容量に接頭辞をつける(human-readable)

df

ディレクトリの使用可能容量の確認(disk free)。外部デバイスの情報とマウントポイントが確認できるのでよく使う。

オプション意味
h容量に接頭辞をつける(human-readable)

ssh

secure shell

オプション意味
vverbose。vの数でverbose levelが変わる(三つまで)

chmod

権限を編集するコマンド(change mode)。
オーナー・グループ・他ユーザの順。数字の意味は以下。

数字意味
4readable
2writable
1executable
オプション意味
R再帰的に行う(Recursive)

*権限について
lsするにはそのディレクトリのxが必要
rmするにはそのファイルのwが必要

chown

所有者を編集するコマンド(change owner)。
fileの所有ユーザをuser、グループをgroupにしたいときは

$ chown user:group file
オプション意味
R再帰的に行う(Recursive)

sed

テキストデータの処理(Steam EDitor)。オプション、コマンド、対象ファイルの順に指定する。
例:file内のhogeを全てfugaに置換する場合

$ sed -i s/hoge/fuga/g file
オプション意味
iファイルを上書きする。
コマンド意味
s/hoge/fugaファイルの一番上にあるhogeをfugaに置換する。全て置換する場合は末尾に/gをつける。

rename

ファイル名の置換。置換前・置換後・対象のファイルの順に書く。カレントディレクトリ以下のファイル名のうちhogeをfugaに置換したい場合:

$ rename hoge huga ./*

tar

tarballを作成・展開するコマンド。
1.とにかくtarballを展開したいとき

$ tar xvf hoge.tar

2.圧縮したいとき

オプション意味
c圧縮
x展開
t中身の表示
オプション意味
fファイル名の指定
オプション意味
a圧縮形式を自動認識
zgzip
jbzip
Jxz compress
オプション意味
vverbose(処理したファイルの一覧を表示)

zip

解凍はunzip。

$ zip -r アーカイブ名 圧縮する対象
オプション意味
rディレクトリの中についても再帰的に圧縮する(recursive)

rsync

ファイルの同期を行う(remote syncronize)~scp。

オプション意味
vverbose(処理したファイルの一覧を表示)
aアーカイブモード(archive)。以下のオプション全部盛り
rrecursive
lシンボリックリンクを保持(links)
pパーミッションを保持(permisson)
tタイムスタンプを保持(times)
o所有者をそのまま保持(owner)
g所有グループをそのまま保持する
Dデバイスファイルや特殊ファイルを保持する(devices)
-no-Hハードリンクを保持しない
-no-AACL(アクセス制御リスト)を保持しない
-no-X拡張属性を保持しない

su

ユーザーの変更を行う(switch user)。
引数を与えない場合はrootユーザーになる。-をつけるとそのユーザーのホームに移動する(推奨)。

ssh-keygen

ssh用の鍵を作る。 とりあえずkeynameという名前のed25519の鍵を作りたいときは以下のコマンド

$ cd ~/.ssh
$ ssh-keygen -f keyname -t ed25519 -N ""

でkeyname(秘密鍵)とkeyname.pub(公開鍵)ができる

オプション意味
f鍵の名前を指定(file name)
t鍵の方式を指定(type)
b鍵の長さを指定(bits)
Cコメントを設定(Comment)
N新しいパスフレーズを設定(new pass phrase)

screen

screenを作成してセッションを保存できる。
例 : ssh先で何かのscriptを回しているが、sshが切れてしまうと実行が止まってしまうとき。screen上で実行して一時的にセッションを離脱することでscriptを回し続けられる。
screenの作成

$ screen

これでscreenの中に入れる。

入力意味
Ctr + a今のscreenを終了
Ctr + a → Ctr + dscreenから一時的に出る(デタッチ)

存在するscreenの確認

$ screen -ls

screenに入る(アタッチ)。KEKCCの環境ではidはtab補完が効いた。

$ screen -r hoge(screen id)

外側からデタッチ(?)

$ screen -d hoge(screen id)

screen (id:hoge)を削除

$ screen -X quit  # screen hogeの中にいる場合
$ screen -S hoge -X quit # screenの外にいる場合

ワンライナーのわざ

ファイル数のカウント

$ ls -1 | wc -l

ls listで1行に1ファイルを表示、その行数を数える。

ディレクトリ構造のみコピー

$ cp -sr hoge fuga

ファイルの相対的なシンボリックリンクが貼れないことを利用

ディレクトリ構造は残して中のファイルのみ削除

$ find /path/to/hoge -type f | xargs rm -f

ファイル名を探索してrmに渡す。

リダイレクト

>でリダイレクト。コマンドの出力を利用したいときに使う(ログなど)。
例1:

$ hoge.exe 2>&1 | tee log.txt

正直何が起こっているのかあまりわかっていない。 &は複製を意味する。標準出力が複製されて標準エラー出力になっているらしい。結果、標準出力と標準エラー出力が同じ場所に出力される。teeコマンドは出力をファイルとターミナルの両方に出力するコマンド。

ファイルディスクリプタ意味
0標準入力
1標準出力
2標準エラー出力

例2:

$ hoge.exe > /dev/null

/dev/nullにリダイレクトすることで出力を捨てられる。つまりブラックホールみたいなもの(by D.H.)

Shellスクリプト

0行目に

#!/bin/sh

を書く。

ループ

0から99までloop

#!/bin/sh
for i in $(seq 0 99); do
    #ループ回数を参照するには${i}
done

計算

変数で受ける方法
計算式を(())で囲む。

hoge.sh
#!/bin/bash
input=${1}
((output=${input}+1))
echo ${output}

上のscriptの出力結果は

$ source hoge.sh 1
2

コメントアウト

一行の場合は

# print("not display")

複数行の場合は

<< HOGE
print("This message")
print("cannot be seen")
HOGE

同じ文字が出てくるとコメントアウト終了。

どこでも動くスクリプト

最初に

cd `dirname $0`

と書いておく。$0は自分の名前(フルパス)を出力し、dirnameはディレクトリ部分を抽出する。ちなみにbasenameはファイル名部分を抽出する。

ターミナル/shellコマンド.txt · 最終更新: 2025/04/22 13:07 by kawaue