現在お買い物カゴには何も入っていません。
カテゴリー: tutorial
-
Pythonのオブジェクト指向プログラミング(OOP)入門
1. クラスとインスタンス
クラスは、オブジェクトの設計図や型を定義するものです。インスタンスは、そのクラスから作成された具体的なオブジェクトです。
class Dog: def __init__(self, name): self.name = name def bark(self): return f"{self.name}が吠えました!" # インスタンスの作成 my_dog = Dog("ポチ") print(my_dog.bark()) # 出力: ポチが吠えました!ここで、
my_dogはDogクラスのインスタンスです。通常、インスタンスは変数として扱われます。2. インスタンスメソッドとself
インスタンスメソッド(例:
bark)の第一引数selfは、メソッドを呼び出したインスタンス自身を表します。これにより、メソッド内でインスタンスの属性にアクセスできます。3. init()メソッド
__init__()は特殊メソッドで、インスタンス作成時に自動的に呼び出されます。主に初期化のために使用され、インスタンス作成時に渡された引数を処理します。class Cat: def __init__(self, name, age): self.name = name self.age = age my_cat = Cat("ミケ", 3) print(f"{my_cat.name}は{my_cat.age}歳です") # 出力: ミケは3歳です4. インスタンスの利点
インスタンスを使用することで、同じクラスから異なる属性を持つ複数のオブジェクトを作成できます。これにより、コードの再利用性が高まります。
dog1 = Dog("ポチ") dog2 = Dog("ハチ") print(dog1.bark()) # 出力: ポチが吠えました! print(dog2.bark()) # 出力: ハチが吠えました!5. クラス継承
継承を使用すると、既存のクラスの機能を拡張または変更できます。
class Animal: def __init__(self, name): self.name = name def speak(self): pass class Dog(Animal): def speak(self): return f"{self.name}が吠えました!" class Cat(Animal): def speak(self): return f"{self.name}がニャーと鳴きました!" dog = Dog("ポチ") cat = Cat("ミケ") print(dog.speak()) # 出力: ポチが吠えました! print(cat.speak()) # 出力: ミケがニャーと鳴きました!子クラスで
__init__()をオーバーライドする場合、super().__init__()を使用して親クラスの初期化を行います:class Puppy(Dog): def __init__(self, name, age): super().__init__(name) self.age = age def speak(self): return f"{self.age}歳の{self.name}が可愛く吠えました!" puppy = Puppy("コロ", 1) print(puppy.speak()) # 出力: 1歳のコロが可愛く吠えました!6. クラスメソッドとスタティックメソッド
クラスメソッド
クラスメソッドは、クラス全体に関連する操作を行うメソッドです。主な特徴は:
- @classmethodデコレータを使用します。
- 第一引数に自動的にクラス自身(通常cls)が渡されます。
- クラス変数にアクセスしたり、クラスの状態を変更したりできます。
- インスタンスからもクラスからも呼び出せます。
class MathOperations: @classmethod def add(cls, x, y): return x + y print(MathOperations.add(5, 3)) # 出力: 8スタティックメソッド
スタティックメソッドは、クラスに関連はあるが、クラスやインスタンスの内部データを直接使用しない独立した関数です。主な特徴は:
- @staticmethodデコレータを使用します。
- 自動的に渡される引数はありません(clsやselfを受け取りません)。
- クラス変数やインスタンス変数に直接アクセスしません。
- インスタンスからもクラスからも呼び出せます。
class Utility: @staticmethod def is_even(num): return num % 2 == 0 print(Utility.is_even(4)) # 出力: Trueサンプルコード
以下のサンプルコードで、classmethodとstaticmethodの違いを具体的に示します:
class MathOperations: pi = 3.14159 # クラス変数 def __init__(self, value): self.value = value # インスタンス変数 @classmethod def circle_area(cls, radius): # クラス変数(pi)にアクセスできる return cls.pi * radius ** 2 @staticmethod def is_positive(number): # クラス変数やインスタンス変数にアクセスせず、引数のみを使用 return number > 0 def square(self): # 通常のインスタンスメソッド return self.value ** 2 # 使用例 math_ops = MathOperations(5) # クラスメソッドの呼び出し print(MathOperations.circle_area(3)) # クラスから呼び出し print(math_ops.circle_area(3)) # インスタンスから呼び出し # スタティックメソッドの呼び出し print(MathOperations.is_positive(-2)) # クラスから呼び出し print(math_ops.is_positive(10)) # インスタンスから呼び出し # 通常のインスタンスメソッドの呼び出し print(math_ops.square())このサンプルコードでは:
circle_areaはクラスメソッドで、クラス変数piにアクセスしています。is_positiveはスタティックメソッドで、クラスやインスタンスの状態に依存せず、単に引数を処理します。squareは通常のインスタンスメソッドで、インスタンス変数valueを使用します。
クラスメソッドはクラス全体に関連する操作(例:クラス変数の使用、代替コンストラクタの作成)に適しています。一方、スタティックメソッドは、クラスに関連はあるが、クラスやインスタンスの内部データを直接必要としない独立した操作に適しています。
さらに詳しく
- スタティックメソッドについて:
スタティックメソッドは、クラスの名前空間に属していますが、機能的には独立した関数のように振る舞います。クラスに関連する操作を行いますが、クラスやインスタンスの内部状態に直接アクセスする必要がない場合に使用します。 - 代替コンストラクタについて:
代替コンストラクタは、__init__()メソッド以外の方法でオブジェクトを初期化するためのクラスメソッドです。これにより、異なる形式や条件でオブジェクトを作成する柔軟性が得られます。
それでは、インスタンスメソッド、クラスメソッド、スタティックメソッドの違いを示す包括的なサンプルコードを提供します。このコードには、代替コンストラクタの例も含まれています。
class Student: school_name = "Python High School" # クラス変数 def __init__(self, name, age): self.name = name # インスタンス変数 self.age = age # インスタンス変数 # インスタンスメソッド def introduce(self): return f"私の名前は{self.name}で、{self.age}歳です。" # クラスメソッド @classmethod def change_school(cls, new_school): cls.school_name = new_school return f"学校名を{cls.school_name}に変更しました。" # クラスメソッドを使用した代替コンストラクタ @classmethod def from_birth_year(cls, name, birth_year): age = 2024 - birth_year # 現在の年を2024年と仮定 return cls(name, age) # スタティックメソッド @staticmethod def is_adult(age): return age >= 18 # 使用例 print(Student.school_name) # クラス変数にアクセス # インスタンスメソッドの使用 student1 = Student("太郎", 16) print(student1.introduce()) # クラスメソッドの使用 print(Student.change_school("Pythonista Academy")) print(Student.school_name) # 代替コンストラクタの使用 student2 = Student.from_birth_year("花子", 2000) print(student2.introduce()) # スタティックメソッドの使用 print(Student.is_adult(20)) print(student1.is_adult(student1.age))このサンプルコードは以下の点を示しています:
- インスタンスメソッド(
introduce):selfを通じてインスタンス変数にアクセスします。- 各インスタンスの固有のデータを使用します。
- クラスメソッド(
change_schoolとfrom_birth_year):clsを通じてクラス変数にアクセスしたり、クラス自体を操作したりします。from_birth_yearは代替コンストラクタの例で、異なる方法でインスタンスを作成します。
- スタティックメソッド(
is_adult):- クラスやインスタンスの状態に依存せず、引数のみを使用します。
- クラスに関連する一般的な機能を提供します。
7. デコレータ
デコレータは、既存の関数やメソッドの動作を変更または拡張するための仕組みです。
def uppercase_decorator(func): def wrapper(): result = func() return result.upper() return wrapper @uppercase_decorator def greet(): return "hello, world" print(greet()) # 出力: HELLO, WORLDデコレータは、
@記号を使って関数やメソッドの直前に配置します。これにより、元の関数やメソッドの動作を変更できます。まとめ
この記事では、Pythonのオブジェクト指向プログラミングの基本概念を説明しました。クラスとインスタンス、継承、特殊メソッド、クラスメソッド、スタティックメソッド、そしてデコレータについて学びました。これらの概念を理解し適切に使用することで、より構造化され、再利用可能なコードを書くことができます。
-
Pythonの基本:ループ、例外処理、ファイル操作
1. ループ
forループ
forループは、シーケンス(リスト、タプル、文字列など)の各要素に対して繰り返し処理を行います。
# リストの各要素を出力 fruits = ["apple", "banana", "cherry"] for fruit in fruits: print(fruit)range関数を使用したforループ:
# 0から4までの数値を出力 for i in range(5): print(i)whileループ
whileループは、条件が真である間、繰り返し処理を行います。
# 0から4までの数値を出力 i = 0 while i < 5: print(i) i += 1breakとcontinue
breakはループを終了し、continueは次の反復にスキップします。
# 3でループを終了 for i in range(5): if i == 3: break print(i) # 3をスキップ for i in range(5): if i == 3: continue print(i)2. 例外処理
例外処理は、プログラムの実行中に発生するエラーを処理するための方法です。
try-exceptブロック
try: result = 10 / 0 except ZeroDivisionError: print("ゼロで割ることはできません")複数の例外を処理
try: result = 10 / 0 except ZeroDivisionError: print("ゼロで割ることはできません") except TypeError: print("型のエラーが発生しました")elseとfinally
try: result = 10 / 2 except ZeroDivisionError: print("ゼロで割ることはできません") else: print("計算結果:", result) finally: print("このブロックは必ず実行されます")3. ファイル操作
ファイルの読み込み
# ファイル全体を読み込む with open('example.txt', 'r') as file: content = file.read() print(content) # ファイルを行ごとに読み込む with open('example.txt', 'r') as file: for line in file: print(line.strip())ファイルの書き込み
# ファイルに書き込む(上書き) with open('example.txt', 'w') as file: file.write("Hello, World!\n") # ファイルに追記 with open('example.txt', 'a') as file: file.write("追加の行\n")ファイルの存在確認
import os if os.path.exists('example.txt'): print("ファイルが存在します") else: print("ファイルが存在しません")まとめ
この記事では、Pythonのループ、例外処理、ファイル操作について説明しました。これらの基本的な機能を理解し、適切に使用することで、より複雑で実用的なプログラムを作成することができます。
特に、ループを使用して繰り返し処理を行い、例外処理を使用してエラーを適切に処理し、ファイル操作を使用してデータの読み書きを行うことは、日常的なプログラミングタスクにおいて非常に重要です。
-
Pythonの基本:関数、引数、データ型、変数代入、条件分岐
1. 関数の基本
関数の定義と呼び出し:
def greet(name): return f"Hello, {name}!" print(greet("Alice")) # 出力: Hello, Alice!2. 引数の種類
位置引数
def add(a, b): return a + b print(add(3, 5)) # 出力: 8キーワード引数
def greet(name, greeting="Hello"): return f"{greeting}, {name}!" print(greet("Bob", greeting="Hi")) # 出力: Hi, Bob!可変長引数
def sum_all(*args): return sum(args) print(sum_all(1, 2, 3, 4)) # 出力: 10キーワード可変長引数
def print_info(**kwargs): for key, value in kwargs.items(): print(f"{key}: {value}") print_info(name="Alice", age=30, city="New York")3. データ型
リスト
fruits = ["apple", "banana", "cherry"] fruits.append("date") print(fruits) # 出力: ['apple', 'banana', 'cherry', 'date']リスト内包表記:
squares = [x**2 for x in range(5)] print(squares) # 出力: [0, 1, 4, 9, 16]タプル
coordinates = (10, 20) x, y = coordinates print(f"x: {x}, y: {y}") # 出力: x: 10, y: 20セット
数学の集合でベン図を描いて考えたことが、Pythonで出来ます。
重複を除去する:
numbers = [1, 2, 2, 3, 3, 3, 4, 4, 4, 4] unique_numbers = set(numbers) print(unique_numbers) # 出力: {1, 2, 3, 4}集合演算:
set1 = {1, 2, 3, 4, 5} set2 = {4, 5, 6, 7, 8} print(set1 & set2) # 積集合: {4, 5} print(set1 | set2) # 和集合: {1, 2, 3, 4, 5, 6, 7, 8}辞書
person = {"name": "Alice", "age": 30, "city": "New York"} print(person["name"]) # 出力: Alice # 辞書内包表記 squared_numbers = {x: x**2 for x in range(5)} print(squared_numbers) # 出力: {0: 0, 1: 1, 2: 4, 3: 9, 4: 16}辞書のメソッド1:
print(person.get("job", "Not specified")) # 出力: Not specified person.update({"job": "Engineer"}) print(person) # 出力: {'name': 'Alice', 'age': 30, 'city': 'New York', 'job': 'Engineer'}4. 変数代入
# 複数の変数に同時に代入 a, b, c = 1, 2, 3 print(a, b, c) # 出力: 1 2 3 # リストのアンパック fruits = ["apple", "banana", "cherry"] x, y, z = fruits print(x, y, z) # 出力: apple banana cherry5. 条件分岐
if-elif-else文:
age = 20 if age < 18: print("未成年") elif age < 65: print("成人") else: print("シニア")三項演算子:
is_adult = "成人" if age >= 18 else "未成年" print(is_adult) # 出力: 成人まとめ
この記事では、Pythonの基本的な概念である関数、引数の種類、データ型、変数代入、条件分岐について説明しました。これらの概念を理解し、適切に使用することで、効率的で読みやすいPythonコードを書くことができます。
特に、Pythonの強力な機能である可変長引数、リスト内包表記、辞書内包表記、セットの集合演算などは、コードを簡潔かつ効率的にする上で非常に有用です。
-
findコマンド
findコマンドの基本と活用法
findコマンドは、ファイルシステム内でファイルやディレクトリを検索するための強力なツールです。様々な条件に基づいて検索を行い、結果に対して操作を実行することができます。
基本構文
find [パス] [オプション] [条件] [アクション]主な使用例
- 名前で検索
find /home -name "*.txt"/homeディレクトリ以下の.txtファイルを検索します。
- タイプで検索
find /var -type d/varディレクトリ以下のディレクトリを検索します。
- サイズで検索
find / -size +100Mルートディレクトリ以下の100MB以上のファイルを検索します。
- 最終更新日時で検索
find /home -mtime -7/homeディレクトリ以下の7日以内に更新されたファイルを検索します。
- パーミッションで検索
find /etc -perm 644/etcディレクトリ以下のパーミッションが644のファイルを検索します。
- 所有者で検索
find /home -user john/homeディレクトリ以下のjohnが所有するファイルを検索します。
- 複数条件の組み合わせ
find /home -name "*.log" -size +10M -and -mtime +30/homeディレクトリ以下の、.logファイルで、10MB以上、かつ30日以上前に更新されたファイルを検索します。
- 検索結果に対するアクション
find /tmp -name "*.tmp" -delete/tmpディレクトリ以下の.tmpファイルを検索して削除します。
- 検索結果に対してコマンドを実行
find /home -name "*.jpg" -exec chmod 644 {} \;/homeディレクトリ以下の.jpgファイルを検索し、パーミッションを644に変更します。
以下のようにすると処理が速いという情報もあります1。
find /home -name "*.jpg" -exec chmod 644 {} +- 深さを指定して検索
find /home -maxdepth 2 -name "*.conf"/homeディレクトリから2階層までの深さで.confファイルを検索します。
注意点
- 大規模なファイルシステムでの検索は時間がかかる場合があります。
- rootユーザーでない場合、アクセス権限のないディレクトリやファイルは検索結果に含まれません。
-deleteや-execオプションを使用する際は、意図しないファイルを操作しないよう注意が必要です。find|xargsで使用する場合は特別な書き方があります。manページを参照して下さい。23
findコマンドは非常に柔軟で強力なツールです。これらの基本的な使用法を理解し、必要に応じてマニュアル(
man find)を参照することで、効率的なファイル管理や検索が可能になります。 -
grepの活用
grepコマンドの種類と使用法
grepは “global regular expression print” の略で、ファイル内のテキストパターンを検索するための強力なコマンドラインツールです。主に以下の種類があります:
- 標準grep
- egrep (extended grep)
- fgrep (fast grep)
1. 標準grep
基本的な正規表現を使用して検索を行います。
基本構文:
grep [オプション] パターン [ファイル...]主なオプション:
-i: 大文字小文字を区別しない-v: マッチしない行を表示-n: 行番号を表示-r: ディレクトリを再帰的に検索
使用例:
grep "error" log.txt grep -i "warning" *.log2. egrep (extended grep)
拡張正規表現を使用できます。
grep -Eと同等です。使用例:
egrep "pattern1|pattern2" file.txt grep -E "pattern1|pattern2" file.txt3. fgrep (fast grep)
固定文字列のパターンを高速に検索します。正規表現は使用できません。
grep -Fと同等です。使用例:
fgrep "exact string" file.txt grep -F "exact string" file.txt高度な使用法
- 複数のパターンを検索:
grep -e "pattern1" -e "pattern2" file.txt- 検索結果の前後の行を表示:
grep -A 2 -B 2 "pattern" file.txt- ファイル名のみを表示:
grep -l "pattern" *.txt- マッチした回数を表示:
grep -c "pattern" file.txt- 正規表現を使用:
grep "^start" file.txt # "start"で始まる行 grep "end$" file.txt # "end"で終わる行- ディレクトリ内を再帰的に検索:
grep -r "pattern" /path/to/directorygrepは非常に柔軟で強力なツールであり、テキスト処理やログ分析などの様々なタスクで活用できます。正規表現の知識を深めることで、より効果的に使用することができます。
-
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
-
パッケージ管理
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-patternSnap
Ubuntuで導入されたパッケージ管理システムです。coreで始まるものはbase snapで、各パッケージを動かすのに必要です。その番号はUbuntuリリースのバージョンを表します。
Snapパッケージのインストール:
sudo snap install パッケージ名インストールされたSnapの一覧表示:
snap listSnapパッケージの更新:
sudo snap refresh パッケージ名GUIツール
- App Center(Ubuntu):
Show Appsから「アプリセンター」を開き、検索、インストール、削除が可能です。 - 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 upgradeRPM (Red Hat Package Manager)
低レベルのパッケージ管理ツールです。
.rpmファイルのインストール:
sudo rpm -i パッケージ名.rpmインストールされたパッケージの一覧表示:
rpm -qaGUIツール
Debian、FedoraなどのGNOMEを採用しているLinuxディストリビューションでは、GNOME Softwareがデフォルトのグラフィカルパッケージマネージャーとして使用されています。GNOME Softwareは、ソフトウェアのインストール、更新、削除を簡単に行えるGUIツールです。
Ubuntuに関しては、以前はUbuntu Softwareが使用されていましたが、最新のバージョンではApp Center(アプリセンター)に変更されています。英語版では「App Center」、日本語版では「アプリセンター」と表示されます。
Ubuntuでアプリセンターを開くには、以下の手順を行います:
- 画面左下のShow Apps(アプリケーションを表示)ボタンをクリックします。
- 検索バーに「アプリセンター」または「App Center」と入力します。
- 表示されたアイコンをクリックしてアプリセンターを起動します。
アプリセンターでは、ソフトウェアの検索、インストール、更新、削除などの操作を簡単に行うことができます。
まとめ
これらのツールを使用することで、Debian、Ubuntu、およびFedoraでのパッケージ管理を効率的に行うことができます。GUIツールは初心者にとって使いやすい一方、コマンドラインツールはより詳細な制御と自動化が可能です。
- App Center(Ubuntu):
-
プロセス管理
pgrepとは
プロセス名やその他の属性に基づいてプロセスを検索するコマンドラインツールです。
pgrep -u root sshd # rootユーザーが実行しているsshdプロセスを検索pkillとは
pkill -u username # 特定ユーザーの全プロセスを終了 pkill firefox # プロセス名がパターンに一致する場合にSIGTERMpsとは
現在実行中のプロセスに関する情報を表示するコマンドラインツールです。
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.txtfg
fgコマンドは、バックグラウンドジョブをフォアグラウンドに移動します。$ fg %1 # ジョブ番号1をフォアグラウンドに移動bg
bgコマンドは、一時停止されたジョブをバックグラウンドで再開します。$ sleep 100 ^Z [1] + 18653 suspended sleep 100 $ bg [1] + 18653 continued sleep 100キー操作
ジョブをバックグラウンドで実行する方法には、主に2つあります:
- コマンド実行時にバックグラウンドで起動する
- 実行中のジョブをバックグラウンドに移動する
コマンド実行時にバックグラウンドで起動する
コマンドの末尾に `&` を付けることで、そのコマンドをバックグラウンドで実行できます。
$ sleep 100 & [1] 12345この場合、
sleep 100コマンドがバックグラウンドで実行され、ジョブ番号と プロセスID が表示されます。実行中のジョブをバックグラウンドに移動する
実行中のジョブをバックグラウンドに移動するには、以下の手順を踏みます:
- 実行中のジョブを一時停止する:
Ctrl + Zキーを押します。 - 一時停止したジョブをバックグラウンドで再開する:
bgコマンドを使用します。
$ sleep 100 ^Z [1] + 12345 suspended sleep 100 $ bg [1] + 12345 continued sleep 100この操作により、フォアグラウンドで実行していたジョブをバックグラウンドに移動できます。
^ZとあるのはCtrl + Zキーのことです。その他のキー操作
Ctrl + C: フォアグラウンドで実行中のジョブを終了します。Ctrl + D: 標準入力の終了(EOF)を送信します。多くのプログラムはこれにより終了します。
これらのキー操作と
jobs、fg、bgコマンドを組み合わせることで、効率的にジョブを管理できます。バックグラウンドジョブの使用により、複数のタスクを同時に実行しながら、シェルの対話的な使用を継続できます。 -
texinfoとman pageの概要
Texinfoとは
Texinfoは、単一のソースファイルから複数の形式(オンラインドキュメントや印刷用出力)を生成できるドキュメンテーションシステムです。主にソフトウェアのドキュメント作成に使用されます。
man pageとは
man page(マニュアルページ)は、Unixライクなオペレーティングシステムで使用される、コマンドラインツールやシステム関数のリファレンスマニュアルです。
Texinfoの使い方
- Texinfoソースファイルの作成
makeinfoコマンドでHTML、Info、またはPDF形式に変換- 生成されたドキュメントの配布や公開
texinfoはGNUプロジェクトの公式ドキュメンテーションシステムであり、Emacsと深い関わりがあります。Emacsは texinfoファイルを編集・閲覧するための機能を内蔵しており、Info modeを使用してtexinfo形式のドキュメントを直接閲覧できます。また、Emacsのドキュメントもtexinfoで書かれています。
使い方は以下のコマンドで表示できます:
man texinfoman pageの使い方
manコマンドの基本構文:man [セクション] コマンド名- よく使用されるセクション(1: ユーザーコマンド、5: ファイルフォーマット)
- man pageの構造(NAME、SYNOPSIS、DESCRIPTION等)
日本語のパッケージは以下のコマンドでインストールします1:
sudo apt install manpages-ja manpages-ja-devman 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 [セクション番号] [コマンド名]の形式で指定します。 -
入門書
Perplexity AIや他のLLMの知恵を借りて、サーバ管理やプログラミングに役立つ知識を紹介していきます。その他の記事もたまに書きます。