linux

Windowsのドライブ(vfat)で rsync を正しく使う方法

vfat形式のドライブ(USBメモリなど)や,sambaなどでネットワーク経由でマウントしたストレージに対して rsync を使う場合は,いくつかオプションつけないと rsync の本来の性能が発揮されません.rsyncの特徴,例えば差分コピーによる高速ファイルコピーな…

Linuxカーネルのソースコードを読む方法(その2)

Linux カーネルのソースコードを読んだのでメモを公開します.Linuxカーネルを読む際の参考になれば幸いです. 今回のお題: kernel.panic 今回はカーネル内部のエラー処理(カーネルパニック)の部分です.ソースコードのバージョンは linux-5.0.1 です. カ…

ラズパイのような少メモリ環境で安全にrsyncを実行する方法

組み込みLinuxのような少メモリの環境では気をつけないと rsync が原因でシステムがクラッシュする場合があります. クラッシュする理由はメモリ不足 rsync はファイルを転送する前に先ずファイルのリストを作ります.リストはメモリ上に一時保存されます.…

dmesg のアクセス制限を外す方法

dmesg を実行するとエラーが出る場合があります $ dmesg dmesg: read kernel buffer failed: 許可されていない操作です これは,Linuxカーネルの設定でアクセス制限を掛けているためです. アクセス制限の設定 アクセス制限を外すには sysctl を使います./e…

Linuxの起動が遅い原因の調査方法

Linuxの起動がものすごく遅い.10分ぐらい掛かる.そういう質問を受けたので原因調査の手順と解決法をまとめます. 起動時のログを見る方法 systemdにはシステム起動時のログを分析する機能があります.使い方も簡単まずは systemd-analyze を実行します $…

apt で NO_PUBKEY / GPG Error が出る場合の解決方法

apt コマンドで公開鍵に関するエラー, NO_PUBKEY / GPG Error が出る場合は,以下の手順で復旧できます例えば apt-get update で下記のエラーが出る場合は The following signatures couldn't be verified because the public key is not available: NO_PUB…

bash と getopt の連携(2018年バージョン).

bash で getopt を使う雛形.エラー処理をちゃんと書いたバージョンです.実行時のエラー,実装上のバグ,どちらも正しく検出&対処できます. #!/bin/bash usage() { cat<

RaspberryPIにdebianを入れて headlessで運用する方法

ラズパイは非力なハードウェアです.ディスプレイやキーボードをつないで,OSとして Raspbian(ラズビアン)などを使えば,PCのように利用することもできます.しかし所詮はラズパイ.PCの代用としては処理速度が遅く,実用性に欠けます.またIoTやオーディ…

glibc でバックトレースを表示する方法(その2)

C/C++で関数を書きました.デバッグに超便利なので,まるごと公開します.backtraceを取得して,FILE* に出力します.出力時の書式は format の引数で変更できます.CおよびC++両方に対応しています. C++のシンボル名は,自動で demangle(デマングル)します…

ログイン時のメッセージを非表示にする方法

コンソールからログインした場合や,リモートからsshで接続した際に表示されるメッセージを消すには $ touch ~/.hushlogin を実行して,~/.hushlogin というファイルを作れば良い.中身は空で良い詳細は man 1 loing 参照このメッセージは,ログインメッセー…

debian で無料のSSL/TLS証明書(Let's Encrypt) を使う

昔は,まともなSSL/TLSの証明書*1を取得するには,有料サービスに毎年数万円を支払う必要がありました.また証明書の申請には数日かかります.一度更新手続きや支払いを忘れると,数日間証明書が失効し,その間サービスがが止まってしまう,という恐ろしい事…

日本語フォルダ名を英語にする方法

デスクトップ,ダウンロード,公開,画像,ビデオのようなディレクトリ名を英語名に変更するには以下のコマンドを実行する $ LANG=C xdg-user-dirs-update --force 設定ファイルは ~/.config/user-dirs.dirs ~/.config/user-dirs.locale システムの既定値(…

pdfのファイルサイズを小さくする方法

pdfファイルに高解像度の画像を埋め込むと,ファイルサイズが無駄に大きくなります.この場合,以下のスクリプトで画像の解像度を下げると,効率よくファイルが圧縮できます.コマンドラインで実行できるので,複数のpdfファイルを一括で変換することも可能…

MBR(bios)でもESP(uefi)でも起動できるgrub2の設定方法

Linuxを起動する方法はたくさんあります.本エントリでは MBR (Master Boot Record)にインストールした grub2 を使う方法 ESP(Efi System Partition)にインストールした grub2 を使う方法 の2つを共存させたディスクを作成する方法についてまとめます前者は…

gpg の使い方

gpg コマンドの使い方を表で整理します よく使うコマンド一覧 操作 コマンド 鍵の管理 公開鍵の一覧を見る gpg --list-keys 秘密鍵の一覧を見る gpg --list-secret-keys 公開鍵を stdout に出力 gpg -a --export [ID] 秘密鍵を stdout に出力 gpg -a --expor…

memtest86をEFI経由で起動する方法

(2017/02/28追記。最新版 MemTest86 V7.3 Free Edition に合わせて記事を更新しました)memtest86 を EFI 経由で起動する方法が予想以上に便利だったので設定方法を紹介しますこの方法を使うと Linux 側で以下のコマンドを実行するだけで $ sudo efibootmgr …

linux環境を複製する方法

以下の手順で,インストール済みの linux環境 を新しいHDDやSSDに複製できます(2016/3/22追記: 細かい点について説明を加筆しました) 新しいHDDのフォーマット 予め新しいHDDやSSDを接続してフォーマットしておきますおすすめの手順は別エントリに書いてます…

usb-serial のデバイスファイル名を固定する方法

ルーターの設定,シリアルコンソール,arduinoのような自作デバイスで使うUSB-シリアル変換器は,udev を使うと デバイスファイル名 パーミッション 所有者 を自動設定できます.うまく設定すると rootアカウントや sudo を使わずに シリアルポートが使える…

ネットワークの転送量を調べる方法

linuxで通信量を調べるなら /proc/net/dev を見るのが簡単です $ cat /proc/net/dev 受信データは第2カラム,送信データは第10カラムにあります.単位は bytes です Inter-| Receive | Transmit face |bytes packets errs drop fifo frame compressed multic…

複数の静的ライブラリ (.a) を結合する方法

2つの static library, libX.a と libY.a を結合して libZ.a を生成するには $ ar cqT libZ.a libX.a libY.a で一旦 thin archive形式の libZ.a を生成し, $ echo "create libZ.a\naddlib libX.a libY.a\nsave\nend" | ar -M 再度 ar コマンドを使って通…

debian で wake-on-lan (WOL) を有効にする方法

debian で wake-on-lan (WOL) を有効するには /etc/network/interfaces.d/eth0 で設定する方法 /etc/network/interfaces で設定する方法 BIOSで有効にする方法 カーネルモジュール側で有効にする方法 などがありますが(詳細は後述),条件によってはうまく…

wordpress の不正ログイン対策(fail2ban)

Wordpressを設置したサイトへの攻撃,乗っ取りが流行っています.乗っ取られると ブログが改ざんされる マルウェアを設置され,不正アクセスの踏み台にされる.レンタルサーバ業者などから苦情が来る などなど,面倒なことが多々起きます.根本的対策として…

coreファイルにPIDを付与する方法

/etc/sysctl.d/local.conf に以下の設定を追加 kernel.core_pattern = core.%e.%p設定は再起動,または sysctl 実行後に反映される $ sudo /sbin/sysctl --system これで,コアダンプは core."プログラムのファイル名"."PID" というファイルに保存されるよう…

VMware (vmplayer)が debian 環境で動作しないときの対処方法

Linux環境でGCCのバージョン5.x系使っていると,vmware workstation や vmplayer が起動しない場合があります対処方法は以下の通り step 1) vmware のログを確認 vmplayerなどのvmware製プログラムはログファイルを出力しています. ファイル名は,デフォル…

SH4用クロス環境の作り方 (2015年版)

Debian 8 (jessie)で SH4 用のクロス環境を作ったので,手順をメモします.この記事は http://d.hatena.ne.jp/pyopyopyo/20141120 をベースに,最新の情報を加筆したものです. 概要 hostは amd64 targetは sh4 です大まかな手順は 手順1) hostに target用の…

ssh のブルートフォース攻撃対策(2015年版)

ssh のブルートフォースアタック(=総当り攻撃、Brute Force Attack)対策を調べたので、メモ。 特定のユーザのみssh接続を許可 (有効性:★、作業の難易度:簡単) /etc/sshd/sshd_config に以下の行を書くと、それ以外のユーザは ssh でログインできなくなる…

古いLinux環境に git をインストールする方法

古い Linux ディストリビューションや,組み込み環境に git を install する方法をまとめます.同じ手順で,レンタルサーバにもインストールできます.gitの開発が始まったのは 2005年なので,それ以前のディストーション,例えば 2003年公開の Redhat 9 な…

SH4用クロス環境の作り方

2015年8月25日追記.より新しい情報を「 SH4用クロス環境の作り方(2015年版)」に書きました.詳細は http://d.hatena.ne.jp/pyopyopyo/20150826 をご覧ください.debian環境で SH4 用のクロス環境を作ったので,手順をメモします概要としては hostは i386 …

bashでちょっと高度なシェルスクリプトを書くときの Tips

bashでちょっと高度なシェルスクリプトを書くときに役立ちそうな小技をまとめてみました. && と || を積極的に使う bashでは コマンド1 && コマンド2 と記述すると,コマンド1が成功した場合のみ,コマンド2が実行されるようになります. (コマンド1が失敗…

bash で Ctrl-C をフックする方法

bash で Ctrl-C をフックする方法、つまりSIGINTを自前のシグナルハンドラで捕捉する方法についてメモ。 概要 シグナルハンドラを設定するには、trap というbashのビルトイン・コマンドを使います #!/bin/bash hander() { echo "recv!!" } trap hander SIGIN…