20200222のLinuxに関する記事は2件です。

Linux勉強会 第3回:ファイルの削除禁止設定と検索機能

第1回 Linux勉強会 第1回:仮想コンソールとファイル操作
第2回 Linux勉強会 第2回:ファイル操作

第1回第2回に引き続き今回は第3回目の記事になります。
2月14日、株式会社Ancarで社内勉強会を行いました。勉強会トピックのおさらいです

当記事は「Linuxの基礎」になりますので、そのことをご承知おき下さい。
補足情報等ございましたら、コメント残していただけると幸いです:bow:

各コマンドの実行はmacOSの標準ターミナルを使用しています

おしながき

  1. ファイルの削除禁止設定
  2. ファイルを探す
  3. その他の検索機能

ファイルの削除禁止設定

あるファイルを削除できなくするには、そのファイルの属するディレクトリを書き込み禁止にする必要があります

書き込み可能ディレクトリ (mydir) 内の書き込み禁止ファイル (wrt_no)
書き込み禁止ディレクトリ (bandir) 内の書き込み可能ファイル (wrt_ok)

では、実際に書き込み禁止にして、lsコマンドで権限を確認してみましょう

# wrt_noを書き込み禁止にします
$ chmod -w mydir/wrt_no

# bandirディルクトリを書き込み禁止にする
$ chmod -w bandir

# bandir ディレクトリが書き込み禁止になっている
$ ls -ld *dir
drwxrwxr-x 2 keita ancar 20  2月 14 17:39 mydir
dr-xr-xr-x 2 keita ancar 20  2月 14 17:39 bandir

これで書き込み禁止になっているのを確認できましたね

# wrt_no ファイルは書き込み禁止になっている
$ ls -l mydir/w* bandir/w*
-r--r--r-- 1 keita ancar 7  2月 14 17:39 mydir/wrt_no
-rw-rw-r-- 1 keita ancar 7  2月 14 17:39 bandir/wrt_ok

実際に削除できなくなっているか確認してみましょう。
bandir/wrt_okは削除できなくなっていて、mydir/wrt_noは確認つきで削除できてますね
なるほど。。。
ファイルが削除できない時は、そのファイルの属するディレクトリの権限確認もする必要がありますね

$ ls -ld *dir
dr-xr-xr-x 2 keita ancar 20  2月 14 17:42 bandir
drwxr-xr-x 2 keita ancar 20  2月 14 17:43 mydir

$ rm bandir/wrt_ok
rm: `bandir/wrt_ok' を削除できません: Permission denied

$ rm mydir/wrt_no
rm: 書き込み保護されたファイル 通常の空ファイル `mydir/wrt_no' を削除しますか?y

ファイルを探す

findコマンドについて勉強しました。
②のようにディレクトリを正しく指定してあげないと結果が表示されないことが分かりました。これは気をつけたいですね。
下記の例だと/bin/を基点にchmodの名前検索 -name し、それを画面表示 -print しているそうです。

$ find /bin -name chmod  -print  ----①
$ find /bin/ -name chmod -print  ----②
/bin/chmod

$ find dr1 -name myfile
dr1/dr1b/myfile
dr1/dr1a/myfile
dr1/myfile

次はワイルドカード指定での検索です。
ワイルドカードを指定するときは ""で囲むのを忘れないようにしましょう!
ダブルクォーテーションで囲わないとシェル展開され、正しい出力が得られません。

$ find /bin/ -name "ch*"
/bin/chacl
/bin/chgrp
/bin/chcon
/bin/chmod
/bin/chown
/bin/chrt
/bin/chardetect
/bin/chmem
/bin/chattr
/bin/chage
/bin/chvt
/bin/chronyc

次はファイルデータを更新した日付で検索する場合です。
日付は数字で指定します。
+ を付けると「それより過去の日」
- を付けると「それより現在に近い日」となるそうです。便利ですね〜
下記の例だと、4日以内に作成・更新したファイルでの検索になります(3日前、2日前、1日前、本日、の計4日)

$ find ~/ -mtime -4
/root/.bash_logout
/root/.bash_profile
/root/.bashrc
/root/.cshrc
/root/.tcshrc
/root/.ssh
/root/.ssh/authorized_keys
/root/aa1.txt
/root/aa2.txt
/root/aa4.txt
/root/hoge.txt
/root/hogehoge.php
/root/hoge.rb
/root/rfile2

下記は4日前に作成・更新したファイルの検索になります

$ find ~/ -mtime 4
/root/
/root/rfile3

その他の検索機能

locate 文字列
指定した文字列をふくむファイルを表示する検索コマンドです
locate コマンドはファイル名表示だけになっています。

$ locate mkdir
/usr/bin/mkdir
/usr/lib/python2.7/site-packages/lockfile/mkdirlockfile.py
/usr/lib/python2.7/site-packages/lockfile/mkdirlockfile.pyc
/usr/lib/python2.7/site-packages/lockfile/mkdirlockfile.pyo
/usr/share/man/man1/mkdir.1.gz
/usr/share/man/man1p/mkdir.1p.gz
/usr/share/man/man2/mkdir.2.gz
/usr/share/man/man2/mkdirat.2.gz
/usr/share/man/man3p/mkdir.3p.gz
/usr/share/man/overrides/cs/man1/mkdir.1
/usr/share/man/overrides/es/man1/mkdir.1
/usr/share/man/overrides/fr/man1/mkdir.1
/usr/share/man/overrides/pl/man1/mkdir.1
/usr/share/man/overrides/zh_CN/man1/mkdir.1

今回は以上となります!

まとめ

基礎的な内容ですが、普段使用していないコマンドの使い方を学ぶことができました。
機会があれば、どんどん使っていきたいですね。

加筆修正、大歓迎ですのでぜひコメントにお願いします!

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

docker入門 ubuntuの中にubuntu環境を作る

目的

dockerの使い方としてはメジャーではないかもしれないが,ubuntuのdockerコンテナを作成してそこに入って色々と開発をやりたい.

dockerを触るのは初めてで,いろんな資料を見たけど似たような事例が少なかったので備忘録として.

流れ

  • dockerのインストール
  • Dockerfileの作成
  • dockerイメージの作成
  • dockerコンテナの起動
  • dockerコンテナへ接続

dockerのインストール

公式サイトに従う

$ sudo apt-get remove docker docker-engine docker.io containerd runc

$ sudo apt-get update

$ sudo apt-get install \
    apt-transport-https \
    ca-certificates \
    curl \
    gnupg-agent \
    software-properties-common

$ curl -fsSL https://download.docker.com/linux/ubuntu/gpg | sudo apt-key add -

$ sudo apt-key fingerprint 0EBFCD88

$ sudo add-apt-repository \
   "deb [arch=amd64] https://download.docker.com/linux/ubuntu \
   $(lsb_release -cs) \
   stable"

$ sudo apt-get update

$ sudo apt-get install docker-ce docker-ce-cli containerd.io

$ sudo docker run hello-world

これでとりあえずHello world.
このままだといちいちsudo付けないとdockerコマンドを使えなかったので,

$ sudo gpasswd -a <user> docker

これでsudo付けなくて良くなる.

Dockerfileの作成

今回作成したDockerfileは以下の通り.

# 使用するubuntuのバージョンを指定
FROM ubuntu:18.04

# 使うコマンドをインストール
RUN \
    apt update && \
    apt -y upgrade && \
    apt install -y build-essential && \
    apt install -y software-properties-common && \
    apt install -y curl git man unzip vim wget sudo

# rootだと色々と不便なので,ユーザーを作成
RUN useradd -m hoge
# ルート権限を付与
RUN gpasswd -a hoge sudo
# パスワードはpassに設定
RUN echo 'hoge:pass' | chpasswd
# sshログイン時のシェルをbashに設定
RUN sudo sed -i 's/hoge:x:1000:1000::\/home\/hoge:\/bin\/sh/hoge:x:1000:1000::\/home\/hoge:\/bin\/bash/g' /etc/passwd

# sshするための設定(公式サイト参考)
RUN apt install -y openssh-server
RUN mkdir /var/run/sshd
RUN sed -i 's/PermitRootLogin prohibit-password/PermitRootLogin yes/' /etc/ssh/sshd_config
# SSH login fix. Otherwise user is kicked off after login
RUN sed 's@session\s*required\s*pam_loginuid.so@session optional pam_loginuid.so@g' -i /etc/pam.d/sshd
ENV NOTVISIBLE "in users profile"
RUN echo "export VISIBLE=now" >> /etc/profile
EXPOSE 22
CMD ["/usr/sbin/sshd", "-D"]

dockerイメージの作成からログインまで

dockerイメージの作成

$ docker build . -t myubuntu:18.04

Dockerfileをおいたディレクトリ内で実行.myubuntu:18.04は任意の名前.
以下のコマンドで確認できる.

$ docker images
REPOSITORY          TAG                 IMAGE ID            CREATED             SIZE
myubuntu            18.04               iiiiiidddddd        6 minutes ago       496MB

dockerコンテナの起動

$ docker run -d -P --name test myubuntu:18.04

dockerイメージからコンテナを作成し,起動する.
-dでバックグラウンド実行,
-PでECPOSEしたポートをローカルとつなげる,
--nameでコンテナ名を指定.

dockerコンテナへssh接続

$ docker port test 22
0.0.0.0:32768

で表示されたポートに対してsshする.

$ ssh hoge@localhost -p 32768
hoge@localhost's password:<pass>

Welcome to Ubuntu 18.04.4 LTS (GNU/Linux 4.15.0-47-generic x86_64)
...
hoge@nyonyonyo:~$

コンテナ内にユーザーhogeでssh接続し,bashを起動することができた!
あとはこの中で開発しまくれる(はず).

参考

https://docs.docker.com/engine/examples/running_ssh_service/
https://qiita.com/techno-tanoC/items/58e9c5c74d90392d9de4

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