タグ別アーカイブ: Linux

Linuxのプロセスモニタリングが便利になる「htop」コマンド

Linuxだと、よくtopコマンドでプロセスをリアルタイムでモニタリング出来ますよね。
然し、このhtopコマンドをインストールする事で、プロセスのモニタリングがかなり拡張出来るようになります。
ちなみにこのhtopコマンドは、どのディストリビューションのパッケージマネージャでもインストール出来ます。
(RedHat系はepelレポジトリが必要)

このhtopを立ち上げてからF2キー押下で表示設定、F3キー押下でプロセスの検索、F5キー押下でプロセスツリーの表示、F9キー押下で指定のプロセスの停止(Kill)が出来ます。

はい、かなり便利ですよb

htop – Monitor Linux processes in real time (Real world Linux)

Linuxでファイルの詳細情報を取得するstatコマンド

各OSのウィンドウシステム上でファイルのプロパティを開いた際、ファイルの詳細情報が出てきますよね。
LinuxのCLIでも同じことが出来ます。更にパーティションの詳細も得ることが出来ますよ!

#stat /path/to/wordpress/wp-config.php
  File: `/path/to/wordpress/wp-config.php'
  Size: 4536            Blocks: 16         IO Block: 4096   通常ファイル
Device: fd01h/64769d    Inode: 1573134     Links: 1
Access: (0644/-rw-r--r--)  Uid: (   48/  apache)   Gid: (   48/  apache)
Access: 2015-06-14 14:30:01.586521736 +0900
Modify: 2015-06-12 14:25:31.614664973 +0900
Change: 2015-06-12 14:25:31.614664973 +0900
 Birth: -

Linux stat command with examples (Real world Linux)

Linuxハードウェア情報を一覧表示する「lshw」

Linuxを搭載しているハードウェアの詳細情報を出力するコマンド「lshw」。

#Debian系の場合
sudo apt-get install lshw
#RedHat系の場合
sudo yum install lshw
# ハードウェア情報をWebページとして出力する
# 出力先ディレクトリの権限に注意すること
lshw -html >> /var/www/html/hardware.html

Linuxの起動時にシェルスクリプトやコマンドを実行させる方法

「/etc/rc.d/rc.local」にシェルスクリプトやコマンドを入れるだけ。
下記は設定例。

# sudo vi /etc/rc.d/rc.local
# Linux起動時に動かしたい内容を最下行に記入
sh /root/example-shell.sh

Linuxでsudoコマンドをパスワード入力なしで実行する方法

特に愛用されているDebian系・RedHat系・SUSE系ディストリビューションでの例。
※安全上、「/etc/sudoers」は絶対に直接編集しないこと。

#sudo visudo
#Debian系ディストリビューションの場合
#%sudo ALL=(ALL) ALL
%sudo ALL=(ALL) NOPASSWD:ALL
#RedHat・SUSE系ディストリビューションの場合
#%wheel ALL=(ALL) ALL
%wheel ALL=(ALL) NOPASSWD:ALL

基本的には「sudo visudo」よりvim上で「/etc/sudoers」を編集しますが
X Windows Systemを使用している場合、下記の例のようにエディタを指定することが出来ます。

#GNOME を使用する場合
EDITOR=gedit sudo visudo
#KDE を使用する場合
EDITOR=kate kdesu visudo

Linuxのネットワーク高速化

/etc/sysctl.confの末端に以下を追加し、OS起動時にも起こされる「sysctl -p」で反映。

#sudo vi /etc/sysctl.conf
net.ipv4.tcp_window_scaling = 1
net.ipv4.tcp_fin_timeout = 2
net.ipv4.tcp_tw_recycle = 1
net.ipv4.tcp_keepalive_time = 20
net.ipv4.tcp_keepalive_probes = 4
net.ipv4.tcp_keepalive_intvl = 5
net.core.rmem_default = 873800
net.core.wmem_default = 873800
net.core.rmem_max = 1747600
net.core.wmem_max = 1747600
net.core.optmem_max = 20480
net.ipv4.tcp_syncookies=1
net.ipv4.icmp_echo_ignore_broadcasts=1
net.ipv4.conf.all.accept_redirects=0
net.ipv4.conf.default.accept_redirects=0
net.ipv4.conf.eth0.accept_redirects=0
net.ipv4.conf.lo.accept_redirects=0
net.ipv4.conf.all.accept_source_route=0
net.ipv4.conf.default.accept_source_route=0
net.ipv4.conf.eth0.accept_source_route=0
net.ipv4.conf.lo.accept_source_route=0
#sudo sysctl -p

CentOS6.5で、Apache2.2.26のソースコードをrpmにリビルドしてアップデートしたときのお話

サーバエンジニアの友達「Apache2.2.15使ってんすか」

十円玉「centosplusレポジトリからね( ´-`)y-~~」

サーバエンジニアの友達「それ、穴だらけっすよ。リクエストの空受けしたりしますよ。2.2系なら2.2.25出てますけどそれもまだ・・・。」

十円玉「今2.2.26出てんのか( ´-`)y-~~」

久しくターボールをパッケージビルドしていなくて色々忘れている十円玉「aprのバージョンで弾かれた(´・ω・`)」

aprをビルドするも下手こく十円玉「・・・ッッッ(`゚д゚´)」

サーバエンジニアの友達「今『su -』でrootになってるんですよね?そしたらビルド環境こうしたらどうすか( ´-`)つ」

サーバエンジニアの友達「Linuxには、変数やディレクトリの予約語があるので注意してくださいね」

#rpmbuildの環境ディレクトリを作成
#mkdir /root/rpmbuild/{SPECS,BUILD,BUILDROOT.SOURCES,SRPMS,RPMS}

 

#vi .rpmmacros
%_topdir          /root/rpmbuild
%_specdir         %{_topdir}/SPECS
%_builddir        %{_topdir}/BUILD
%_buildroot       %[_topdor]/BUILDROOT
%_sourcedir       %{_topdir}/SOURCES
%_srcrpmdir       %{_topdir}/SRPMS
%_rpmdir          %{_topdir}/RPMS

サーバエンジニアの友達「aprとapr-utilsのターボールをさっきのSOURCESディレクトリにコピーして」

サーバエンジニアの友達「aprとapr-utilsのターボールを解凍したら、*.specファイルをさっきのSPECディレクトリにコピーするじゃないですか」

サーバエンジニアの友達「apr.specはこうじゃないですか?」

#vi /root/rpmbuild/SPECS/apr.spec
#「Version」を合わせる
#「%define aprver 1」直下に、変数「prefixdir」を定義する
%define prefixdir /usr/local/apr
#「Source0」のパスの拡張子を、SOURCESディレクトリと合わせる
Source0: http://www.apache.org/dist/apr/%{name}-%{version}.tar.gz
#./configureのオプションを以下に変更
./configure \
        --prefix=%{prefixdir} \
#以下をコメントアウト
#make check || exit 1
#変数「%{_libdir}」を、冒頭で定義した「%{prefixdir}」に置換
#rm -f $RPM_BUILD_ROOT%{_libdir}/apr.exp
↓
rm -f $RPM_BUILD_ROOT%{prefixdir}/lib/apr.exp
#以下をコメントアウト
#%doc CHANGES LICENSE NOTICE
#変数「%{_libdir}」を、冒頭で定義した「%{prefixdir}」に置換
#%{_libdir}/libapr-%{aprver}.so.*
↓
%{prefixdir}/lib/libapr-%{aprver}.so.*
#「$doc」をコメントアウト
#%doc docs/APRDesign.html docs/canonical_filenames.html
#%doc docs/incomplete_types docs/non_apr_programs
#%doc --parents html
#変数「%{_bindir}」を、冒頭で定義した「%{prefixdir}」に置換
#%{_bindir}/bin/apr*config
#%{_bindir}/lib/libapr-%{aprver}.*a
#%{_bindir}/lib/libapr-%{aprver}.so
#%dir %{_libdir}/apr
#%dir %{_libdir}/apr/build-%{aprver}
#%{_libdir}/apr/build-%{aprver}/*
#%{_libdir}/pkgconfig/apr-%{aprver}.pc
#%dir %{_includedir}/apr-%{aprver}
#%{_includedir}/apr-%{aprver}/*.h
↓
%{prefixdir}/bin/apr*config
%{prefixdir}/lib/libapr-%{aprver}.*a
%{prefixdir}/lib/libapr-%{aprver}.so
%dir %{prefixdir}/lib
%dir %{prefixdir}/build-%{aprver}
%{prefixdir}/build-%{aprver}/*
%{prefixdir}/lib/pkgconfig/apr-%{aprver}.pc
%dir %{prefixdir}/include/apr-%{aprver}
%{prefixdir}/include/apr-%{aprver}/*.h

サーバエンジニアの友達「apr-util.specは」

#vi /root/rpmbuild/SPECS/apr-util.spec
#「Version」を合わせる
#「%define apuver 1」直下に、変数「prefixdir」を定義する
%define prefixdir /usr/local/apr
#「Source0」のパスの拡張子を、SOURCESディレクトリと合わせる
Source0: http://www.apache.org/dist/apr/%{name}-%{version}.tar.gz
#以下をコメントアウト若しくは削除
#%package pgsql
#Group: Development/Libraries
#Summary: APR utility library PostgreSQL DBD driver
#BuildRequires: postgresql-devel
#Requires: apr-util = %{version}-%{release}
#%description pgsql
#This package provides the PostgreSQL driver for the apr-util
#DBD (database abstraction) interface.
#%package mysql
#Group: Development/Libraries
#Summary: APR utility library MySQL DBD driver
#BuildRequires: mysql-devel
#Requires: apr-util = %{version}-%{release}
#%description mysql
#This package provides the MySQL driver for the apr-util DBD
#(database abstraction) interface.
#%package sqlite
#Group: Development/Libraries
#Summary: APR utility library SQLite DBD driver
#BuildRequires: sqlite-devel >= 3.0.0
#Requires: apr-util = %{version}-%{release}
#%description sqlite
#This package provides the SQLite driver for the apr-util DBD
#(database abstraction) interface.
#%package freetds
#Group: Development/Libraries
#Summary: APR utility library FreeTDS DBD driver
#BuildRequires: freetds-devel
#Requires: apr-util = %{version}-%{release}
#%description freetds
#This package provides the FreeTDS driver for the apr-util DBD
#(database abstraction) interface.
#%package odbc
#Group: Development/Libraries
#Summary: APR utility library ODBC DBD driver
#BuildRequires: unixODBC-devel
#Requires: apr-util = %{version}-%{release}
#%description odbc
#This package provides the ODBC driver for the apr-util DBD
#(database abstraction) interface.
#「./configure」を以下のように書き換える
#※ここはあくまでもウチでの環境でのサンプル
./configure \
        --with-apr=%{prefixdir} \
        --with-ldap --without-gdbm \
        --with-berkeley-db \
        --with-crypto --with-openssl --with-nss \
        --without-sqlite2 \
#以下のコメントアウトを外す
make check || exit 1
#変数「%{_libdir}」を、「%{prefixdir}」に置換する
#rm -f $RPM_BUILD_ROOT%{_libdir}/aprutil.exp
↓
rm -f $RPM_BUILD_ROOT%{prefixdir}/lib/aprutil.exp
#変数「%{_libdir}」を、「%{prefixdir}」に置換する
#「$doc~」をコメントアウト
%doc CHANGES LICENSE NOTICE
%{_libdir}/libaprutil-%{apuver}.so.*
%dir %{_libdir}/apr-util-%{apuver}
↓
#%doc CHANGES LICENSE NOTICE
%{prefixdir}/lib/libaprutil-%{apuver}.so.*
%dir %{prefixdir}/include/apr-%{apuver}
#変数「%{_libdir}」を、「%{prefixdir}」に置換する
#%{_libdir}/apr-util-%{apuver}/apr_dbm_db*
↓
%{prefixdir}/lib/apr-util-%{apuver}/apr_dbm_db*
#以下をコメントアウト
#%files pgsql
#%defattr(-,root,root,-)
#%{_libdir}/apr-util-%{apuver}/apr_dbd_pgsql*
#%{prefixdir}/lib/apr-util-%{apuver}/apr_dbd_sqlite*
#%files mysql
#%defattr(-,root,root,-)
#%{_libdir}/apr-util-%{apuver}/apr_dbd_mysql*
#%files sqlite
#%defattr(-,root,root,-)
#%{_libdir}/apr-util-%{apuver}/apr_dbd_sqlite*
#%files freetds
#%defattr(-,root,root,-)
#%{_libdir}/apr-util-%{apuver}/apr_dbd_freetds*
#%files odbc
#%defattr(-,root,root,-)
#%{_libdir}/apr-util-%{apuver}/apr_dbd_odbc*
#変数「%{_libdir}」を、「%{prefixdir}」に置換する
#%{_libdir}/apr-util-%{apuver}/apr_ldap*
↓
%{prefixdir}/lib/apr-util-%{apuver}/apr_ldap*
#%{_libdir}/apr-util-%{apuver}/apr_crypto_openssl*
↓
%{prefixdir}/lib/apr-util-%{apuver}/apr_crypto_openssl*
#%{_libdir}/apr-util-%{apuver}/apr_crypto_nss*
↓
%{prefixdir}/lib/apr-util-%{apuver}/apr_crypto_nss*
#変数「%{_libdir}」「%{_incluidedir}」を、「%{prefixdir}」に置換する
#%{_bindir}/apu-%{apuver}-config
#%{_libdir}/libaprutil-%{apuver}.*a
#%{_libdir}/libaprutil-%{apuver}.so
#%{_libdir}/pkgconfig/apr-util-%{apuver}.pc
#%{_includedir}/apr-%{apuver}/*.h
↓
%{prefixdir}/bin/apu-%{apuver}-config
%{prefixdir}/lib/libaprutil-%{apuver}.*a
%{prefixdir}/lib/libaprutil-%{apuver}.so
%{prefixdir}/lib/pkgconfig/apr-util-%{apuver}.pc
%{prefixdir}/include/apr-%{apuver}/*.h
#以下をコメントアウト
#%doc --parents html

サーバエンジニアの友達「で、aprとutilをビルドして」

#aprのrpmパッケージを作成
rpmbuild -bb /root/rpmbuild/SPECS/apr.spec
rpmbuild -bb /root/rpmbuild/SPECS/apr-util.spec

サーバエンジニアの友達「出来上がったrpmを同時アップデート」

#aprアップデート
rpm --force --nodeps -Uvh /root/rpmbuild/RPMS/x86_64/apr-*.*.*-*.x86_64.rpm\
/root/rpmbuild/RPMS/x86_64/apr-devel-*.*.*-*.x86_64.rpm /root/rpmbuild/RPMS/x86_64/apr-debuginfo-*.*.*-*.x86_64.rpm

サーバエンジニアの友達「そしたら、Apacheのも同じ方法でビルド出来ますよね?」

段々思い出してきた十円玉「無事、Apache2.2が最新版になりやしたっっっっっ(`゚д゚´)」

ちなみに、Apache2.2.15以降のバージョンでは
コンフィグが少し改変されております、必ずチェックし直してね( ^ヮ^)ノ
2.4系はガラッと変わるよ( ^ヮ^)ノ