はじめに
Linuxは、特にプログラミングやシステム開発において非常に強力なオペレーティングシステムです。ここでは、Linux環境(特にNOI Linuxなど)での開発ワークフロー、基本的な操作、そしてVimエディタの設定に関するヒントを紹介します。
基本的な操作
ファイル管理
- デスクトップへのファイルのドラッグ&ドロップ:ファイルをデスクトップの上部領域にドラッグすることで、ショートカットのようにアクセスできます。
- 削除:ファイルを削除するには、
Alt + 右クリックメニューから選択します。
ターミナルコマンド
- ディレクトリの移動:デスクトップに移動するには、
cd Desktopと入力します。 - ファイルサイズの確認:
size filenameコマンドでファイルのサイズを確認できます。 - ソフトウェアのインストール(例:Firefox):
sudo apt-get install firefox - ソフトウェアのアップデート:
sudo apt install --only-upgrade firefox
C++開発ワークフロー
ファイルの作成と編集
新しいC++ファイルを作成するには、ターミナルで以下のコマンドを実行します。
vim my_program.cpp
Vimは「普通モード」と「挿入モード」の2つの主要なモードで動作します。起動時は普通モードです。コードを書き始めるには、iキーを押して挿入モードに切り替えます。編集後、Escキーで普通モードに戻ります。
コンパイルと実行
- コンパイル:C++ファイルをコンパイルするには、GCCコンパイラを使用します。
g++ my_program.cpp -o my_programコンパイルオプションを追加することもできます。例えば、メモリリークや未定義動作の検出、厳しい警告レベルを有効にするには:
g++ my_program.cpp -o my_program -O2 -Wall -Wl,--stack=112345678 -fsanitize=address -Wshadow -std=c++17 - 実行:コンパイルが成功すると、生成された実行ファイルを実行できます。
./my_program
Vimエディタの設定と使い方
.vimrc設定ファイル
Vimの動作をカスタマイズするには、ホームディレクトリに.vimrcファイルを作成します。
set tabstop=2 " タブ幅を2に設定
set shiftwidth=2 " 自動インデント幅を2に設定
set autoindent " 自動インデントを有効化
set cindent " C/C++スタイルの自動インデントを有効化
set ruler " ステータスラインにカーソル位置を表示
set nu " 行番号を表示
" 一括選択:G(行末) -> v(ビジュアルモード) -> gg(行頭)
" インデントの修正:Ctrl+V, G, =
" キーマップの例:F9キーでコンパイル&実行
nnoremap <F9> :call BuildAndRun()<CR>
func! BuildAndRun()
exec "w" " ファイルを保存
exec "!clear" " ターミナルをクリア
exec "!g++ % -o %< -fsanitize=address -ftrapv -Wall -g"
exec '!\time -f "time : \%U memo : \%M" ./%<'
endfunc
" キーマップの例:F12キーでターミナルをクリア
nnoremap <F12> :call ClearTerminal()<CR>
func! ClearTerminal()
exec "!clear"
endfunc
これらの設定は、Vimの普通モードでコマンドライン(:で開始)に入力することでも一時的に適用できます。
Vimチュートリアル
Vimの基本操作を学ぶには、ターミナルでvimtutorを実行してください。これは対話式のチュートリアルで、Vimの基本を網羅しています。
高度なツールとテクニック
makeとMakefile
複数のファイルを扱うプロジェクトでは、makeを使用するとビルドプロセスを自動化できます。プロジェクトルートにMakefileを作成します。
# Makefileの例
TARGET = my_program
SOURCES = my_program.cpp
CXXFLAGS = -Wall -std=c++17 -g -fsanitize=address -ftrapv
$(TARGET): $(SOURCES)
$(CXX) $(CXXFLAGS) -o $(TARGET) $(SOURCES)
clean:
rm -f $(TARGET)
この設定では、make my_programコマンドでコンパイルが実行され、make cleanで実行ファイルが削除されます。
デバッグ(GDB)
プログラムのバグを特定するには、GDBデバッガが役立ちます。
g++ my_program.cpp -o my_program -g # デバッグ情報を含めてコンパイル
gdb my_program # GDBを起動
(gdb) b 6 # 6行目にブレークポイントを設定
(gdb) r # プログラムを実行
(gdb) p variable_name # 変数の値を表示
(gdb) q # GDBを終了
パフォーマンス測定(time)
プログラムの実行時間とメモリ使用量を測定するには、timeコマンドを使用します。
\time -f "time : \%U memo : \%M" ./my_program
出力される%Uはユーザー時間(CPU時間)、%Mは peak メモリ使用量(KB単位)です。
システム設定(ulimit)
プログラムが使用できるスタックサイズを変更するには、ulimitコマンドを使用します。
ulimit -a # 現在の制限を表示
ulimit -s 102400 # スタックサイズを100MBに設定
コンパイラフラグ
-fsanitize=address:メモリリークやバッファオーバーフローを検出します。-fsanitize=undefined:未定義動作(UB)を検出します(一部環境では制限あり)。-ftrapv:整数オーバーフローを検出します。-g:デバッグ情報を含め、addr2lineなどのツールでソースコードの行番号を特定できるようにします。
ファイル比較(vimdiff)
2つのファイルの差分を表示するには、vimdiffコマンドが便利です。
vimdiff file1.txt file2.txt