20190503のLinuxに関する記事は7件です。

【Apache】困った、困ったApacheの再起動に失敗したらときと、ゾンビちゃんを一網打尽にする方法

概要

みなさんはこんな経験ないですか?

# /etc/init.d/httpd restart
httpd を停止中: [失敗]
httpd を起動中: httpd: Could not reliably determine the server's fully qualified domain name, using xxx.xxx.xx.xx for ServerName
(98)Address already in use: make_sock: could not bind to address [::]:80
(98)Address already in use: make_sock: could not bind to address 0.0.0.0:80
no listening sockets available, shutting down
Unable to open logs
[失敗]

apache再起動したいけど、できないざますー!!!

そんな時はこのコマンドを叩いてみましょう
httpdのプロセスが ざわついていませんか? ざわざわっ

$ ps auxw | grep httpd
user    24484  0.0  0.3 285604 13060 ?        S    Jan01   0:08 /usr/sbin/httpd
user    24485  0.0  0.3 285604 13048 ?        S    Jan01   0:08 /usr/sbin/httpd
user    24486  0.0  0.3 285604 13044 ?        S    Jan01   0:08 /usr/sbin/httpd

上記は、通常の状態ですが、起動時間がやたら長いのがいたり、ユーザーが?????とかよくわからん
プロセスがいたりして再起動に失敗している場合があります
怪しいプロセスがいた場合は下記コマンドを実行して、ゾンビちゃんを一網打尽にしましょう w

kill -9 `ps auxw | grep httpd | awk '{print $2}'`

解説

kill -9 はプロセスを強制終了します。
プロセスをキルするとか殺すとかいいますね。

ps auxw | grep httpd | awk '{print $2}'
こちらは httpdのプロセスの2要素目のリストを出力しています。
参考までにこのコマンドだけ実行すると↓のようになります

$ ps auxw | grep httpd | awk '{print $2}'
1633
9901
24484
24485
24486

結論

要はhttpdのプロセスを全部killしているだけです。

実行する際は、webを参照しているユーザもいるかもしれないので、
えいやー!!! ではなく、関係各所やタイミングを図りましょうw

それではよい Linux Apache ライフを!!

  • このエントリーをはてなブックマークに追加
  • Qiitaで続きを読む

Arch Linux を触り始めた感想を簡単にまとめる

はじめに

趣味がてら、Arch Linux を数日あれこれ触ってみていました。

初めて触る Linux だったこともあり、ハマることも多かったのですが、その過程が楽しいなと感じました。

この記事では、Arch Linux を触り始めて感じたことをまとめてみようと思います。

経緯

普段仕事で使っているのは Mac なのですが、少し気分を変えてみたいなと思い、Linux 環境を立ち上げてみようと思い立ちました。

Ubuntu や CentOS は多少触ってきたことはあったので、それをもう一回触るのもなんだかなと思っていました。

そこで、どうせならあまり触ったことがない Linux をいじってみようということで探していたところ、Arch Linux が良さそうだったので、VirtualBox 上で触ってみることにしました。

Arch Linux を選んだ理由

Arch Linux の設計哲学が魅力的だったのが大きいです。

以下、Arch Linux - ArchWiki から抜粋します。

Arch Linux は、軽量、柔軟、シンプル、および UNIX ライクであることを目指しています。インストールでは x86-64 用にコンパイルされた最小限 (非GUI) の環境が提供され、不必要なパッケージは含まれません。ユーザーは不要な、あるいは迷惑なパッケージを削っていくのではなく、あらかじめ選択されたデフォルトなどのない最小構成からシステムを作り上げることができます。Arch の設計哲学および実装は、最小構成のコンソールマシンから壮大で機能豊富なデスクトップ環境まで、要求されたいかなる種類のシステムへの拡張をも容易にします。どんな Arch システムにするかはユーザーが決めるのです。

上記の様に、最小構成から必要なもののみインストールしていくということで、不要なものは切り捨てて軽い状態にできるというところに惹かれました。

というのも、Mac を触っている中で、どうしても動作が重くなってしまうシーンがあったので、最小構成で環境を組んだらどんな体験ができるのだろう?という技術的興味が湧きました。

また最近 UNIXという考え方―その設計思想と哲学という本を読んでいて、UNIX 哲学にも興味が湧いていたので、UNIX ライクと謳っている Arch Linux を触ることを通じて、UNIX 哲学を学ぶこともできそうだというところも魅力的でした。

Arch Linux を触り始めて感じたこと

ここからは Arch Linux を触り始めて感じたことをつらつら書いていこうと思います。

Linux に関する理解を深められる

最近の Linux はインストールが非常に簡単にできるようになってきていると思います。しかし Arch Linux の場合は、ディスクのパーティションを切るところから自分でコマンドを実行しながらインストールを進めなければなりません。

以下のインストールガイドを見ると、パーティションを切って、ファイルシステムを準備して、ネットワークを疎通して、というように、すべて手動でインストール作業を進める形となっています。

インストールガイド - ArchWiki

一見面倒ではあるのですが、Linux に関する理解を深めるということを目的に置くと、自分でインストール作業を実施することはとても勉強になるなと感じました。

自分好みに環境をカスタマイズするモチベーションが湧く

Arch Linux を最小構成でインストールしたあとは、CUI しかなく、デスクトップ環境すらありません。

最初はとても普段使いできる状態ではなく不便なのですが、そこから試行錯誤しながら徐々に自分好みの環境にカスタマイズしていくという過程が楽しいなと感じました。

例えば Mac で何気なく使っていたダークモードっぽいデスクトップにしようと思ったとき、Arch Linux にはそもそもデスクトップ環境自体がないため、

  • デスクトップ環境を何を使って立ち上げる?GNOME?KDE?Xfce?
  • デスクトップのテーマ何にする?
  • デスクトップの壁紙何にする?
  • ...

というふうに、ゼロから自分の理想の形を必然的に考えていくことになります。

仕事中だとフラストレーションが溜まる状況になりがちですが、自由な時間に自由な発想で考えていくのは楽しいなと感じました。

また UNIXという考え方―その設計思想と哲学には、「好みに応じて自分で環境を調整できるようにする」という一節がありますが、Linux はすべての設定を制限なくカスタマイズできる自由が存在します。

「この設定、どう変更するのだろう?」ということをあれこれ調べていくのも楽しいなと思いました。

おわりに

もし Arch Linux を触り始めようと思っている方は、まずインストールガイド - ArchWikiを読むことから始まると思います。

僕もまだ入門したてで、まだ触り始めて間もないですが、いずれ仕事でも使えるような環境に育てていけるよう、試行錯誤を続けていこうと思います。

  • このエントリーをはてなブックマークに追加
  • Qiitaで続きを読む

mount コマンドを使わないでマウント一覧を確認する方法

背景

普段、マウント状況を確認するのに素の mount コマンドを一発かまして確認していたのですが、どうもこの結果と実際が一致しないとういう状況に遭遇しました。

シェルスクリプトの中でも使っているため、その信頼性が揺らぐことがあるならば少々問題では、ということでちょっと調べてみました。

※ CentOS6 系の環境で確認
※ 先に答えを言うと→ cat /proc/mounts

マウント、アンマウント実行時

実は、マウント(mount …)を実行した際に、 /etc/mtab というファイルに「~をマウントしてます」という情報を追記しています。
また、逆にアンマウント(umount …)した際には、 /etc/mtab から該当のマウント情報を削除しています。

で、 素の mount コマンドを実行した際には、この /etc/mtab の内容を少々加工して表示するようになっています。

$ cat /etc/mtab
/dev/sda3 / ext4 rw 0 0
proc /proc proc rw 0 0
sysfs /sys sysfs rw 0 0
devpts /dev/pts devpts rw,gid=5,mode=620 0 0
tmpfs /dev/shm tmpfs rw 0 0
/dev/sda1 /boot ext4 rw 0 0
$ mount
/dev/sda3 on / type ext4 (rw)
proc on /proc type proc (rw)
sysfs on /sys type sysfs (rw)
devpts on /dev/pts type devpts (rw,gid=5,mode=620)
tmpfs on /dev/shm type tmpfs (rw)
/dev/sda1 on /boot type ext4 (rw)

マウントしていたものにアクセスできなくなったとき

例えば、NFS でマウントしていたものの、接続先のサーバが落ちてマウントされていない状態になった場合、umount … を実行していないので /etc/mtab に残ったままになってしまいます。

では、 umount … を実行することで削除されるかというと、実際にはマウント状態になっていないので umount: …: 見つかりません と拒否られてしまいます。

※ NFS のマウントオプションにより挙動が変わる可能性があるかもしれません

再度 mount コマンドを発行するも…

再度 NFS でマウントした場合には、すでに /etc/mtab に記載されており、対象へアクセスが可能になるだけで /etc/mtab は更新されないだろう、と思いきや、新たにマウント情報が追記されてしまいます。

この状態で umount … を発行した際にすべてきれいになるかというと、これまた期待を裏切られて新たに追記されたものだけが削除されてしまい、いつまでも整合性がとれない事態に陥ってしまいます(´・ω・`)。

さらば、/etc/mtab よ!

/proc/mounts
【参考】https://access.redhat.com/documentation/ja-jp/red_hat_enterprise_linux/6/html/deployment_guide/s2-proc-mounts)

$ cat /proc/mounts
rootfs / rootfs rw 0 0
proc /proc proc rw,relatime 0 0
sysfs /sys sysfs rw,relatime 0 0
devtmpfs /dev devtmpfs rw,relatime,size=759524k,nr_inodes=189881,mode=755 0 0
devpts /dev/pts devpts rw,relatime,gid=5,mode=620,ptmxmode=000 0 0
tmpfs /dev/shm tmpfs rw,relatime 0 0
/dev/sda3 / ext4 rw,relatime,barrier=1,data=ordered 0 0
/proc/bus/usb /proc/bus/usb usbfs rw,relatime 0 0
/dev/sda1 /boot ext4 rw,relatime,barrier=1,data=ordered 0 0

/etc/mtab を加工してどうにかできないのものかと調べていたところ、この /proc/mounts がリアルタイムに現在のマウント情報を反映していることがわかったため、素の mount コマンドをたたくことでマウント一覧を確認する方法を手放すことにしました。

/etc/mtab を加工するまでもなかったですね。

また、不整合が発生する可能性があるなら、最初から /etc/mtab を更新しないよう mount コマンドの -n オプションを指定してマウントした方がいいのかもしれませんね。

$ man mount
…
 -n, --no-mtab
   Mount without writing in /etc/mtab.  This is necessary for example when /etc is on a read-only filesystem.
…
  • このエントリーをはてなブックマークに追加
  • Qiitaで続きを読む

Pythonコード補完ソフトKite、ついにLinuxサポート追加

00596E88-34DA-4B1C-8B9B-13A56FA967B4.jpeg

Kiteは、数週間前@KeisukeToyotaさんもこの記事で話していた、Pythonのスマートコード補完や参考書検索ができるツールです。もともとWindows、macOSにてPyCharm、VS Code、Vim、Sublime、Atomなどのエディタで使えますが、今日持ってLinuxサポートも追加したようです。

具体的な情報は公式サイトの発表記事まで。Ubuntu、Fedora、Arch Linux、Linux Mint、openSUSEなど、色々なLinuxで使えると言っています。デスクトップはKDE、XFCE、Gnome 2・3どれでもオーケーのようです。

数年前からLinuxサポートを約束していたので、ついに発表されて嬉しいです。

image.png

Kiteのダウンロードは公式サイトから。上の@KeisukeToyotaの記事にインストール手順が書いてあります。是非試して見ましょう。

  • このエントリーをはてなブックマークに追加
  • Qiitaで続きを読む

CentOS7でlocaleを日本語にしたい(「can't set the locale; make sure $LC_* and $LANG are correct」って怒られたときの解決方法)

こうゆう設定ってすぐ忘れちゃうよね

いつも調べ直しちゃいます。なので、備忘録として残す。

経緯

can't set the locale; make sure $LC_* and $LANG are correctって怒られたので設定しました。
最初にやっとくべき設定ですね。

現在のロケールを確認

localectl
出力
   System Locale: LANG=en_US.UTF-8
       VC Keymap: us
      X11 Layout: n/a

jaになってません。enだって。つまり日本のじゃない。

日本語のロケールをインストール

日本語のロケールがあるか確認

localectl list-locales | grep -i ja

なかった(゜゜)

ので、インストールする

sudo yum -y install glibc-common

確認

 localectl list-locales | grep -i ja
出力
ja_JP
ja_JP.eucjp
ja_JP.ujis
ja_JP.utf8
japanese
japanese.euc

jaがあるので良さそう。

日本語のロケールを設定

なので、以下のようにコマンド打ちましょ

localectl set-locale LANG=ja_JP.UTF-8

これだけじゃ反映しませんので、以下で反映させる

source /etc/locale.conf

設定の確認

localectl
出力
   System Locale: LANG=ja_JP.utf8
       VC Keymap: us
      X11 Layout: n/a

おっけい

おわり

  • このエントリーをはてなブックマークに追加
  • Qiitaで続きを読む

LDAPで快適Linux環境 #4 LDAPアカウントでログイン

前回はアカウント情報をLDAPサーバーに登録しました。今回は、クライアントからサーバー上のアカウントにログインしてみます。

ここからはクライアントでの作業です。
まず、必要なパッケージをインストールします。

root@deb:~# apt install libnss-ldap libpam-ldap ldap-utils nscd nslcd

すると、自動設定が走ります。
親切なことに案内が日本語なので、それに従って設定していきます。
再設定したいときは、dpkg-reconfigureを走らせます。

設定ファイルをいじっていきます。

/etc/nsswitch.conf
#追記
passwd:     compat ldap
group:     compat ldap
shadow:     compat ldap
/etc/pam.d/common-password
#26行目"use_authtok"を削除する
password     [success=1 user_unknown=ignore default=die]     pam_ldap.so try_first_pass 

そして運命の再起動。
設定ミスがあるとログインで無限ループします。レスキューモードで頑張りましょう。
うまくいっていると、ログイン画面が出てきます。ここでLDAPアカウントにログインしようとしてできないのは正常です。ホームディレクトリが存在しないからです。
ローカルユーザーでログインして、su -でログインしてみましょう。または、GUIでなくCUIでならいきなりLDAPアカウントにログインできます。
ホームディレクトリが無いので"HOME=/"でログインされますがそれで成功です。

次回は、NFSサーバーの設定をしていきます。

  • このエントリーをはてなブックマークに追加
  • Qiitaで続きを読む

pwdコマンドについて調べてみました!

pwd コマンドとは!?:grinning:

  • 基本的なコマンドなので、私なりに調べてみました:smiley:
  • カレントディレクトリを表示するコマンドです:yum:
  • pwd は print working directory の略です:relaxed:
  • 実行してみましょう!:slight_smile:
$ cd /tmp/
$ pwd
/tmp
  • カレントディレクトリが表示されましたね!!:clap:
  • いかがでしたか? 参考になったら左上の「いいね」ボタンを押してください!:boom:

マニュアルを引いてみる

  • どんなコマンドでもマニュアルがあります
  • OSがRHEL系だとCoreutilsのマニュアルが出てくるはずです
    • BSD系でも大差ないでしょう
    • とか書くと面倒なおっさんに突っ込まれるのでfreeBSDのマニュアルも見てみましょう

RHEL Coreutils版

Coreutils 8.31での man pwd の抜粋です。

PWD(1)                                              User Commands                                              PWD(1)

NAME
       pwd - print name of current/working directory

SYNOPSIS
       pwd [OPTION]...

DESCRIPTION
       Print the full filename of the current working directory.

       -L, --logical
              use PWD from environment, even if it contains symlinks

       -P, --physical
              avoid all symlinks

       --help display this help and exit

       --version
              output version information and exit

       If no option is specified, -P is assumed.

       NOTE: your shell may have its own version of pwd, which usually supersedes the version described here.  Please
       refer to your shell's documentation for details about the options it supports.

まず分かることは

  • -Lと-Pというオプションがある
    • -L はシンボリックリンクを表示する (logical)
    • -P はシンボリックリンクをたどって物理的(physical)なパスを表示する
    • オプションが指定されなければ、 -P の挙動になる
  • --help , --version というオプションがある

freeBSD

マニュアルを抜粋してみます pwd(1) 1

PWD(1)            BSD General Commands Manual           PWD(1)

NAME
     pwd -- return working directory name

SYNOPSIS
     pwd [-L | -P]

DESCRIPTION
     The pwd utility writes the absolute pathname of the current working
     directory to the standard output.

     Some shells may provide a builtin pwd command which is similar or identi-
     cal to this utility.  Consult the builtin(1) manual page.

     The options are as follows:

     -L      Display the logical current working directory.

     -P      Display the physical current working directory (all symbolic
         links resolved).

     If no options are specified, the -P option is assumed.
  • -L, -Pのオプションがあります。デフォルトは -P です
  • 以下、RHEL環境(CentOS 6.10)で実施

実行してみる

シンボリックリンクを作成して挙動を見てみましょう。ディレクトリを作って、シンボリックリンクのディレクトリに入ってオプションの違いを示します。

$ cd /tmp
$ mkdir dir
$ ln -s dir sym-dir
$ cd sym-dir/
$ pwd -L 
/tmp/sym-dir # シンボリックリンクのディレクトリが表示されている
$ pwd -P
/tmp/dir # 実体のディレクトリが表示されている

おっと忘れてた。デフォルトの挙動をチェックしてみましょう。

# pwd
/tmp/sym-dir

本来 -P の結果が出るはずなんですが、シンボリックリンクである -L の結果が出ています。

環境依存の pwd

あやしいな・・・本当にバイナリあってるの?ってことで調べてみます。

$ which pwd
/bin/pwd

実行してるバイナリはあってそう。
確認のために --help してみます。

$ pwd --help
-bash: pwd: --: invalid option
pwd: usage: pwd [-LP]

なんでや!エラーになるぞ! :anger:
エラーの内容をよく見てください。

-bash:

はい、お分かりの通りbashの組み込みコマンド(shell builtin)です。

組み込みコマンドというのはshellに予め仕込まれてるコマンドです。 help コマンドで一覧を見ることができます。実行していたコマンドが組み込みコマンドだったのか確かめてみます。

$ type pwd
pwd is a shell builtin

予想どおりシェルの組み込みコマンドが実行されていたのでした。期待通りのコマンドの結果を得るためには絶対パスでpwdを叩いてやります。他のやり方としては、aliasを貼るか、env pwd とします 2

$ /bin/pwd -L
/tmp/syn-dir
$ /bin/pwd -P
/tmp/dir
$ /bin/pwd
/tmp/dir

期待通りの結果が返ってきました。よかったね:relaxed:

トリビア:シェル組み込みコマンドのechoとGNU Coreutilsのecho はオプションが(ほぼ)同じなので互換性があります 3

発端

技術書典6にサークル参加していました。サークル参加しての感想はこちらに書きました:技術書典6 振り返り

売り子をしていたら新刊の「解説CoreUtils第7版」の pwd のデフォルト値違うよ!という指摘を受けました。動作確認ついでに調べてみました!っていうのが本記事です。

さらなる展開

一緒に売り子していた人にその事実を伝えると、最新版のPOSIXの仕様に矛盾していることが判明しました。

The Open Group Base Specifications Issue 7, 2018 edition のサイトでpwdコマンドを確認してみましょう 4

If both -L and -P are specified, the last one shall apply. If neither -L nor -P is specified, the pwd utility shall behave as if -L had been specified.

-L がデフォルトですね。

先程触れたcoreutilsのweb版のマニュアルは引用はわざと中途半端なところで切っていました。一文まるまる抜き出してみるとこのようになっています5

If -L and -P are both given, the last one takes precedence. If neither option is given, then this implementation uses -P as the default unless the POSIXLY_CORRECT environment variable is set.

_人人人人人人人人人_
> POSIXLY_CORRECT <
 ̄Y^Y^Y^Y^Y^Y^Y^Y^Y^ ̄

POSIXLY_CORRECT

この変数に、何かを設定してやればPOSIXに準拠するようです。やってみましょう。

$ /bin/pwd
/tmp/dir
$ POSIXLY_CORRECT=1 /bin/pwd
/tmp/sym-dir
$ /bin/pwd -L
/tmp/sym-dir

-L と同じ挙動になりましたね!いかがでしたか?こんな事実を知らなくても生きていけますね!
参考にならなかったら右上のいいねボタンを押してください!!

宣伝タイム

  • そんなコマンドの細かいオプションを解説した「解説CoreUtils第7版」はPDF版でも販売中:解説CoreUtils第7版 - gumroad
    • この本を出したあとに指摘を受けて本記事を書きました。上記の本には載ってませんがいつかこの事件が収録されます
  • 物理媒体(本)は通販で販売中:COMIC ZIN 通信販売/商品詳細 解説CoreUtils第7版
  • 買ってくれると筆者のご飯になります(割とマジで)

参考

  • このエントリーをはてなブックマークに追加
  • Qiitaで続きを読む