20190915のLinuxに関する記事は8件です。

yumコマンドでrpmパッケージのみダウンロードする

インストールはせずに、パッケージだけ欲しいんだ!

コマンド

yumdownloader --enablerepo=remi-php72 php72 php-mbstring php-ldap php-cli php-common --destdir=./php --resolve

実行結果

# ls ./php
environment-modules-3.2.10-10.el7.x86_64.rpm  libxcb-1.13-1.el7.x86_64.rpm                   php72-php-json-7.2.22-1.el7.remi.x86_64.rpm  php-ldap-7.2.22-1.el7.remi.x86_64.rpm
libargon2-20161029-3.el7.x86_64.rpm           oniguruma5-6.9.3-1.el7.remi.x86_64.rpm         php72-runtime-2.0-1.el7.remi.x86_64.rpm      php-mbstring-7.2.22-1.el7.remi.x86_64.rpm
libX11-1.6.7-2.el7.x86_64.rpm                 php72-2.0-1.el7.remi.x86_64.rpm                php-cli-7.2.22-1.el7.remi.x86_64.rpm         scl-utils-20130529-19.el7.x86_64.rpm
libX11-common-1.6.7-2.el7.noarch.rpm          php72-php-cli-7.2.22-1.el7.remi.x86_64.rpm     php-common-7.2.22-1.el7.remi.x86_64.rpm      tcl-8.5.13-8.el7.x86_64.rpm
libXau-1.0.8-2.1.el7.x86_64.rpm               php72-php-common-7.2.22-1.el7.remi.x86_64.rpm  php-json-7.2.22-1.el7.remi.x86_64.rpm

オプション

  • --destdir ダウンロード先を指定
  • --resolve 依存関係のあるパッケージも合わせてダウンロード
  • このエントリーをはてなブックマークに追加
  • Qiitaで続きを読む

fsckで"open: No such file or directory"と言われた時の対処

使用環境

項目名 環 境
OS MX Linux 18.3

この記事の対象者

  • Debian系OSのブート時に"open: No such file or directory"と言われた人
  • fsck とか fstab が何なのか初耳な人

ざっくり結論

  • ブート時に走るfsck(ファイルシステムのチェック)のエラー。
  • fsck は fstab の記述に従ってチェックする。
  • fstab に存在しないデバイスが記述されていた場合、上記エラーで怒られる。
  • fstab から存在しないデバイスの記述を削除すればエラーは消える。

以下、エラーの発生と解決の経緯について。

起動時にエラーが出て止まってしまった

以下がエラーの一部

[....] Checking file systems...fsck from util-linux 2.29.2
open: No such file or directory
fsck.fat 4.1 (2017-01-24)
fsck exited with status code 6

初見のエラーで、しかも特にディスク関係の事はやってないので割と焦りました。

fstabが原因だった

色々調べていくと、fstab なるファイルの記述が原因かもしれないとのこと。
早速見てみると、不穏な表記を見つけました。

cat /etc/fstab

# /etc/fstab: static file system information.
#
# <file system> <mount point>   <type>  <options>       <dump>  <pass>

#Entry for /dev/sda1 :
UUID=4DB7-6115  /media/user/HD-500G_BAK vfat    defaults,nosuid,nodev,relatime,uid=1000,gid=1000,fmask=0022,dmask=0022,codepage=437,iocharset=ascii,shortname=mixed,showexec,utf8,flush,errors=remount-ro   0   2

なぜか外付けHDDがファイルシステム扱いされてますね。
該当の行をコメントアウトしたらエラーは出なくなりました。

なぜこんな事になったのか?

そういえば、外付けHDDを NTFS にフォーマットしたくて色々やってました。
その時に、誤ってシステムファイルとして登録されてしまったようです。
OS再インストールとかにならなくて良かった。

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

ubuntuで「デスクトップ」を「desktop」にしたらデスクトップにフォルダがいっぱい出てきた....

バーチャルボックスにてubuntuを起動させましてさあやるぞ!と思った矢先の出来事です。
同じようなことが起きてる人がいたので解決にそこまで時間がかかりませんでした。

参考にした記事

Ubuntuでデスクトップにhomeのファイルが表示されてしまうときの対処法。

環境

ubuntu18.04

やったこと

デフォルトで「デスクトップ」という日本語のフォルダ名だったので、この方法は恐らくいいやり方ではないかもしれないが

 $mv デスクトップ desktop

でフォルダ名を変更し、再起動したところ

上の画像のような状況になり、ホームディレクトリ直下のディレクトリたちが出てきている状況でした

改善方法

参考にした記事通り、

$cd .config
~/.config$vim user-dirs.dirs

user-dirs.dirsファイルをvimエディタで開き、

XDG_DESKTOP_DIR="&HOME/desktop"

に変更し、再起動したら元に戻りました。

このファイルの詳細がわかる方が居たらぜひ教えてほしいです。

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

rpmパッケージ強制削除

eraseなのでちょっと忘れちゃう

rpm -e --nodeps epel-release-7-11.noarch 
  • このエントリーをはてなブックマークに追加
  • Qiitaで続きを読む

Linux Permissions SUID, SGID and Sticky Bit Concept Explained with Examples

Linux Permissions SUID, SGID and Sticky Bit Concept Explained with Examples:
SUID (Super User ID)
SUID Stands for Super User ID. We know that root is the Super User in Linux and have all the rights to do administrative tasks but have you noticed that normal user also can do some administrative tasks such as reset the Password and as we know that by resetting the password two files getting updated i.e. /etc/passwd and /etc/shadow which is only can be done by root user. Let’s take another example i.e. Normal user can use the ping command to check network connectivity. Now let’s Understand what is the use of SUID. First of all, SUID should be applied to a binary file or to a script and we can apply SUID from root user only using the chmod command. We are applying SUID to any binary file or script means we are allowing that binary file to execute in any logged in user as an owner of that file. Means if i run the ping command by logging in with a normal user i.e. user1 still it will run as the root user only. Let’s take an example to understand the concept properly. SUID alphabetically identified by letter “s” and Numerically Identified by “4“.

Logging as a normal user i.e. user1 and try to use the ping command to check the connectivity.

[user1@localhost ~]$ whoami # To check currently Logged in User
user1
[user1@localhost ~]$ ping -c 3 localhost
PING localhost (127.0.0.1) 56(84) bytes of data.
64 bytes from localhost (127.0.0.1): icmp_seq=1 ttl=64 time=0.027 ms
64 bytes from localhost (127.0.0.1): icmp_seq=2 ttl=64 time=0.042 ms
64 bytes from localhost (127.0.0.1): icmp_seq=3 ttl=64 time=0.042 ms

--- localhost ping statistics ---
3 packets transmitted, 3 received, 0% packet loss, time 2000ms
rtt min/avg/max/mdev = 0.027/0.037/0.042/0.007 ms

Read More - https://www.itsmarttricks.com/linux-permissions-suid-sgid-and-sticky-bit-concept-explained-with-examples/

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

来たるnftablesの概要などなど

nft(8)

nft - Administration tool of the nftables framework for packet filtering and classification  

背景

自宅でnftablesを使ってみようと思うきっかけがあったので記事にしてみました。

nftables概要

Linux Kernel 3.13から、パケットフィルタリングなどを管理するツールで「iptables」に代わって、nftablesを採用するLinuxディストリビューションが増えてきています(*)。
nftablesを使ったパケットフィルタリングの設定、コマンド操作の違いについて簡単に解説します。

[※] ちなみにRHEL8より、新たなパケットフィルタリングツールとして nftables が導入されました。
[※] Debian 10 コードネーム「Buster」)からnftablesも導入されています。

メリット

  • フィルターの処理が、線形処理からテーブル探索に変更
  • ネットワーク層以外のプロトコルも管理可能
  • 文法の取得しやすさ、学習コストの低減

こんな感じでしょうか。3点目に関しては個人的にはとても大きいなと感じました。

テーブル

nftables には初めから組み込まれているテーブルはありません。テーブルの数や名前はユーザーが自由に決めることができます。

nftables ファミリー iptables ユーティリティ
ip iptables
ip6 ip6tables
inet iptables と ip6tables
arp arptables
bridge ebtables

コマンド

テーブル関連

# Usage
$ nft [ -nNscae ] [ -I directory ] [ -f filename | -i | cmd ...] nft -h nft -v  

# テーブル作成
$ nft add table family table

# 全てのテールブを表示
$ nft list tables

# テーブル内のチェインとルールを表示
$ nft list table family table
$ nft list table inet filter

# テーブル削除
$ nft delete table family table

# テーブルクリア
$ nft flush table family table

チェイン関連

# Usage
$ nft [ -nNscae ] [ -I directory ] [ -f filename | -i | cmd ...] nft -h nft -v

# baseチェイン追加
$ nft add chain family table chain { type type hook hook priority priority \; }

# ルールの表示
$ nft list chain family table chain

# チェインの編集
$ nft chain <table> <family> <chain> { [ type <type> hook <hook> device <device> priority <priority> \; policy <policy> \; ] }

# チェインの削除
$ nft delete chain family table chain

# チェインのルール削除
$ nft flush chain family table chain

移行

iptablesからのnftablesへの以降作業についてはすでに色々な方が便利に安全にやる方法をあげているようです。
実際の作業が発生した場合はこういった情報を活かせればいいなって感じでしょうか。
(ちなみに私は全て手で変えてました。。。)

参考記事

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

【Azure】Red Hat でマルチNIC構成した場合の静的ルートの設定方法

はじめに

本ページは、Azure上のRed Hat OSに対して、マルチNICを構成した場合の静的ルートの設定方法を記述したものである。

投稿した理由、Microsoft Azureの公式ドキュメント「複数のネットワーク インターフェイス カードを使用して Linux 仮想マシンを Azure に作成する方法の複数の NIC 用にゲスト OS を構成する」では、下記の記載がある通り、詳細な手順が記載されておりません。

引用
「オペレーティング システムに永続的なルートを追加する方法は、
ディストリビューションによって異なります。
 手順については、ディストリビューションのドキュメントを参照してください。」

Red Hat OSの手順を記載しますが、初めて操作する方にイメージがつけばいいなと考えております!

では、Let's Study!

設定手順

流れとして。
Azure ポータル上から追加しただけでは、NICが有効化されていないため、
OS上で「1.追加したNICを接続する手順」を実施する。
その後「2.永続的な静的ルートの設定手順」を実施する。

1.追加したNICを接続する手順

1-1.eth1が「切断済み」であることを確認する。

# nmcli d
DEVICE      TYPE      STATE     CONNECTION
eth0        ethernet  接続済み  System eth0
virbr0      bridge    接続済み  virbr0
eth1        ethernet  切断済み  --
lo          loopback  管理無し  --
virbr0-nic  tun       管理無し  --

1-2.Network Manager画面を表示し、eth1を接続する。

# nmtui
Network Manager画面上の設定

[接続の編集]-<追加>-<Ethernet>-<作成>を選択する。
Ethernet 接続 1 の設定画面が表示されるため、
デバイスに eth1 と入力する。
また、IPv6設定を「無視する。」を選択し、<OK>を選択する。
<戻る>-<OK>を選択する。

1-3.eth1が「接続済み」であることを確認する。

# nmcli d
DEVICE      TYPE      STATE     CONNECTION
eth0        ethernet  接続済み  System eth0
eth1        ethernet  接続済み  Ethernet 接続 1
virbr0      bridge    接続済み  virbr0
lo          loopback  管理無し  --
virbr0-nic  tun       管理無し  --

2.永続的な静的ルートの設定手順

2-1.現状のルートを確認する。

# route -n

2-2.インターフェース設定ファイルのディレクトリに移動する。

# cd /etc/sysconfig/network-scripts/

2-3.インターフェース設定ファイルの確認

※規定値で1.2を設定した場合、以下のファイルが作成される。

# ls
ifcfg-Ethernet_接続_1

2-4.ifcfg-と同一のファイル名でroute-ファイルを作成し、静的ルートを設定する。

# vi route-Ethernet_接続_1
宛先アドレス/<プレフィックス> via <GWアドレス>
(例)10.0.0.0/24 via 10.1.0.1

※GWのアドレスは、Azureではサブネットに対して定義されているアドレス範囲内の最初の IP アドレスとなる。

@angel_p_57様からコメントいただきました。
今回私が使った従来の方法ではなく、RHEL7の推奨設定方法( 4.2. NMCLI を使った静的ルートの設定 )でお試しください!
また機会があるときに、設定方法確認して更新します!
コメントありがとうございました!

2-5.設定確認

# cat route-Ethernet_接続_1
10.0.0.0/24 via 10.1.0.1

2-6.サービス再起動

# systemctl restart network

以降、設定したルートが反映されてeth1で接続ができるようになる!
(補足:プライマリはeth0 セカンダリーはeth1で固定である。)

参考文献

・複数の NIC 用にゲスト OS を構成する(Windows版)
・9.4.静的ルートおよびデフォルトゲートウェイ

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

Linuxのkillコマンドについてまとめた

プロセスを強制終了させる際に、 kill <PID> を使用したことはあると思います。
また、以前systemdについてまとめましたが、Unitファイル内でも kill コマンドの扱いを定義していました。

今回はこの kill コマンドについて、詳しく調べてみました。

killコマンドについて

説明

kill コマンドは、指定したシグナルを指定したプロセスまたはプロセスグループへ送る。 シグナルが指定されない場合、TERMシグナルを送る。 TERMシグナルは、このシグナルをキャッチしないプロセスを終了させる。 このシグナルをキャッチしてしまうプロセスを終了させるためには、 KILL (9) シグナルを使う必要がある。
最近のシェルのほとんどには、組み込みのkill機能があり、 ここで説明しているコマンドと同じような使い方をする。 -a' オプションと-p' オプション、 そしてコマンド名で PID を指定する方法はローカルな拡張である。

出典

つまり、kill コマンドはプロセスの強制終了のためではなく、プロセスへ何らかのシグナルを送るために用意されています。
そして、シグナルに TERM が使用された場合に、プロセスを強制終了させるます。

それでは、シグナルとはどういったもので、どのような種類があるのでしょうか。

シグナル

シグナルとは

「シグナル」はプロセスとプロセスの間で通信を行う際に使用される“信号”のことで、シグナルを受け取ったプロセスは“何らかの動作”を行います。その動作は、例えば「再起動」であったり、「終了」であったりします。

出典

コンソールでkill <PID>Ctrl+cCtrl+zと入力するとプロセスが終了しますが、これらもプロセスへ終了シグナルを送っていることになります。

シグナルの種類

シグナルの種類を一部、下記の通り紹介します。

先述の例で、Ctrl+c を上げましたが、これは下記のSIGINT を該当のプロセスへ送信していることになります。

シグナルの種類 シグナル番号 デフォルト動作 備考
SIGINT 2 終了 キーボードからの割り込み (Interrupt)
SIGTSTP 20 停止 端末より入力された一時停止 (stop)
SIGKILL 9 終了 Kill シグナル
SIGTERM 15 終了 終了 (termination) シグナル
SIGHUP 1 終了 制御端末(controlling terminal)のハングアップ検出、または制御しているプロセスの死
SIGQUIT 3 終了 キーボードによる中止 (Quit)、プロセスの終了とコアダンプ出力

出典

シグナル動作の種類

シグナルが送信されると、プロセスの通常処理に割り込んでシグナルが動作します。
シグナルの種類によりデフォルト動作は定義されており、以下の動作をそれぞれ実行します。

  1. プロセスを終了する
  2. コアを出力し、プロセスを終了する
  3. シグナルを無視する
  4. 処理を一時停止する
  5. 処理を再開する

出典

シグナル挙動の上書き

デフォルト動作は上記のように定義されていますが、シグナルを受け取った際に別の処理を実行させることもできます。
この別の処理は、プログラム側で実装します。

nginxの公式サイトにも、それぞれのシグナルを受け取った際にメインプロセスがどのような振る舞いをするかが記されています。

kill コマンドの使い方

書式

$ kill [-s signal | -p] [-a] [ --] pid ...
$ kill -l [signal]  

killのあとに、シグナル名もしくはシグナル番号を指定してPIDに対してコマンドを実行します。

まとめ

  • kill コマンドは、プロセスに対してシグナルを送信する。
  • シグナルには種類があり、それぞれ動作が異なる。
  • 各シグナルにはデフォルト動作があるか、その動作をプログラム側で書き換えることも可能。

補足

Unitファイル内で KillMode オプションを指定できます。
各値の動作は以下のようになっています。

systemdは起動したサービスに関連する全てのプロセスをCgroupの個別のグループに入れて管理している

ExecStopコマンドで停止した時、グループ内にプロセスが残っている場合、KillModeの設定に応じて残プロセス処理を行う

  • KillMode=none 残プロセスは放置
  • KillMode=process メインプロセスが残っている場合、SIGTERM/SIGKILLで停止する。その他の残プロセスは放置
  • KillMode=control-group グループ内の全ての残プロセスを SIGTERM/SIGKILL で停止する
  • KillMode=mixed メインプロセスを SIGTERM/SIGKILL で停止し、続けてグループ内の全ての残プロセスを SIGKILL で停止する。

出典

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