- 投稿日:2020-02-22T15:22:57+09:00
Linux勉強会 第3回:ファイルの削除禁止設定と検索機能
第1回 Linux勉強会 第1回:仮想コンソールとファイル操作
第2回 Linux勉強会 第2回:ファイル操作
第1回第2回に引き続き今回は第3回目の記事になります。
2月14日、株式会社Ancarで社内勉強会を行いました。勉強会トピックのおさらいです当記事は「Linuxの基礎」になりますので、そのことをご承知おき下さい。
補足情報等ございましたら、コメント残していただけると幸いです各コマンドの実行はmacOSの標準ターミナルを使用しています
おしながき
ファイルの削除禁止設定
あるファイルを削除できなくするには、そのファイルの属するディレクトリを書き込み禁止にする必要があります
書き込み可能ディレクトリ (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
し、それを画面表示$ 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今回は以上となります!
まとめ
基礎的な内容ですが、普段使用していないコマンドの使い方を学ぶことができました。
機会があれば、どんどん使っていきたいですね。加筆修正、大歓迎ですのでぜひコメントにお願いします!
- 投稿日:2020-02-22T00:45:02+09:00
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.04Dockerfileをおいたディレクトリ内で実行.myubuntu:18.04は任意の名前.
以下のコマンドで確認できる.$ docker images REPOSITORY TAG IMAGE ID CREATED SIZE myubuntu 18.04 iiiiiidddddd 6 minutes ago 496MBdockerコンテナの起動
$ docker run -d -P --name test myubuntu:18.04dockerイメージからコンテナを作成し,起動する.
-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