20190927のLinuxに関する記事は6件です。

Linux基礎(ファイルシステムのマウントとアンマウント)

ファイルシステムのマウント

パーティションにファイルシステムを作成した後、マウントを行う必要がる。このマウントとは、パーティションとあるディレクトリを関連づけること。マウントしたファイルシステムが結合されるディレクトリがマウントポイントと呼ばれる。このマウントにより、そのパーティションにファイルやディレクトリを作成したり、利用することができるようになる。

  • ファイルシステムのマウント

スクリーンショット 2019-09-27 21.16.49.png

恒常的なマウントを行うためには、以下の2つの作業を行う必要がある。

  1. /etc/fstabファイルの編集
  2. mountコマンドの実行、または再起動(init6)の実行

※/etc/fstabファイルの編集を行わずにmountコマンドだけを実行した場合、再起動後に無効になる。

/etc/fstabファイル

/etc/fstabファイルの書式は以下の通り。以下の書式例では、①はUUIDとして表示されているが、新たに追加する設定は、以下の書式の記述によりマウントすることは可能。

  • /etc/fstabファイルの書式

スクリーンショット 2019-09-27 21.41.17.png

項番 フィールド 設定内容
マウントするデバイスファイル名 マウントするデバイスファイル名またはボリュームラベルを指定
マウントポイント マウントポイントとなるディレクトリの絶対パスを指定
ファイルシステムの種類 ①のファイルシステムの指定。下表1を参照
マウントオプション ①のマウントオプション指定。※下表2を参照
dump dumpコマンドによるバックアップ対象となるかどうかを指定
0:バックアップする必要がない
1:バックアップする必要がある
fsck システム起動時にfsckコマンドでチェックを行う時の順序を指定
0:fsckコマンドでファイルシステムをチェックしない
1:ルートファイルシステム(/)に指定する数値
2以上:その他のファイルシステムに指定する数値
  • 表1- ファイルシステムの種類
ファイルシステム 説明
ext2 Linuxの標準ファイルシステム
ext3 ext2の機能拡張版(現在の主流)
ext4 ext2の機能拡張版(現在の主流)
reiserfs 高速なジャーナリングファイルシステム
xfs SGI開発によるジャーナリングファイルシステム
jfs IBM開発によるジャーナリングファイルシステム
iso9660 CD-ROMのファイルシステム
msdos MS-DOSのファイルシステム
  • 表2- マウントオプションの種類
オプション 説明
async ファイルシステムの入出力を非同期で実行
auto mount -a コマンドの実行時にマウントする
noauto mount -a コマンドの実行にマウントしない
defaults デフォルトのオプションを設定(async, auto, dev, exec, nouser, rw, suid)
exec バイナリの実行を許可
noexec バイナリの実行を禁止
ro 読み取り専用モードでマウント
rw 読み書き可能モードでマウント
unhide 隠しファイルも表示
suid SUIDとSGIDの有効化
user 一般ユーザーにマウントを許可する
users 一般ユーザーにマウントを許可し、マウントを実行していないユーザーにアンマウントを許可
nouser 一般ユーザーのマウントを許可しない

mountコマンド

/etc/fstabファイルの変更を行った後、mountコマンドを実行するか再起動(init 6)する必要がある。

mount [オプション] デバイス名

オプション 説明
-a /etc/fstabファイルに記述されているファイルシステムを全てマウント(noautoは除く)
-o マウントオプションの指定
-t ファイルシステム ファイルシステムの種類を指定
# /dev/sda6のファイルシステムを、/home3ディレクトリにマウント
$ mount /dev/sda6 /home3

現在マウントされているファイルシステムをアンマウントするためには、unmountコマンドを使用する。

unmount [オプション] デバイス名/マウントポイント

オプション 説明
-a /etc/mtabファイルに記述されているファイルシステムを全てアンマウント
-t 引数に指定したファイルシステム形式のファイルシステムのみをアンマウント
# /dev/sda6がマウントされている/home3ディレクトリをアンマウント
$ unmount /dev/sda6 /home3

※/etc/mtabファイルはmountコマンドやunmountコマンドがしようしているファイルであり、ユーザーが手動変更できないファイル。

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

ncコマンドでサービスの接続疎通確認

はじめに

サービスの接続疎通確認はインフラ構築に必須なの作業内容です。
以前はping、telnetなどコマンドを利用しますが、セキュリティ制限など使えない場合があります。
ncコマンドを使うと便利です。
また、サーバのポート状況確認にはssコマンドも便利です。

http,httpsの確認はcurl、wgetなどのコマンドでHTMLを見えますので、良いと思います。
その以外はncコマンドで良いと思います。

ncとは

ncはNetcatです。
Netcatは、Unix系OSコマンドラインアプリケーションの一つ。TCPやUDPのパケットを読み書きするバックエンドとして機能するツールです。

インストール

Ubuntuなどは標準入っていますが、もし入っていない場合はインストール:
Ubuntuの例:
apt -y install netcat

使い方

root@ubuntu:~# nc -help
OpenBSD netcat (Debian patchlevel 1.187-1ubuntu0.1)
usage: nc [-46CDdFhklNnrStUuvZz] [-I length] [-i interval] [-M ttl]
          [-m minttl] [-O length] [-P proxy_username] [-p source_port]
          [-q seconds] [-s source] [-T keyword] [-V rtable] [-W recvlimit] [-w timeout]
          [-X proxy_protocol] [-x proxy_address[:port]]           [destination] [port]
        Command Summary:
                -4              Use IPv4
                -6              Use IPv6
                -b              Allow broadcast
                -C              Send CRLF as line-ending
                -D              Enable the debug socket option
                -d              Detach from stdin
                -F              Pass socket fd
                -h              This help text
                -I length       TCP receive buffer length
                -i interval     Delay interval for lines sent, ports scanned
                -k              Keep inbound sockets open for multiple connects
                -l              Listen mode, for inbound connects
                -M ttl          Outgoing TTL / Hop Limit
                -m minttl       Minimum incoming TTL / Hop Limit
                -N              Shutdown the network socket after EOF on stdin
                -n              Suppress name/port resolutions
                -O length       TCP send buffer length
                -P proxyuser    Username for proxy authentication
                -p port         Specify local port for remote connects
                -q secs         quit after EOF on stdin and delay of secs
                -r              Randomize remote ports
                -S              Enable the TCP MD5 signature option
                -s source       Local source address
                -T keyword      TOS value
                -t              Answer TELNET negotiation
                -U              Use UNIX domain socket
                -u              UDP mode
                -V rtable       Specify alternate routing table
                -v              Verbose
                -W recvlimit    Terminate after receiving a number of packets
                -w timeout      Timeout for connects and final net reads
                -X proto        Proxy protocol: "4", "5" (SOCKS) or "connect"
                -x addr[:port]  Specify proxy address and port
                -Z              DCCP mode
                -z              Zero-I/O mode [used for scanning]
        Port numbers can be individual or ranges: lo-hi [inclusive]

MongoDBの27017ポートを接続できるかのコマンド

失敗例

root@ubuntu:~# nc -v -w 1 172.18.98.153 27017
nc: connect to 172.18.98.153 port 27017 (tcp) failed: Connection refused

成功例

root@ubuntu:~# nc -v -w 1 172.18.98.153 27017
Connection to 172.18.98.153 9000 port [tcp/*] succeeded!

ファイルの送信、受信

サーバに監視

nc -l 1234 > filename.out

クライアントから送付

echo test > test.txt

nc -N 172.18.98.1531234 < test.txt

サーバ側のfilename.outを見ると、testというデータが受信できました。

サーバにポートの確認

ssコマンド

ss -antu
image.png

これでサーバのポート状況を確認できます。ssコマンドは使いやすいですね。

root@ubuntu:~# ss -help
Usage: ss [ OPTIONS ]
       ss [ OPTIONS ] [ FILTER ]
   -h, --help          this message
   -V, --version       output version information
   -n, --numeric       don't resolve service names
   -r, --resolve       resolve host names
   -a, --all           display all sockets
   -l, --listening     display listening sockets
   -o, --options       show timer information
   -e, --extended      show detailed socket information
   -m, --memory        show socket memory usage
   -p, --processes     show process using socket
   -i, --info          show internal TCP information
   -s, --summary       show socket usage summary
   -b, --bpf           show bpf filter socket information
   -E, --events        continually display sockets as they are destroyed
   -Z, --context       display process SELinux security contexts
   -z, --contexts      display process and socket SELinux security contexts
   -N, --net           switch to the specified network namespace name

   -4, --ipv4          display only IP version 4 sockets
   -6, --ipv6          display only IP version 6 sockets
   -0, --packet        display PACKET sockets
   -t, --tcp           display only TCP sockets
   -S, --sctp          display only SCTP sockets
   -u, --udp           display only UDP sockets
   -d, --dccp          display only DCCP sockets
   -w, --raw           display only RAW sockets
   -x, --unix          display only Unix domain sockets
       --vsock         display only vsock sockets
   -f, --family=FAMILY display sockets of type FAMILY
       FAMILY := {inet|inet6|link|unix|netlink|vsock|help}

   -K, --kill          forcibly close sockets, display what was closed
   -H, --no-header     Suppress header line

   -A, --query=QUERY, --socket=QUERY
       QUERY := {all|inet|tcp|udp|raw|unix|unix_dgram|unix_stream|unix_seqpacket|packet|netlink|vsock_stream|vsock_dgram}[,QUERY]

   -D, --diag=FILE     Dump raw information about TCP sockets to FILE
   -F, --filter=FILE   read filter information from FILE
       FILTER := [ state STATE-FILTER ] [ EXPRESSION ]
       STATE-FILTER := {all|connected|synchronized|bucket|big|TCP-STATES}
         TCP-STATES := {established|syn-sent|syn-recv|fin-wait-{1,2}|time-wait|closed|close-wait|last-ack|listening|closing}
          connected := {established|syn-sent|syn-recv|fin-wait-{1,2}|time-wait|close-wait|last-ack|closing}
       synchronized := {established|syn-recv|fin-wait-{1,2}|time-wait|close-wait|last-ack|closing}
             bucket := {syn-recv|time-wait}
                big := {established|syn-sent|fin-wait-{1,2}|closed|close-wait|last-ack|listening|closing}

netstatコマンド(歴史長い)

netstat -antu

-a:現在のすべての接続を表示する
-n:一切の名前解決を行わない
-t:TCPポートを表示する
-u:UDPポートを表示する

参考URL:http://manpages.ubuntu.com/manpages/bionic/man1/nc_openbsd.1.html

以上

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

Linux上で文字バケして指定できないディレクトリを消したい

文字バケして削除できないディレクトリが・・・!

[root@Dev01 xxxx]# ls -la
合計 0
drwxr-xr-x 2 nobody nobody 32  9月 26 23:32 ??
drwxr-xr-x 3 nobody nobody 17  9月 27 15:41 .
drwxr-xr-x 3 nobody nobody 20  9月 27 15:41 ..

[root@mobileDev01 mission]# rm -r ??
rm: cannot lstat `??': そのようなファイルやディレクトリはありません

ノード番号を調べる

[root@mobileDev01 mission]# ls -i
978522588 ??

ノード番号を使ってファイルを削除する

find . -inum 978522588  -exec rm -rf {} \;

参考
https://sakura86.com/linux-mojibake-del/

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

Linuxでプロンプトの色を変更する方法(個人メモ)

プロンプトの色を変更する

  • いろんな環境のターミナルを開いてる場合(それが良くないっていう指摘もありそうだけど),違う環境を操作しないようにターミナルに色を付けたい.
  • 以下を ~/.bashrc に記載する(CentOSの場合で,他のOSは不明).
PS1_COLOR_BEGIN="\[\e[1;36m\]"
PS1_COLOR_END="\[\e[m\]"
export PS1="${PS1_COLOR_BEGIN}[\u@\h \W]\\$ ${PS1_COLOR_END}"
  • 簡単に言うと,ここから xxx色です,という指定を入れる,という記述.実際にコマンドを入力する際は白にしたかったので,ENDを入れている.
  • どういう指定が可能かは未確認.
  • このエントリーをはてなブックマークに追加
  • Qiitaで続きを読む

--(double dash)

Linuxのコンソールコマンドで、--以降はオプションと見做すなという指示を送る仕組み。

例えば、-fileという名前のファイルを削除したい時

// -fileがオプションとみなされてエラーとなる。
$ rm -file
rm: 無効なオプション -- 'l'

// --により-fileを文字列とみなせるようになる。
$ rm -- -file

grepで-vというキーワードを検索したい時

$ cat file
string
-v

$ grep string file
string

// -vはnot検索を行うためのgrepのオプション
$ grep -v string file
-v

$ grep -v file
(-vという文字列を検索できない)

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

NanoPi Fire3 のkernelをBuildする

はじめに

一般にLinux Kernel Buildは一仕事です。
訳あってNanoPi Fire3-LTSの独自カーネルを作りましたので、ここにまとめます。

摘要

通常,Linux Kernel Build是一项工作。
我翻译了NanoPi Fire3-LTS的原始内核,所以这里是一个总结。

資料を読む

まずこれをしっかり読んでください。

Kernel Sourceを入手する

資料を読んだ方は分かってますね。
kernel.org の生のSource ではダメです

git clone https://github.com/friendlyarm/linux.git -b nanopi2-v4.4.y --depth 1

gitでfriendlyarmの特製パッチが当たったものを入手してください。

時計を合わせる

makeを使う前には時計を合わせましょう。

ntpdate ntp.jst.mfeed.ad.jp

Build環境を整える

ここでは調達したNanoPi Fire3しかLinuxを持っていないという前提で行きます。もちろんx86_64のLinuxを持っていればクロスコンパイル環境を作りそちらでBuildすることは可能です、というかソースコードはそういう前提で作られています。

cd /usr/bin
ln -s gcc aarch64-linux-gcc
ln -s ld aarch64-linux-ld
ln -s nm aarch64-linux-nm
ln -s ar aarch64-linux-ar
ln -s objcopy aarc64-linux-objcopy

お分かりでしょう。
クロスコンパイラーの代わりにレジデントコンパイラーを充ててしまいます。

.config を作る

普通動いているkernelの/bootにbuildしたときのconfigが残してありこれを改造して独自カーネルを作りますが、fire3にはありませんし、kernel自身からconfigを取り出せるようにもなっていません。素から作っては見たものの案の定走りません。.configは自動生成されるのです。

touch .scmversion
make nanopi3_linux_defconfig

Kernel Huck する

作業に自信がある方はこの工程でconfigをいじり、ドライバーを整理します。
慎重な方はここはいじらず最後まで推奨カーネルが動くことを検査してから、2度目に行うが良いでしょう。

apt install ncurses-dev
make manuconfig

たくさんの項目があります。
肝心なものを削ると、立ち上がらなくなります。

build

make -k -j4

数時間かかります。-j8を指定したいところですが、memory不足でかえって遅くなるようです。
寝る前に仕掛けてさっさと寝ましょう。
起きたらエラーが出てました。
こういう時にmake -k を指定するとエラーが影響しないところは先に進めてくれます。
/usr/src/linux/arch/arm64/include/asm/vdso.h
です。
42行目に
#define vdso_offset_sigtamp 0x06c0
を書き加えたらおとなしくなりました。
まあ、この程度は気のせいでしょう (^^;

backupする

ここでおもむろにSDをバックアップします。
SDをreaderに挿します。

ddrescue -f /dev/mmcblk0 /dev/sda

backupのSDを抜き、安全なところに保管してから、

mount /dev/mmcblk0p1 /boot
make install
reboot

どうでしょう?上がりますか?

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