カテゴリー: server management

  • シェルコマンドでダウンロードする方法

    シェルコマンドを使用してファイルをダウンロードする方法について、主要なツールとサンプルコードを交えて説明します。

    1. wget

    wgetは最も一般的なダウンロードツールの1つです。

    # 基本的な使用法
    wget https://example.com/file.zip
    
    # 出力ファイル名を指定
    wget -O output.zip https://example.com/file.zip
    
    # バックグラウンドでダウンロード
    wget -b https://example.com/largefile.iso
    
    # 再開可能なダウンロード
    wget -c https://example.com/largefile.iso
    1. curl

    curlはURLを使用してデータを転送するためのツールです。

    # 基本的な使用法
    curl -O https://example.com/file.txt
    
    # 出力ファイル名を指定
    curl -o output.txt https://example.com/file.txt
    
    # 進行状況を表示
    curl -# -O https://example.com/file.zip
    
    # リダイレクトに従う
    curl -L -O https://example.com/redirected-file.zip
    1. aria2

    aria2は高速で多機能なダウンロードユーティリティです。

    # 基本的な使用法
    aria2c https://example.com/file.iso
    
    # 複数のURLから同時にダウンロード
    aria2c https://mirror1.com/file.iso https://mirror2.com/file.iso
    
    # トレントファイルからダウンロード
    aria2c file.torrent
    
    # 最大同時ダウンロード数を指定
    aria2c -x 5 https://example.com/file.zip
    1. yt-dlp (YouTube-DLのフォーク)

    yt-dlpは動画サイトからの動画ダウンロードに特化したツールです。

    # Pythonのパッケージ・マネージャでインストール
    pip install --upgrade yt-dlp
    
    # YouTubeビデオをダウンロード
    yt-dlp https://www.youtube.com/watch?v=dQw4w9WgXcQ
    
    # 最高品質の音声のみをダウンロード
    yt-dlp -f 'bestaudio' https://www.youtube.com/watch?v=dQw4w9WgXcQ
    
    # プレイリスト全体をダウンロード
    yt-dlp https://www.youtube.com/playlist?list=PLxxxxxxxxxxxxxxxx

    これらのツールは、それぞれ異なる特徴と使用シナリオがあります。wgetとcurlは一般的なファイルダウンロードに適しており、aria2は複数のソースからの同時ダウンロードに優れています。yt-dlpは動画コンテンツに特化しています。

    使用するツールは、ダウンロードするコンテンツの種類、必要な機能、システムの制約などに応じて選択してください。

  • findコマンド

    findコマンドの基本と活用法

    findコマンドは、ファイルシステム内でファイルやディレクトリを検索するための強力なツールです。様々な条件に基づいて検索を行い、結果に対して操作を実行することができます。

    基本構文

    find [パス] [オプション] [条件] [アクション]

    主な使用例

    1. 名前で検索
       find /home -name "*.txt"

    /homeディレクトリ以下の.txtファイルを検索します。

    1. タイプで検索
       find /var -type d

    /varディレクトリ以下のディレクトリを検索します。

    1. サイズで検索
       find / -size +100M

    ルートディレクトリ以下の100MB以上のファイルを検索します。

    1. 最終更新日時で検索
       find /home -mtime -7

    /homeディレクトリ以下の7日以内に更新されたファイルを検索します。

    1. パーミッションで検索
       find /etc -perm 644

    /etcディレクトリ以下のパーミッションが644のファイルを検索します。

    1. 所有者で検索
       find /home -user john

    /homeディレクトリ以下のjohnが所有するファイルを検索します。

    1. 複数条件の組み合わせ
       find /home -name "*.log" -size +10M -and -mtime +30

    /homeディレクトリ以下の、.logファイルで、10MB以上、かつ30日以上前に更新されたファイルを検索します。

    1. 検索結果に対するアクション
       find /tmp -name "*.tmp" -delete

    /tmpディレクトリ以下の.tmpファイルを検索して削除します。

    1. 検索結果に対してコマンドを実行
       find /home -name "*.jpg" -exec chmod 644 {} \;

    /homeディレクトリ以下の.jpgファイルを検索し、パーミッションを644に変更します。

    以下のようにすると処理が速いという情報もあります1

       find /home -name "*.jpg" -exec chmod 644 {} +
    1. 深さを指定して検索
       find /home -maxdepth 2 -name "*.conf"

    /homeディレクトリから2階層までの深さで.confファイルを検索します。

    注意点

    • 大規模なファイルシステムでの検索は時間がかかる場合があります。
    • rootユーザーでない場合、アクセス権限のないディレクトリやファイルは検索結果に含まれません。
    • -delete-execオプションを使用する際は、意図しないファイルを操作しないよう注意が必要です。
    • find|xargsで使用する場合は特別な書き方があります。manページを参照して下さい。23

    findコマンドは非常に柔軟で強力なツールです。これらの基本的な使用法を理解し、必要に応じてマニュアル(man find)を参照することで、効率的なファイル管理や検索が可能になります。

    1. POSIX 準拠のシェルスクリプトでは find | xargs よりも find -exec {} + を使うべき! ↩︎
    2. man 1 find ↩︎
    3. findコマンドの使い方を簡単に理解するための7つのルール+実践的な知識 ↩︎
  • grepの活用

    grepコマンドの種類と使用法

    grepは “global regular expression print” の略で、ファイル内のテキストパターンを検索するための強力なコマンドラインツールです。主に以下の種類があります:

    1. 標準grep
    2. egrep (extended grep)
    3. fgrep (fast grep)

    1. 標準grep

    基本的な正規表現を使用して検索を行います。

    基本構文:

    grep [オプション] パターン [ファイル...]

    主なオプション:

    • -i: 大文字小文字を区別しない
    • -v: マッチしない行を表示
    • -n: 行番号を表示
    • -r: ディレクトリを再帰的に検索

    使用例:

    grep "error" log.txt
    grep -i "warning" *.log

    2. egrep (extended grep)

    拡張正規表現を使用できます。grep -E と同等です。

    使用例:

    egrep "pattern1|pattern2" file.txt
    grep -E "pattern1|pattern2" file.txt

    3. fgrep (fast grep)

    固定文字列のパターンを高速に検索します。正規表現は使用できません。grep -F と同等です。

    使用例:

    fgrep "exact string" file.txt
    grep -F "exact string" file.txt

    高度な使用法

    1. 複数のパターンを検索:
       grep -e "pattern1" -e "pattern2" file.txt
    1. 検索結果の前後の行を表示:
       grep -A 2 -B 2 "pattern" file.txt
    1. ファイル名のみを表示:
       grep -l "pattern" *.txt
    1. マッチした回数を表示:
       grep -c "pattern" file.txt
    1. 正規表現を使用:
       grep "^start" file.txt  # "start"で始まる行
       grep "end$" file.txt    # "end"で終わる行
    1. ディレクトリ内を再帰的に検索:
       grep -r "pattern" /path/to/directory

    grepは非常に柔軟で強力なツールであり、テキスト処理やログ分析などの様々なタスクで活用できます。正規表現の知識を深めることで、より効果的に使用することができます。

  • UFW

    UFWの基本設定と重要サブコマンド

    UFW (Uncomplicated Firewall) は、Debian系ディストリビューションで使用される簡易ファイアウォールです。以下は最低限覚えておくべき内容です。

    UFWの有効化/無効化:

    sudo ufw enable   # 有効化
    sudo ufw disable  # 無効化

    UFWの状態確認:

    sudo ufw status

    デフォルトポリシーの設定:

    sudo ufw default deny incoming  # 受信をデフォルトで拒否
    sudo ufw default allow outgoing # 送信をデフォルトで許可

    特定のポートを開く:

    sudo ufw allow 22    # SSH (22番ポート) を許可
    sudo ufw allow 80    # HTTP (80番ポート) を許可
    sudo ufw allow 443   # HTTPS (443番ポート) を許可

    特定のサービスを許可:

    sudo ufw allow ssh   # SSHを許可
    sudo ufw allow http  # HTTPを許可

    特定のIPアドレスからの接続を許可:

    sudo ufw allow from 192.168.1.100  # 特定のIPからの全ての接続を許可

    ポートの範囲を開く:

    sudo ufw allow 6000:6007/tcp  # TCPの6000から6007ポートを許可

    ルールの削除:

    sudo ufw delete allow 80  # 80番ポートの許可を削除

    ルールの確認(番号付き):

    sudo ufw status numbered

    特定の番号のルールを削除。上記ルールを確認しながら出来る:

    sudo ufw delete 2 # 2番目のルールを削除

    ログの有効化。rsyslog サポート用に構成されたシステムでは、/var/log/ufw.log にログを記録。レベルも設定可能1:

    sudo ufw logging on

    これらのコマンドを使いこなすことで、基本的なファイアウォール設定を行うことができます。UFWを使用する際は、必要なポートのみを開き、不要なポートは閉じておくことが重要です。また、SSHポート(通常は22番)を閉じてしまうと、リモートアクセスができなくなる可能性があるので注意が必要です。2345

    1. man 8 ufw ↩︎
    2. Ubuntuのソフトウェアファイアウォール:UFWの利用(1) ↩︎
    3. UFWの設定方法 ↩︎
    4. ufwコマンドの使い方 ↩︎
    5. Ubuntu22.04.2 LTSのufw(ファイアウォールツール)の設定方法 ↩︎
  • パッケージ管理

    Debian/Ubuntuのパッケージ管理

    Debian系ディストリビューション(DebianとUbuntu)では、主に以下のパッケージ管理ツールが使用されています。

    パッケージのインストールにはroot権限が必要です。以前の記事でも触れましたが、Debianの初期設定ではsu -lでrootユーザーとして実行します。以下はUbuntuでの例です。

    APT (Advanced Package Tool)

    パッケージのインストール:

    sudo apt install パッケージ名

    パッケージの削除。後者はホームディレクトリ下を除く設定ファイル等も削除する:

    sudo apt remove パッケージ名
    sudo apt purge パッケージ名

    パッケージリストの更新。インストール前やアップグレード前に行う:

    sudo apt update

    システム全体のアップグレード:

    sudo apt upgrade

    パッケージの削除を伴うシステム全体のアップグレード:

    sudo apt full-upgrade

    パッケージの検索:

    apt search 正規表現

    パッケージの情報取得:

    apt show パッケージ名

    dpkg

    低レベルのパッケージ管理ツールです。

    .debファイルのインストール:

    sudo dpkg -i パッケージ名.deb

    インストールされたパッケージの一覧表示:

    dpkg -l

    パッケージ名に含まれるファイル一覧:

    dpkg -L パッケージ名
    dpkg --listfiles パッケージ名

    ファイルがどのパッケージに含まれるか検索:

    dpkg -S filename-search-pattern
    dpkg --search filename-search-pattern

    Snap

    Ubuntuで導入されたパッケージ管理システムです。coreで始まるものはbase snapで、各パッケージを動かすのに必要です。その番号はUbuntuリリースのバージョンを表します。

    Snapパッケージのインストール:

    sudo snap install パッケージ名

    インストールされたSnapの一覧表示:

    snap list

    Snapパッケージの更新:

    sudo snap refresh パッケージ名

    GUIツール

    1. App Center(Ubuntu):
      Show Appsから「アプリセンター」を開き、検索、インストール、削除が可能です。
    2. Synaptic Package Manager:
      より詳細な操作が可能なGUIツールです。
    sudo apt install synaptic

    でインストールできます。

    Fedoraのパッケージ管理

    Fedoraでは、主にDNF (Dandified Yum) を使用します。

    パッケージのインストール:

    sudo dnf install パッケージ名

    パッケージの削除。eraseというエイリアスは廃止された1:

    sudo dnf remove パッケージ名

    パッケージリストの更新:

    sudo dnf check-update

    システム全体のアップグレード:

    sudo dnf upgrade

    RPM (Red Hat Package Manager)

    低レベルのパッケージ管理ツールです。

    .rpmファイルのインストール:

    sudo rpm -i パッケージ名.rpm

    インストールされたパッケージの一覧表示:

    rpm -qa

    GUIツール

    Debian、FedoraなどのGNOMEを採用しているLinuxディストリビューションでは、GNOME Softwareがデフォルトのグラフィカルパッケージマネージャーとして使用されています。GNOME Softwareは、ソフトウェアのインストール、更新、削除を簡単に行えるGUIツールです。

    Ubuntuに関しては、以前はUbuntu Softwareが使用されていましたが、最新のバージョンではApp Center(アプリセンター)に変更されています。英語版では「App Center」、日本語版では「アプリセンター」と表示されます。

    Ubuntuでアプリセンターを開くには、以下の手順を行います:

    1. 画面左下のShow Apps(アプリケーションを表示)ボタンをクリックします。
    2. 検索バーに「アプリセンター」または「App Center」と入力します。
    3. 表示されたアイコンをクリックしてアプリセンターを起動します。

    アプリセンターでは、ソフトウェアの検索、インストール、更新、削除などの操作を簡単に行うことができます。

    まとめ

    これらのツールを使用することで、Debian、Ubuntu、およびFedoraでのパッケージ管理を効率的に行うことができます。GUIツールは初心者にとって使いやすい一方、コマンドラインツールはより詳細な制御と自動化が可能です。

    1. dnf(8) — Linux manual page ↩︎
  • プロセス管理

    pgrepとは

    プロセス名やその他の属性に基づいてプロセスを検索するコマンドラインツールです。

    pgrep -u root sshd # rootユーザーが実行しているsshdプロセスを検索

    pkillとは

    pkill -u username  # 特定ユーザーの全プロセスを終了
    pkill firefox      # プロセス名がパターンに一致する場合にSIGTERM

    psとは

    現在実行中のプロセスに関する情報を表示するコマンドラインツールです。

    ps aux  # 全ユーザーの全プロセスを詳細表示

    killとは

    プロセスIDを指定してプロセスにシグナルを送信するコマンドラインツールです。

    kill -9 1234  # プロセスID 1234のプロセスを強制終了

    主要なオプションには以下があります:

    • -9 (SIGKILL): プロセスを強制終了します。プロセスは即座に終了し、クリーンアップ処理を行う機会がありません。
    • -15 (SIGTERM): デフォルトのシグナルで、プロセスに正常終了を要求します。
    • -1 (SIGHUP): プロセスに設定の再読み込みを要求します。

    例:kill -9 1234 はプロセスID 1234のプロセスを強制終了します。

    fg, bg, jobsの使い方

    これらのコマンドはジョブ制御に使用されます。

    これらのコマンドを使用することで、複数のジョブを効率的に管理し、シェル上での作業を柔軟に行うことができます。

    jobs

    jobsコマンドは、現在のシェルセッションでバックグラウンドで実行されているジョブのリストを表示します。

    $ jobs
    [1]  + running    sleep 100 &
    [2]  - running    nano file.txt

    fg

    fgコマンドは、バックグラウンドジョブをフォアグラウンドに移動します。

    $ fg %1  # ジョブ番号1をフォアグラウンドに移動

    bg

    bgコマンドは、一時停止されたジョブをバックグラウンドで再開します。

    $ sleep 100
    ^Z
    [1]  + 18653 suspended  sleep 100
    $ bg
    [1]  + 18653 continued  sleep 100

    キー操作

    ジョブをバックグラウンドで実行する方法には、主に2つあります:

    1. コマンド実行時にバックグラウンドで起動する
    2. 実行中のジョブをバックグラウンドに移動する
    コマンド実行時にバックグラウンドで起動する

    コマンドの末尾に `&` を付けることで、そのコマンドをバックグラウンドで実行できます。

    $ sleep 100 &
    [1] 12345

    この場合、sleep 100 コマンドがバックグラウンドで実行され、ジョブ番号と プロセスID が表示されます。

    実行中のジョブをバックグラウンドに移動する

    実行中のジョブをバックグラウンドに移動するには、以下の手順を踏みます:

    1. 実行中のジョブを一時停止する:Ctrl + Z キーを押します。
    2. 一時停止したジョブをバックグラウンドで再開する:bg コマンドを使用します。
    $ sleep 100
    ^Z
    [1]  + 12345 suspended  sleep 100
    $ bg
    [1]  + 12345 continued  sleep 100

    この操作により、フォアグラウンドで実行していたジョブをバックグラウンドに移動できます。

    ^ZとあるのはCtrl + Z キーのことです。

    その他のキー操作
    • Ctrl + C: フォアグラウンドで実行中のジョブを終了します。
    • Ctrl + D: 標準入力の終了(EOF)を送信します。多くのプログラムはこれにより終了します。

    これらのキー操作と jobsfgbg コマンドを組み合わせることで、効率的にジョブを管理できます。バックグラウンドジョブの使用により、複数のタスクを同時に実行しながら、シェルの対話的な使用を継続できます。

  • texinfoとman pageの概要

    Texinfoとは

    Texinfoは、単一のソースファイルから複数の形式(オンラインドキュメントや印刷用出力)を生成できるドキュメンテーションシステムです。主にソフトウェアのドキュメント作成に使用されます。

    man pageとは

    man page(マニュアルページ)は、Unixライクなオペレーティングシステムで使用される、コマンドラインツールやシステム関数のリファレンスマニュアルです。

    Texinfoの使い方

    1. Texinfoソースファイルの作成
    2. makeinfoコマンドでHTML、Info、またはPDF形式に変換
    3. 生成されたドキュメントの配布や公開

    texinfoはGNUプロジェクトの公式ドキュメンテーションシステムであり、Emacsと深い関わりがあります。Emacsは texinfoファイルを編集・閲覧するための機能を内蔵しており、Info modeを使用してtexinfo形式のドキュメントを直接閲覧できます。また、Emacsのドキュメントもtexinfoで書かれています。

    使い方は以下のコマンドで表示できます:

    man texinfo

    man pageの使い方

    1. manコマンドの基本構文:man [セクション] コマンド名
    2. よく使用されるセクション(1: ユーザーコマンド、5: ファイルフォーマット)
    3. man pageの構造(NAME、SYNOPSIS、DESCRIPTION等)

    日本語のパッケージは以下のコマンドでインストールします1

    sudo apt install manpages-ja manpages-ja-dev

    man pageは通常、8つのセクションに分かれています2が、そうでない場合もあります。man manで表示できます。次のコマンドでも概要を読めます。

    man 1 intro
    man 2 intro
    man 3 intro
    man 4 intro
    man 5 intro
    man 6 intro
    man 7 intro
    man 8 intro

    特定のセクションのman pageを参照するには、man [セクション番号] [コマンド名]の形式で指定します。

    1. manで基本的なコマンドの日本語表示がされない原因は? ↩︎
    2. manの読み方(初心者向け) ↩︎
  • DebianとUbuntuのサーバ管理コマンド

    Debian リファレンスにサーバ管理の基本情報が記されています。

    以下に説明するシェルコマンドはGNOME 端末(GNOME Terminal)等の端末エミュレータ、或いはコンソールで実行します。

    Tabキーで入力補完出来ます。複数のコマンドを区切るのはセミコロンです。

    DebianとUbuntuは同じDebian系ディストリビューションであるため、多くのコマンドが共通しています。以下に主要なコマンドを説明します。

    root権限

    Debianではrootユーザとパスワードが設定されますので、管理者権限の必要なコマンドはrootアカウントに切り替えて実行します:

    su -l

    Ubuntuではroot権限にはsudoを使用します。sudoに続けてコマンドを入力し、enterを押します。続けてアカウントのパスワードを入力します。sudo実行権限を付与されているアカウントでログインしていることが前提です。カレントディレクトリを移動せずに何度もコマンドを実行したい場合は以下のようにします:

    sudo -H -s

    OSの停止と再起動

    システムの停止

    以下の何れかのコマンドを実行します1

    sudo shutdown -h now
    sudo poweroff

    システムの再起動

    以下の何れかのコマンドを実行します:

    sudo shutdown -r now
    sudo reboot

    サービスの管理

    DebianとUbuntuの新しいバージョンでは、systemdを使用してサービスを管理します。「メモリー中の全 サービス unit のリスト」を得るには次のようにします:

    systemctl list-units --type=service

    サービスの起動:

    sudo systemctl start <service-name>

    サービスの停止:

    sudo systemctl stop <service-name>

    サービスの再起動:

    sudo systemctl restart <service-name>

    サービスの状態確認:

    sudo systemctl status <service-name>

    古いバージョンのDebian/Ubuntuでは、serviceコマンドも使用できます:

    sudo service <service-name> start/stop

    その他の有用なコマンド

    システム情報の表示:

    uname -a

    ディスク使用量の確認:

    df -h

    メモリ使用量の確認:

    free -h

    プロセス一覧の表示:

    top

    または(要インストール):

    htop

    これらのコマンドを使用することで、DebianやUbuntuのサーバを効率的に管理することができます。サーバーの運用には適切な権限と注意が必要です。重要な操作を行う前には、必ずバックアップを取ることをお勧めします。

    1. reboot コマンド/poweroff コマンドの仕組み ↩︎
  • Debian GNU/Linux のインストール情報

    Debian のリリースのページから安定版 (stable)のリンクを辿ると、AMD64 移植版等のDebian GNU/Linux インストールガイドを読めます。最近のコンピュータは UEFI を採用していることが多いのですが、その点についても詳しく書かれています。

    古いコンピュータで動作するi386用については、将来サポートが終了するとの情報があります。