20210305のLinuxに関する記事は9件です。

Linux sedコマンド メモ

目的

  • 特定の文字列の置換

s///g とは何か

  • s/A/B/g は A という文字を B という文字に置換してね!という意味
  • s は置換をしてね!という意味
  • g はマッチしたとこ全部置換してね!という意味

■ サンプルファイル

sample.txt
a,b,c
d,e,f
g,h,i
j,k,l

すべてのコンマを*に置換

$ sed 's/,/*/g' sample.txt
a*b*c
d*e*f
g*h*i
j*k*l

※ s///g の最後の g がないと、各行の最初にマッチした文字のみ置換する

$ sed 's/,/*/' sample.txt
a*b,c
d*e,f
g*h,i
j*k,l

2行目だけコンマを*に置換

★ 行数を s の前に書く

$ sed '2s/,/*/g' sample.txt
a,b,c
d*e*f
g,h,i
j,k,l

1行目のコンマを*に置換、3行目のコンマを@に置換

★ オプション e は複数の置換をしたいとき使う

$ sed -e '1s/,/*/g' -e  '3s/,/@/g' sample.txt
a*b*c
d,e,f
g@h@i
j,k,l

2行目から4行目のコンマを*に置換

★連続している行なら2,4sのように書く

$ sed '2,4s/,/*/g' sample.txt
a,b,c
d*e*f
g*h*i
j*k*l

コマンドをスクリプトに書いておく方法

※ コンマをすべて*に置換してね!というコマンドを適当なファイルに書いておく

mysed.txt
s/,/*/g

★ オプション f で上記のファイルを読み込み

$ sed -f mysed.txt sample.txt
a*b*c
d*e*f
g*h*i
j*k*l
  • このエントリーをはてなブックマークに追加
  • Qiitaで続きを読む

Docker buildできない【echoコマンド】

前提

ホストOS:Windows(touchコマンドが使えない)

起こったこと

下記イメージを作ろうとしたところ…

Dockerfile
FROM ubuntu:latest
RUN touch hoge
$docker build .

エラーがでました。

failed to solve with frontend dockerfile.v0: failed to create LLB definition: dockerfile parse error line 1: unknown instruction: 
��F R O M

原因

Dockerfileのファイルを作成する際に、
WindowsOSのためtouchコマンドが使えず、
新規ファイル作成の際、echoコマンドを使っていましたが、
その使い方がNGでした。

具体的には下記がNG 

echo "" > Dockerfile

理屈は
①Dockerfileに空の文字列を挿入する。
②Dockerfileがないので空の新規ファイルが作られる。

なんですが、echoコマンドで出力すると、デフォルトで出力文字の最後が改行されるようで
それが原因なのか微妙(入力して修正するので)ですが、
-nオプションをつけると解決しました。

echo -n > Dockerfile
docker build .

原因曖昧であれなのですが、、
とにかく、echo "" > Dockerfileという書き方は使わないようにします。

参考:echoコマンドの詳細まとめました【Linuxコマンド集】

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

Docker buildできない際の原因【echoコマンド】

前提

ホストOS:Windows(touchコマンドが使えない)

起こったこと

下記イメージを作ろうとしたところ…

Dockerfile
FROM ubuntu:latest
RUN touch hoge
$docker build .

エラーがでました。

failed to solve with frontend dockerfile.v0: failed to create LLB definition: dockerfile parse error line 1: unknown instruction: 
��F R O M

原因

Dockerfileのファイルを作成する際に、
WindowsOSのためtouchコマンドが使えず、
新規ファイル作成の際、echoコマンドを使っていましたが、
その使い方がNGでした。

具体的には下記がNG 

echo "" > Dockerfile

理屈は
①Dockerfileに空の文字列を挿入する。
②Dockerfileがないので空の新規ファイルが作られる。

なんですが、echoコマンドで出力すると、デフォルトで出力文字の最後が改行されるようで
それが原因なのか微妙(入力して修正するので)ですが、
-nオプションをつけると解決しました。

echo -n > Dockerfile
docker build .

原因曖昧であれなのですが、、
とにかく、echo "" > Dockerfileという書き方は使わないようにします。

参考:echoコマンドの詳細まとめました【Linuxコマンド集】

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

Linux 〜もしスペース入れてファイル名やディレクトリ名を作ってしまった時の削除方法〜

初投稿!

学習記録やメモ書き目的で始めることにしました!
web開発をちょろっと学んでいましたが色々あって今はインフラ関連を中心に学習しております。ほぼ初学者レベルなので理解が浅いところや誤りがあるかと思いますがよろしくお願いします。またアドバイス等コメントいた抱けるとすっごく嬉しいです。
早く先輩方のお力になれるよう精進します。
では本題!

もしスペース入れてファイル名やディレクトリ名を作ってしまったら・・・

これ、tarコマンドでディレクトリをアーカイブしていた時
「あ!スペース入れちまった!」って実際に私がやってしまったことです。

スペース付きのファイル名なんて聞いたことないし、あったとしても絶対扱いづらい。まずそもそもそんなミス(?)を皆様しないと思いますが。

消そうと思っても普通に

#rm fi le

なんてやってももちろん削除されません。そりゃ「fiファイル」と「leファイル」
って認識されるので当たり前ですね。

削除の仕方!

#rm "fi le"

これだけです!
ダブルクォーテーションで囲むだけ!

””で囲ったら文字列として認識されちゃうのかな〜と思いながらもやってみたら出来ました。真相はわかりませんが、rmコマンド自体がファイルとディレクトリを対象としているから””で囲ってもファイル名などとして認識してくれるのですかね。

ちなみに

#rm "fi le"

で削除出来たってことなので

#touch "fi le"

でも「fi le」ファイルが作れますw
ちゃんとcatコマンドで「fi le」名として作られているか確認しました。

いや、絶対使わなーーーい。

はい、以上!!

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

Linuxコマンド 〜もしスペース入れてファイル名やディレクトリ名を作ってしまった時の削除方法〜

初投稿!

学習記録やメモ書き目的で始めることにしました!
web開発をちょろっと学んでいましたが色々あって今はインフラ関連を中心に学習しております。ほぼ初学者レベルなので理解が浅いところや誤りがあるかと思いますがよろしくお願いします。またアドバイス等コメントいただけるとすっごく嬉しいです。
早く先輩方のお力になれるよう精進します。
では本題!

もしスペース入れてファイル名やディレクトリ名を作ってしまったら・・・

これ、tarコマンドでディレクトリをアーカイブしていた時
「あ!スペース入れちまった!」って実際に私がやってしまったことです。

スペース付きのファイル名なんて聞いたことないし、あったとしても絶対扱いづらい。まずそもそもそんなミス(?)を皆様しないと思いますが。

消そうと思っても普通に

#rm fi le

なんてやってももちろん削除されません。そりゃ「fiファイル」と「leファイル」
って認識されるので当たり前ですね。

削除の仕方!

#rm "fi le"

これだけです!
ダブルクォーテーションで囲むだけ!

””で囲ったら文字列として認識されちゃうのかな〜と思いながらもやってみたら出来ました。真相はわかりませんが、rmコマンド自体がファイルとディレクトリを対象としているから””で囲ってもファイル名などとして認識してくれるのですかね。

ちなみに

#rm "fi le"

で削除出来たってことなので

#touch "fi le"

でも「fi le」ファイルが作れますw
ちゃんとcatコマンドで「fi le」名として作られているか確認しました。

いや、絶対使わなーーーい。

はい、以上!!

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

[ubuntu20.04]電源ボタンでPCをシャットダウン

手順

bashを開いて
hostnamectl set-chassis vm
でOK。コマンド実行直後より、PCの電源ボタンを押すとOSのシャットダウンが始まる。

環境

  • Ubuntu20.04LTS
  • OS起動後にPC筐体の電源ボタンを押すと、電源OFF確認のダイアログが表示される。マウスでクリックしないと電源OFFできず不便である。

その他

  • hostnamectlコマンドを他で使用したことがない。。。電源ボタンの挙動以外にどんな影響が出ているかわからないです。。。

参考サイト

power button on ubuntu20.04LTS

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

macbookのrubyの環境構築

私が行なったrubyの開発に必要な環境構築についてまとめておきます。
今後自分も必要なことだと思うので。。

デフォルトをzshに設定

% chsh -s /bin/zsh
% xcode-select --install

コマンドラインツールをインストールします。

% /bin/bash -c "$(curl -fsSL https://raw.githubusercontent.com/Homebrew/install/master/install.sh)"

ホームディレクトリにて、homebrewのインストールをします。

% brew -v
% brew update

homebrewのバージョンを確認、updeateを上記の記述で行う

Rubyのインストール

% brew install rbenv ruby-build
% echo 'eval "$(rbenv init -)"' >> ~/.zshrc

rubyの土台となるものをhomebrewを用いてinstallする。
したの記述でpc上どこからでも使用できるようにする。

% source ~/.zshrc

ここまででzshの変更を反映します。

% brew install readline
% brew link readline --force

readlineをインストールしてirb上での日本語入力を可能に設定します。

% RUBY_CONFIGURE_OPTS="--with-readline-dir=$(brew --prefix readline)"
% rbenv install 2.6.5
% rbenv global 2.6.5
% rbenv rehash
% ruby -v

上記を一つずつ実行します。
まずruby2.6.5のインストールをします。
インストールしたrubyを使用するためにバージョンを指定。
rbenvを読み込んで変更を反映。
最後の記述でインストールしたrubyのバージョンを確認する。

Mysqlをインストールしていきます

% brew install mysql@5.6
% mkdir ~/Library/LaunchAgents 
% ln -sfv /usr/local/opt/mysql\@5.6/*.plist ~/Library/LaunchAgents
% launchctl load ~/Library/LaunchAgents/homebrew.mxcl.mysql\@5.6.plist 

一つずつ実行します。
pc再起動のたびに起動し直さないように自動で起動するようにinstall以下の記述で設定します。

% echo 'export PATH="/usr/local/opt/mysql@5.6/bin:$PATH"' >> ~/.zshrc 
% source ~/.zshrc 
% which mysql 
% mysql.server status

以上の記述でどこからでも操作できるように設定します。
最後の記述でsqlの状態を確認できます。

railsのインストール

% gem install bundler --version='2.1.4'
% gem install rails --version='6.0.0'
% rbenv rehash
% rails -v

gemを管理するために必要なbundlerをインストールする。
rails6.0.0をインストールする
変更を反映させて正しく導入できているのかを確認。

nodeのインストール

% brew install node@14
% echo 'export PATH="/usr/local/opt/node@14/bin:$PATH"' >> ~/.zshrc
% source ~/.zshrc
% node -v

railsを動かすのに必要なnode.jsのインストールをする。

yarn

% brew install yarn
% yarn -v

主にJavaScriptで開発されたプログラム部品(モジュール)を管理するためのパッケージ管理システムの一つです。
以上が2020年3月現在私が環境構築で行なっている作業でした。

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

sudoの脆弱性対応メモ

sudoの脆弱性対応をしたのでいかに記述します。

■対象サーバー
CentOS6.5

UPDATE前のsudoバージョン

[root@db01 ~]# rpm -qa sudo
sudo-1.8.6p3-20.el6_7.x86_64

デフォルトのyum updateだとこのバージョンが最新となる

[root@db01 ~]# yum update sudo
読み込んだプラグイン:fastestmirror, refresh-packagekit, security
更新処理の設定をしています
Loading mirror speeds from cached hostfile
base                                                                                           | 3.7 kB
extras                                                                                         | 3.4 kB
updates                                                                                        | 3.4 kB
更新と設定されたパッケージがありません。

このバージョンだと脆弱性が解消されていない

[oracle@db01 ~]$ sudoedit -s /
[sudo] password for oracle:
sudoedit: /: 通常ファイルではありません

参考URL)https://www.jpcert.or.jp/at/2021/at210005.html

参考サイトによると、上記コマンドを実行した際、「usage:~」と表示されれば脆弱性が解消されているsudoのバージョンで、
「sudoedit:~」と表示されたら脆弱性が解消されていないバージョンとの事。

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

sudoの脆弱性対応

2021年1月26日に発表されたsudoの脆弱性について対応した内容を以下に記述します。

■対象サーバー
CentOS6.5

/etc/sudoersの権限設定内容は以下の通り

[root@db01 ~]# grep -A 2 '## Allow root' /etc/sudoers
## Allow root to run any commands anywhere
root    ALL=(ALL)       ALL
oracle  ALL=(ALL)       ALL

UPDATE前のsudoバージョン

[root@db01 ~]# rpm -qa sudo
sudo-1.8.6p3-20.el6_7.x86_64

デフォルトのyum updateだとこのバージョンが最新となるが...

[root@db01 ~]# yum update sudo
読み込んだプラグイン:fastestmirror, refresh-packagekit, security
更新処理の設定をしています
Loading mirror speeds from cached hostfile
base                                                                                           | 3.7 kB
extras                                                                                         | 3.4 kB
updates                                                                                        | 3.4 kB
更新と設定されたパッケージがありません。

このバージョンだと脆弱性が解消されていない

[oracle@db01 ~]$ sudoedit -s /
[sudo] password for oracle:
sudoedit: /: 通常ファイルではありません

以下サイトによると、sudoのバージョンについて、上記コマンドを実行した際「usage:~」と表示されれば脆弱性が解消されており、「sudoedit:~」と表示されたら脆弱性が解消されていないとの事。

参考URL)https://www.jpcert.or.jp/at/2021/at210005.html

脆弱性対象バージョンは以下の通り。
- sudo バージョン 1.8.2 から 1.8.31p2
- sudo バージョン 1.9.0 から 1.9.5p1

sudo公式サイトより脆弱性対応バージョンのsudoをダウンロードする

[root@db01 tmp]# wget https://github.com/sudo-project/sudo/releases/download/SUDO_1_9_5p2/sudo-1.9.5-3.el6.x86_64.rpm
--2021-03-05 03:16:10--  https://github.com/sudo-project/sudo/releases/download/SUDO_1_9_5p2/sudo-1.9.5-3.el6.x86_64.rpm
github.com をDNSに問いあわせています... 13.114.40.48
github.com|13.114.40.48|:443 に接続しています... 接続しました。
HTTP による接続要求を送信しました、応答を待っています... 302 Found
場所: https://github-releases.githubusercontent.com/57972154/9bfacb80-5fc6-11eb-9a63-3f50d94d454f?X-Amz-Algorithm=AWS4-HMAC-SHA256&X-Amz-Credential=AKIAIWNJYAX4CSVEH53A%2F20210304%2Fus-east-1%2Fs3%2Faws4_request&X-Amz-Date=20210304T181610Z&X-Amz-Expires=300&X-Amz-Signature=ef43331dbb2d2e02e8b96691d691a0f4139e1452c987001a3d4c3a6ed5343254&X-Amz-SignedHeaders=host&actor_id=0&key_id=0&repo_id=57972154&response-content-disposition=attachment%3B%20filename%3Dsudo-1.9.5-3.el6.x86_64.rpm&response-content-type=application%2Foctet-stream [続く]
--2021-03-05 03:16:10--  https://github-releases.githubusercontent.com/57972154/9bfacb80-5fc6-11eb-9a63-3f50d94d454f?X-Amz-Algorithm=AWS4-HMAC-SHA256&X-Amz-Credential=AKIAIWNJYAX4CSVEH53A%2F20210304%2Fus-east-1%2Fs3%2Faws4_request&X-Amz-Date=20210304T181610Z&X-Amz-Expires=300&X-Amz-Signature=ef43331dbb2d2e02e8b96691d691a0f4139e1452c987001a3d4c3a6ed5343254&X-Amz-SignedHeaders=host&actor_id=0&key_id=0&repo_id=57972154&response-content-disposition=attachment%3B%20filename%3Dsudo-1.9.5-3.el6.x86_64.rpm&response-content-type=application%2Foctet-stream
github-releases.githubusercontent.com をDNSに問いあわせています... 185.199.108.154, 185.199.110.154, 185.199.109.154, ...
github-releases.githubusercontent.com|185.199.108.154|:443 に接続しています... 接続しました。
HTTP による接続要求を送信しました、応答を待っています... 200 OK
長さ: 2235944 (2.1M) [application/octet-stream]
`sudo-1.9.5-3.el6.x86_64.rpm.1' に保存中

100%[==========================================================================================>] 2,235,944   2.91M/s 時間 0.7s

2021-03-05 03:16:11 (2.91 MB/s) - `sudo-1.9.5-3.el6.x86_64.rpm.1' へ保存完了 [2235944/2235944]

拡張子がrpm.1でダウンロードされたのでrpmにリネームする

[root@db01 tmp]# mv sudo-1.9.5-3.el6.x86_64.rpm.1 sudo-1.9.5-3.el6.x86_64.rpm

インストールする

[root@db01 tmp]# yum install sudo-1.9.5-3.el6.x86_64.rpm
読み込んだプラグイン:fastestmirror, refresh-packagekit, security
インストール処理の設定をしています
sudo-1.9.5-3.el6.x86_64.rpm を調べています: sudo-1.9.5-3.el6.x86_64
次のリポジトリーへの更新として sudo-1.9.5-3.el6.x86_64.rpm を設定します: sudo-1.8.6p3-20.el6_7.x86_64
Loading mirror speeds from cached hostfile
依存性の解決をしています
--> トランザクションの確認を実行しています。
---> Package sudo.x86_64 0:1.8.6p3-20.el6_7 will be 更新
---> Package sudo.x86_64 0:1.9.5-3.el6 will be an update
--> 依存性解決を終了しました。

依存性を解決しました

====================================================================================================================================
 パッケージ              アーキテクチャ            バージョン                     リポジトリー                                 容量
====================================================================================================================================
更新:
 sudo                    x86_64                    1.9.5-3.el6                    /sudo-1.9.5-3.el6.x86_64                    7.9 M

トランザクションの要約
====================================================================================================================================
アップグレード       1 パッケージ

合計容量: 7.9 M
これでいいですか? [y/N]y
パッケージをダウンロードしています:
rpm_check_debug を実行しています
トランザクションのテストを実行しています
トランザクションのテストを成功しました
トランザクションを実行しています
  更新                    : sudo-1.9.5-3.el6.x86_64                                                                             1/2
警告: /etc/sudoers は /etc/sudoers.rpmnew として作成されました。
  整理中                  : sudo-1.8.6p3-20.el6_7.x86_64                                                                        2/2
  Verifying               : sudo-1.9.5-3.el6.x86_64                                                                             1/2
  Verifying               : sudo-1.8.6p3-20.el6_7.x86_64                                                                        2/2

更新:
  sudo.x86_64 0:1.9.5-3.el6

完了しました!

sudoが修正版のバージョンに更新されたことを確認

[root@db01 tmp]# rpm -qa sudo
sudo-1.9.5-3.el6.x86_64

確認コマンドを実行し、「usage:~」と表示されることを確認

[oracle@db01 ~]$ sudoedit -s /
usage: sudoedit [-AknS] [-r role] [-t type] [-C num] [-D directory] [-g group] [-h host] [-p prompt] [-R directory] [-T timeout]
                [-u user] file ...

これでsudo脆弱性対応は完了しました。

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