Ubuntuメモ

よく使っているコマンドの備忘録です。ずっと覚えていられる頭が欲しい。

SSHログイン関係

SSHを使ってサーバにログインするには
 サーバ:abc.cc.jp ポート:1233
 ユーザ名:ssh_user パスワード:246810

PwerShell
> ssh ssh_user@abc.cc.jp -p 1233 (port省略すると22)
   password:******
$ > shellが開始される

鍵ペア(identity_file)を使ってログインする 
  あらかじめrsa鍵ペアを作成し、公開鍵(*.pubファイル)をサーバのホームディレクトリ上の
   ~/.ssh
に保存しておく。
 秘密鍵をクライアントのカレントディレクトリに置いて、このフォルダからpowershellを起動
> ssh ssh_user@abc.cc.jp -i 鍵ファイル名

検索系

findコマンド

>find 検索場所 -オプション(条件) 
  
 検索場所から、検索条件に一致するものを一覧表示する
 検索場所を省略するとカレントディレクトリを対象とする

例
find . -name *.css    *.css を検索する
find . -atime 0        今日アクセスしたファイル/フォルダを表示(-1だと昨日)
find . -atime +3    3日以前にアクセスされたファイル/フォルダを全て表示
find . -amin 1     1分前にアクセスしたファイル/フォルダを表示
find . -amin -10        10分以内にアクセスしたファイル/フォルダを表示
find . -mtime 0         今日更新したファイル/フォルダを表示
find . -mtine +7        今週更新したファイル/フォルダを全て表示
find . -size 10c        ファイルサイズが10バイトのファイルを検索
find . -size -10c       ファイルサイズが10バイト以下のファイルを検索
find ./n*/re* -type f   ./n*/re* に該当するファイルのみを検索
find ./n*/re* -type d   ./n*/re* に該当するフォルダのみを検索
find . -perm 755        パーミッションが755のファイル/フォルダを検索(*使えない)
find . -perm -u=x       現在のユーザにx(実行権限)があるものを検索
find . -user auser      所有者がauserのファイル/フォルダを表示
find . -group bgroup    グループがbgroupのファイル/フォルダを表示
find . -name *.txt -and -atime 0   複合条件(AND)
find . -name *.txt -or -atime 0   複合条件(OR)
find . -not -name *.txt  条件に当てはまらないものを検索
find ./home/ -perm 664 -exec chmod 666 {}  \; 条件結果のパーミッションを全て変更

調査系

fileコマンド

file ファイル
 ファイルの種類を調べて出力する

>file data
data: ASCII text                                 # テキストファイル
data: bzip2 compressed data, block size = Xk     # bzipファイル
data: gzip compressed data, ...                  # gzip ファイル
data: POSIX tar archive (GNU)          # tar ファイル

ファイル内からの抽出

awkコマンド

> awk 拡張正規表現 ファイル名
 ファイル内から、拡張正規表現に一致する行を取り出して表示する

例
awk '/machi/' in.txt     in.txt内を検索し、machiを含む行の一覧を表示する
awk '/m*i/' in.txt       in.txt内を検索し、m*iを含む行の一覧を表示する
awk '/\/data/' in.txt    in.txt内を検索し、/dataを含む行の一覧を表示する

文字列操作系(暗号化含む) シーザー暗号、ROT13

trコマンド

> tr '変換元文字列' '変換先文字列'
  変換元文字列を変換先文字列に変換します
  単体で使われることはなく、catやecho等の標準出力に対して処理を実行します

echo '私の名前はABCです。' | tr 'ABC' '123'
  A->1,B->2,C->3 にそれぞれ置き換わります

この仕組みを利用してシーザー暗号に使われます
 ■シーザー暗号 エンコード
 echo 'tansunohazama' | tr 'abcdefghijklmnopqrstuvwxyz' '357421689qwertyuioplkjhgfd'
 l3tpkty83d3r3
 ■シーザー暗号 デコード
 echo 'l3tpkty83d3r3' | tr '357421689qwertyuioplkjhgfd' 'abcdefghijklmnopqrstuvwxyz' 
 tansunohazama

ROT13暗号にも使われます
 ■ROT13エンコード
 echo 'tansunohazama' | tr 'A-Za-z' 'N-ZA-Mn-za-m'
 gnafhabunmnzn
 ■ROT13デコード
 echo 'gnafhabunmnzn' | tr 'A-Za-z' 'N-ZA-Mn-za-m'
 tansunohazama

xxdコマンド

xxd オプション ファイル名
  テキストファイル ←→ ダンプファイル の相互変換を行うコマンド

例
>echo "abcdefghijklmnopqrstuvwxyz" > test.txt
>cat test.txt
abcdefghijklmnopqrstuvwxyz
>xxd test.txt > test.dmp      #ダンプ結果をテキストファイルをして保存する
cat test.dmp
00000000: 6162 6364 6566 6768 696a 6b6c 6d6e 6f70  abcdefghijklmnop
00000010: 7172 7374 7576 7778 797a 0a              qrstuvwxyz.
>xxd -r test.dmp       # ダンプをリバースして表示するだけ
abcdefghijklmnopqrstuvwxyz    
>xxd -r test.dmp > rev.txt  # ダンプリバースをtxtにファイルに保存
>cat rev.txt
abcdefghijklmnopqrstuvwxyz

ファイルの圧縮解凍

gzip (gzipの圧縮解凍 *.gz)

>gzip -オプション ファイル名

例
>file data
 data: gzip compressed data
> mv data data.gz
> gzip -d data.gz

 gzip test.txt  ファイルを圧縮します
 gzip -d test.gz ファイルを展開(解凍)します
 gunzip test.gz  でも解凍できる

※拡張子が.gzになっていないと実行できないので、解凍できない時は拡張子(gz)を付ける
 

bzip2 (bzipファイルの圧縮解凍 *.bz2)

>bzip2 -オプション ファイル名

例
>file data
 data: bzip2 compressed data
> mv data data.bz2
> bzip -d data.bz2

 bzip2 test.txt  ファイルを圧縮します
 bzip2 -d test.bz2 ファイルを展開(解凍)します
※拡張子が.bz2になっていないと実行できないので、解凍できない時は拡張子(bz2)を付ける

tar(tar ファイルの圧縮解凍 * .tar)

> tar -オプション ファイル名

tar -cvf test.tar path    # path ファイルをtest.tarに圧縮します
tar -xvf test.tar            # test.tar を解凍します

OSバージョンの確認

簡易確認(バージョンだけ知りたい)

> cat /etc/issue
Ubuntu 24.04 LTS \n \l

詳細確認(コードネームも知りたい)

> lsb_release -a
No LSB modules are avaliable.
Distributor ID: Ubuntu
Description:    Ubuntu 24.04 LTS
Release:        24.04
Codename:       noble

通信系

ポートの使用確認

> ss -ano | grep :22
# 22番ポート使ってる?

ncコマンド(通信の疎通確認)

nc サーバ名 ポート
 サーバのポートに接続し、メッセージの送受信を行えます

# サーバ
> nc -l 12345  # 12345番ポートで待ち受け開始

# クライアント
> nc aaa.bb.cc 12345  # サーバに接続
message を入力すると サーバに送信することができます

OpenSSLコマンド

openssl s_client -connect サーバ:ポート -ign_eof  (ポートを省略すると443)
  SSL通信を使ってネット疎通を行いたい場合

> openssl s_client -connect サーバ:12345 -ign_eof
 CONNECTED(00000003)
 :
 SSLハンドシェイクの結果が出力されます(結構膨大)
read R BLOCK

nmapコマンド

nmap サーバ
 ポートの疎通確認

>nmap -p 1-1000 localhost      # ポート番号が1~1000だけを検索する
Starting Nmap 7.94SVN ( https://nmap.org ) at 2024-09-21 16:47 JST
Nmap scan report for localhost (127.0.0.1)
Host is up (0.00019s latency).
Not shown: 996 closed tcp ports (conn-refused)
PORT    STATE SERVICE
21/tcp  open  ftp
22/tcp  open  ssh
80/tcp  open  http
631/tcp open  ipp

ssコマンド

ss -オプション
 nmap の高速版

 -l  # リッスンポートを表示
 -t  # tcp 接続のみを表示
 -u  # udp接続のみを表示
 -n  # アドレスからサーバ名の解決を行わない
> ss -ltn  # tcpで待ち受けているポートを全て表示

APTによるパッケージ管理

apt コマンドでパッケージ化されたアプリのインストール、アップデート、削除が行えます。
apt は更新しないと最新のパッケージを取得できないので、毎回更新してから使用してください。
apt は、apt-getの後継機版の位置づけですので、基本的にはaptを使えばいいとおもいます。
  apt 対話型で見やすくコマンド操作しやすい
  apt-get 余分な対話はなく、スクリプト向き

aptの更新(おまじないだと思って必ず更新してから使うこと)

> sudo apt update (寿司屋例「へいらっしゃい」)

aptによるパッケージ検索

# apt でインストールできるパッケージの一覧(寿司屋例「今日のネタ全部出して」)
> apt list
 パッケージ名/パッケージ+バージョン
 :
# パッケージ名による検索
> apt search apache (寿司屋例「今日は新鮮な"apache"入ってる?」)
 パッケージ名/パッケージ+バージョン
   説明
 :
 ※説明に"apache"という文字列が入っているものも全て表示
> apt list | grep apache (上と同じですが、searchコマンド用意したんだから使わんかいって叱られます)

aptによるインストール

# パッケージ名を指定してインストール 
> sudo apt install apache2  (寿司屋例「じゃあapache2もらおうかな」)

aptによるアップデート

# アップデートされたパッケージの一覧
> apt list --upgradable   (寿司屋例「今日のおすすめは?」)

# パッケージ名を指定してインストール 
> sudo apt install apache2  (寿司屋例「じゃあapache2もらおうかな」)

# アップデートを全てインストール
> sudo apt upgrade      (寿司屋例「じゃあ全部もらおうかな」)
※ update と upgrade は似ているので打ち間違えないこと!(たまに間違えますw)

# 特定のパッケージのみアップデート
> sudo apt --only-upgrade install apache2  (このapache2だけ握りなおしてもらえるかな)

aptによるアンインストール

# システムから削除(設定ファイルは残す)
sudo apt remove apache2

# システムから削除(設定ファイルも削除)
sudo apt purge apache2

ファイル操作関係

カレントディレクトリを表示(私は今どこにいるの!?)

> pwd
/home/???/デスクトップ

基礎

# フォルダ作成
> mkdir newdir
# ディレクトリ移動
> cd newdir
# カレントフォルダ表示
> pwd
/home/????/デスクトップ/newdir
# ディレクトリ移動
> cd ..
# 簡易表示
> ls
newdir
# 詳細表示
> ll
drwxr-xr-x 3 ??? ???? 4096 7月 7 13:43 newdir

# ファイルを削除する
> rm newdir

# フォルダを削除する
> rm -r newfolder

空のファイルを作る

> touch newfile

パーミッションの設定を行う

# newfileに(管理者:rw,グループ:r,その他:r)読み書き実行権限を付与する
> chmod 644 newfile
所有者(+root)r(読込) w(書込) x(実行)4+2+1
グループメンバr w x4+2+1
その他のメンバr w x4+2+1

tarによる圧縮解凍

linux でよく使われる圧縮解凍ソフトです
gzip、bzip2、xzに対応しています。

インストール方法

> sudo apt install tar

tar による圧縮
 -a auto 拡張子で圧縮方法を自動選別
 -c create 圧縮ファイルを作成する
 -v 詳細モード 圧縮中にファイル名が次々と表示されるようになる
 -f ファイル名 ファイル名の宣言であり必須

> tar -acvf 圧縮ファイル名 圧縮フォルダ名
# testフォルダをtest.tar.gz に圧縮する
> tar -acvf test.tar.gz test

tarによる解凍

 -x 解凍モード
 -v 詳細モード 圧縮中にファイル名が次々と表示されるようになる
 -j bzip2形式に使用
 -z gzip形式に使用
 -j xz形式に使用
 -f ファイル名 ファイル名の宣言であり必須

> tar -xvjf test.tar.gz
# カレントディレクトリにファイルが解凍される(圧縮ファイルは消えない)

ダウンロード関係(wget)

URLを指定してファイルをカレントディレクトリにダウンロードします

#カレントフォルダにファイルをダウンロードします
> wget URL

ダウンロード後、ファイルの解凍を行うことが多い

# apache 2.4.61 のソースをダウンロード
> wget https://dlcdn.apache.org/httpd/httpd-2.4.61.tar.bz2
# 解凍
> tar -xvjf httpd-2.4.61.tar.bz2
# フォルダに移動
> cd httpd-2.4.61
# 設定
> ./configure (調査確認中 document_root,server_root の設定がうまくいかず)
# コンパイルとインストール
> make
> sudo make install

ネットワーク関係

 ローカルIPの確認 hostname -I
 ポートの状態確認 (TCP)ss -ant (UDP) ss -anu

バージョン管理

 コアカーネルのバージョン確認 cat /etc/issue
 バージョンアップ sudo apt update

Apache関係

 パッケージ名 apache2
 設定ファイル /etc/apache2/apache2.conf
 アクセスログ /var/log/apache2/access.log
 エラーログ  /var/log/apache2/error.log

# 起動再起動関係
> sudo systemctl restart apache2
> sudo systemctl start apache2
> sudo systemctl stop apache2

# errorログの表示
> tail -f /var/log/apache2/error.log

# バージョン確認
> apache2 -v

# 自動起動の有効化
> sudo systemctl enable apache2

# ステータス確認
> sudo systemctl status apache2
● apache2.service - The Apache HTTP Server
     Loaded: loaded (/usr/lib/systemd/system/apache2.service; enabled; preset: enabled)
     # 自動起動:enabled 自動起動しない:disabled
     Active: active (running) since Wed 2024-07-17 12:11:31 JST; 58s ago
   # active:実行中 inactive:停止中 

php関係

 バージョン確認 php -v
 composer バージョン確認 composer -v
 composerプロジェクトの生成 composer init

時刻関係

# 時刻設定の表示(system date を表示する)
>  timedatectl status
               Local time: 日 2024-07-07 14:52:51 JST
           Universal time: 日 2024-07-07 05:52:51 UTC
                 RTC time: 日 2024-07-07 05:52:51
                Time zone: Asia/Tokyo (JST, +0900)
System clock synchronized: yes              # yes になっていればそのうち同期されます
              NTP service: active             # active になっていればそのうち同期されます
          RTC in local TZ: no

# 即時同期
> sudo systemctl restart systemd-timesyncd

OpenSSH関係

パッケージ名 openssh-server
設定ファイル /etc/ssh/sshd_config

# 起動再起動
> sudo systemctl start ssh   # 起動
> sudo systemctl restart ssh # 再起動

# バージョン
> ssh -V
OpenSSH_9.6p1 Ubuntu-3ubuntu13.4, OpneSSL 3.0.13 30 Jan 2024

# ステータス
>ssh systemctl status ssh
● ssh.service - OpenBSD Secure Shell server
     Loaded: loaded (/usr/lib/systemd/system/ssh.service; enabled; preset: enab>
     # 自動起動:enabled 自動起動しない:disabled
     Active: active (running) since Wed 2024-07-17 09:51:55 JST; 1min 44s ago
   # active:実行中 inactive:停止中 

# 自動起動の有効化
> sudo systemctl enable ssh

#ログの確認
> sudo journalctl -u ssh
 7月 17 10:01:07 ubaxis-virtual-machine sshd[5003]: Received signal 15; terminating.
 7月 17 10:01:07 ubaxis-virtual-machine systemd[1]: ssh.service: Deactivated successfully.
 7月 17 10:02:10 ubaxis-virtual-machine systemd[1]: Starting ssh.service - OpenBSD Secure Shell server...
 7月 17 10:02:10 ubaxis-virtual-machine sshd[5155]: Server listening on :: port 22.
 7月 17 10:02:10 ubaxis-virtual-machine systemd[1]: Started ssh.service - OpenBSD Secure Shell server.

windowsからのログイン関係
 VM上のubuntuにssh接続する | タンス (tansunohazama.sakura.ne.jp)