Linux – 削除できません: 許可されていない操作です

Vagrantの共有ディレクトリーにホスト側のWindowsからディレクトリーをコピーしてmvやrmdirを実行しようとしたとき、以下のようなエラーになった。

rm: `...'を削除できません: 許可されていない操作です
rm: cannot remove `...': Operation not permitted

この場合、ディレクトリーのスティッキービットを外すことで通常通り削除が可能になる。

単一のディレクトリーのスティッキービットを外すには以下の通り入力。

ディレクトリー下に再帰的に行うには以下の通り入力。

 

Linux – find

名前を指定して検索

特定の名前のファイル・ディレクトリーを探す。

  • -nameオプションに続けて”名前”で検索
  • 大文字/小文字が区別される(case sensitive)

大文字・小文字を問わず名前を指定して検索する場合は、-inameを指定する(case insensitive)。

この場合"SEARCH_NAME""Search_Name"などもヒットする。

種類を指定して検索

-type 形式コードを指定。以下はファイルのみを検索する例。

主な形式コードは以下のとおり。

  • -type f:ファイルを検索
  • -type d:ディレクトリーを検索
  • -type l:シンボリックリンクを検索

ワイルドカード

'*'は任意長の文字列。以下の例では'.conf'で終わるファイルがヒット。

'?'は任意の1文字にヒット。以下の例では'*'と組み合わせていて、'loc'に3文字が続き、任意の拡張子を持つファイルが検索される。

たとえば以下のようなファイルがヒットする。

  • locale.rb
  • locker.c
  • locker.js
  • lock-i.ri

サイズ指定

-sizeオプションにサイズ、単位、以上/未満の符号をつけて検索する。

-size [符号なし/+/-]数値[c/k/M/G/b]

単位記号

  • c:bytes
  • k:K bytes
  • M:M bytes
  • G:G bytes

前置符号

  • 符号なし:指定サイズに等しいファイル
  • +:指定サイズ以上のファイル
  • -:指定サイズ未満のファイル

以下の例では100キロバイトちょうどのファイルがヒットする。

以下の例では10Mバイト以上のファイルがヒットする。

以下の例では10Kバイト未満のファイルがヒットする。

-sizeの組み合わせが可能で、以下の例では10Mバイト以上、15Mバイト未満のファイルがヒットする。

時刻指定

時刻の種類には以下の三種類がある。

  • Access Time: ファイルに最後にアクセスがあった時刻
  • Modification Time: ファイル内容が最後に変更された時刻
  • Change Time: ファイルの状態(inodeデータ)が最後に変更された時刻

3つの時刻に対して、指定する数値が日単位か分単位かでオプション名が変わる。

  • 日単位:-atime, -mitime, -ctime
  • 分単位:-amin, -mmin, -cmin

各オプションに、時間の数値と前置符号を指定する。

  • -atime/-mtime/-ctime [符号なし/+/-]日数
  • -amin/-mmin/-cmin [符号なし/+/-]分数

前置符号

  • 符号なし:その時刻前、たとえば
    • -atime 3 → 3日前にアクセス
  • -:その時刻以内、たとえば
    • -mtyme -3 → 変更されたのが3日前以内
  • +:その時刻以上経過、たとえば
    • -ctyme +3 → 変更されて以降3日以上経過

 

Git/GitHub

Git

基本

コミット

ブランチ

リモート

GitHub

スタートアップ

操作

Linux – 停止中のジョブ

停止しているジョブがあってログアウトできないときなど。

jobsコマンドでジョブとジョブ番号の確認。

fg ジョブ番号コマンドでフォアグラウンド処理に。

ジョブを停止する場合はkill ジョブ番号コマンド。

 

Linux – ssh-keygen – 鍵の生成

キーペアの生成

ssh-keygen -t rsa -b ビット数 -C "コメント"

生成されたキーは、デフォルトでは以下のファイルに記録されている。パーミッションは秘密鍵が600、公開鍵が644。

  • 秘密鍵:~/.ssh/id_rsa
  • 公開鍵:~/.ssh/id_rsa.pub

秘密鍵の内容

公開鍵の内容

オプション

ssh-keygen --help

参考サイト:

 

Linux – シェル

確認

現在のシェル

echo $SHELL

使用可能なシェル

cat /etc/shells

bashへのリンク

多くのLinuxでは、/bin/shはそのままのsh(Bourne Shell)ではなく、bashへのシンボリックリンクになっている。

スクリプトの書き方と実行

1行目にShebang

スクリプトの1行目で実行するシェルを指定する。この1行目の表現はShebangと呼ばれる。

#!/bin/bash

実行権限を与える

普通にスクリプトを作成した場合、実行権限がない。

chmodで実行権限を与える。全ユーザーで実行可能にするなら755を指定。

chmod 755 スクリプト名

パスを指定して実行する

スクリプトの場所にパスが通っていない場合は、カレントディレクトリーからのパスで指定して実行。

./スクリプト名

フルパスでもよい。

スクリプトがパスが通っている場所にあるなら、スクリプト名だけで実行可能。

 

Linux – sed – 雛形

ls -alの結果の活用

出力行の絞り込み

ディレクトリーの結果だけ取り出すには

ls -al | sed -n '/^d/p'

ファイルの結果だけ取り出すには

ls -al | sed -n '/^-/p'

ディレクトリー名・ファイル名を取り出す

ディレクトリー名とファイル名だけ取り出すには

ls -al | sed 1,3d | sed 's/^.*[0-9][0-9]:[0-9][0-9] //'

ファイル名だけ取り出すには

ls -al | sed -n '/^-/p' | sed 's/^.*[0-9][0-9]:[0-9][0-9] //'

ディレクトリー名だけ取り出すには

ls -al | sed 1,3d | sed -n '/^d/p' | sed 's/^.*[0-9][0-9]:[0-9][0-9] //'

 

Linux – sed

使い方

sed [オプション] スクリプト [ファイル]

  • オプションは必要に応じて指定する
  • ファイルは入力ファイルがある場合に指定する

出力結果の加工

たとえばlsの結果を加工したいような場合、パイプでsedに渡す。

コマンド | sed ...

その結果をファイルに書きだしたい場合はリダイレクト。

コマンド | sed ... > ファイルパス

ファイルの加工

ファイルを入力としてsedで加工したい場合、置換などの表現の後にファイルを指定するか、ファイル出力をパイプでsedに渡す。

sed ... ファイル

cat ファイル | sed ...

ファイル書き換えは-iオプション

同じファイルを置換結果などで書き込む場合、リダイレクトを使うとファイルの内容が空になってしまう。

sed ... ファイル > ファイル

同じファイルの内容を書き換えるには-iオプションを指定する。

sed -i sed ... ファイル

異なるファイルに書き込む場合にはリダイレクトを使ってよい。

sed ... ファイル > 別のファイル

スクリプトの区切り文字は任意

たとえば置換スクリプトs/.../.../gなどの区切り文字は、必ずしも/である必要はない。

s1...1...1gなどスクリプトの内容に表れない任意の文字を使える。

'"で囲む意味

次のような場合はスクリプトをシングルクォート(')かダブルクォート(")で囲む。

  • 置換表現などにスペースを含む場合
  • $などシェルに解釈される文字を含む場合

シングルクォートで囲むと、シェルによる解釈は行われず単なる文字列として扱われ、sedのスクリプトとして解釈される。以下の表現では、sedが$を最終行のアドレスとして扱い、ファイルの最後の1行のみが表示される。

sed -n '$p' ファイル

ダブルクォートで囲むと、シェルの変数($...)などの意味を持つものは処理される(変数が展開されるなど)。たとえば以下の表現はシェル変数$pと解釈され、それが定義されていなければ何も表示されない。

sed -n "$p" ファイル

シェルに解釈される文字を無効化するのには、シングルクォートで囲むほか、その文字をバックスラッシュでエスケープする方法もある。

sed -n \$p ファイル

スクリプト

例として以下のようなlsコマンドの結果をパイプでsedに渡す。

行抽出

以下の指定は、アドレスかパターンで指定された行を表示する。

sed [アドレスorパターン]p

ただしpコマンドは処理された行以外の行も表示されるため、-nオプションで処理された行のみ表示させる。

行番号指定

行抽出は-nオプションを付け、-n 行番号pとする。

sed -n 行番号p

2行目だけを取り出す例。

開始番号と終了番号を指定することもできる。

sed -n 開始番号,終了番号p

4~6行目を取り出す例。

最終行のみを指定する場合は$pとする。この場合はシェルが認識しないよう、$をエスケープするかスクリプト部分をシングルクォートで囲む。

sed -n '$p' または sed -n \$p

最終行を取り出す例。

ただし「最後からn行」といった指定はsedではできないため、tailコマンドを使う。

tail -n 行数

以下の例はlsコマンドの最後3行を表示させている。

-n 行数を指定せずtailだけにすると、デフォルトの10行となる。

パターン指定

/パターン/pでマッチしたパターンの行が対象となる。これに-nオプションを付けて、パターンにマッチした行のみ抽出する。

sed -n /パターン/p

以下はrwxという文字列を含む行のみ抽出している。

置換行のみ抽出

後述の文字置換・文字列置換された行のみを抽出する。

sed -n [y/s]/.../.../gp

以下の例では、rwxRWXに置換した行のみが表示される。

行削除

以下はアドレスやパターンにマッチする行を削除する。

sed [アドレスorパターン]d

行番号指定

sed 行番号dで指定した行を、sed 開始番号,終了番号dで指定した範囲の行を削除する。

以下の例ではls -alの結果から1~3行目を取り除いている。

パターン指定

/パターン/dでマッチするパターンを含む行を削除する。

sed /パターン/d

以下の例では、通常ファイルの出力結果を除いている。

文字置換

1文字置換

sed y/a/A/で、各行の文字aを全てAに置換する。

以下の例では、lsの結果中rの文字をRに置換している。

複数文字置換

sed y/abc/ABC/で、各行のaAに、bBに、cCに置換する。置換前の文字数と置換後の文字数は同じでなければならない。

以下の例では、lsの結果中rwxの文字をそれぞれRWXに置換している。

文字列置換

各行1つだけ置換

sed s/string/STRING/で、各行の最初に現れたstringSTRINGに置換する。

以下の例では各行最初のrootROOTに置換している。

全て置換

sed s/string/STRING/gと末尾にgを付けることで、各行の全てのstringSTRINGに置換する。

パターン削除

文字列置換の後半を//で空にすると、パターンにマッチした部分が削除される。

sed s/パターン//[g]

以下の例では、ls -alの結果から時刻の部分だけを取り除いている。

sedの正規表現の注意点

\wは使えるが\dは使えない

\wは通るが

\dは通らない

{, }\{, \}でエスケープ

エスケープしないと通らないが

エスケープすると通る

 

Linux – Composerのインストール

概要

Vagrant上のCentOS7仮想環境にComposerをグローバルインストールした記録。

PHPを使ってダウンロード、インストールするのでLinuxの種類には依存しない。

手順の確認

実行スクリプト

ComposerのサイトDownloadの内容を確認。シンプルに進めるなら以下のスクリプトをターミナルで実行するよう書かれている。

それぞれphpのスクリプトを-rオプションで直接実行している。

  • 1行目はインストールファイルのダウンロード
  • 2行目はファイルの確認
  • 3行目でセットアップ実行
  • セットアップファイルの削除

オプション

composer-setup.phpを実行するときのオプションに以下が説明されている。

–install-dir
実行ファイルをインストールするディレクトリーを指定する。
php composer-setup.php --install-dir=bin
–filename
インストールする実行ファイル名を指定する。デフォルトはcomposer.phar
php composer-setup.php --filename=composer

その他に--version--helpも説明あり。

グローバルインストール

指定したファイルにローカルインストールする方法もあるが、ここでは/usr/local/binにグローバルインストールする。

セットアップ実行の際に、/usr/local/binに書き込むためroot権限で実行し、セットアップするディレクトリーとファイル名(composer)を指定している。

プロンプトにcomposerと入力してインストールされたことを確認。

 

Linux – curl

概要

curlコマンドはcURL (see URL)から名付けられたコマンドで、URLを通したファイル転送を行うコマンドラインツール。

Vagrantのbento/CentOS7にはcurlがインストール済みで、以下のようにバージョンを確認できる。

GET

curl URLでHTTPのGETメソッドをコマンドラインで実行し、転送されたファイルはコンソールに表示される。

-s, -S

curl -s URLはプログレス表示を抑制。ただしエラーメッセージも表示されなくなる。

curl -S URLはエラーメッセージを出力。

curl -sS URLはプログラス表示を抑制しながらエラーは表示させる。

-I, -i

curl -I URLでレスポンスヘッダー表示。

curl -i URLでボディーを含むレスポンス表示。

-v

リクエストを含むヘッダーとボディーを表示。

POST

-X

-XオプションでPOSTを指定してPOSTメソッドでリクエスト。

-d

-dオプションでパラメーターを指定。