UNIX系OS ( Mac / Linux / FreeBSD )のシェルコマンドに関する各種メモ書き

findとgrepによる再帰検索

● grepによる再帰検索

拡張子 .ts と .tsx ファイルを 文字列 foobar で検索 (カレントディレクトリ ./ 以下)

grep -rnw './' -e 'foobar' --include=\*.{tsx,ts}

● findとgrepによる再帰検索

再帰的に文字列【onClick】でカレントディレクトリ以下の全ての【拡張子 .tsxファイル】を検索するには

find . -name "*.tsx" -print0 | xargs -0 grep 'onClick'

とやります。

拡張子 による絞り込みが不要の場合は、以下のようにしてもokです

grep -r 'onClick'  .
No.43
02/27 14:05

edit

ファイル

ベンチマークコマンド wrk , vegeta

● wrk のインストール

git clone https://github.com/wg/wrk.git
cd wrk
make -j4
sudo mv wrk /mv wrk /usr/local/bin/

ベンチマークをとる

wrk -t8 -c10 -d10s --latency  http://127.0.0.1:3000/

戻ってくる値のこの辺りを見て判断します

4830 requests in 10.07s, 108.95MB read
Requests/sec:    479.58
No.2474
02/26 12:45

edit

unix 起動してからの時間を調べる

uptime

結果例

09:12:15 up 7 min,  1 user,  load average: 0.00, 0.18, 0.14
No.2367
07/03 09:12

edit

Macで複数のユーザーでそれぞれの Homebrew を使用する

● 自分のホームディレクトリ下に .homebrew ディレクトリを作成し、そこに homebrew をインストール

cd
mkdir .homebrew
curl -L https://github.com/Homebrew/brew/tarball/master | tar xz --strip 1 -C .homebrew

● パスを設定する

vi .bash_profile
#すでにこのような記述がある場合はコメントアウトか削除する
#OFF eval "$(/opt/homebrew/bin/brew shellenv)"

# homebrewパスを追加
export PATH=$HOME/.homebrew/bin:$PATH
export HOMEBREW_CACHE=$HOME/.homebrew/caches

● Terminalを再起動してbrewコマンドを実行する

brew --version
brew update
No.2364
06/28 11:40

edit

bash /zsh 履歴に追加するコマンド

● bash /zsh 履歴に追加するコマンド

history -s string

● bash /zsh 履歴に追加するコマンド

print -S string
No.2324
04/21 17:41

edit

xargsの進化版としても使用できる GNU parallels

● インストール

brew install parallel

● 実行例(前から挿入)

コマンド

echo hoge build | parallel --no-notice echo {}/{}

結果

hoge/hoge

● 実行例(後ろから挿入)

コマンド

parallel --no-notice echo {}/{} ::: hoge

結果

hoge/hoge
No.2320
04/19 12:45

edit

fzf で bash / zsh のコマンドを便利にする

● mac でのインストール

fzfbat を インストールします

brew install fzf
brew install bat

● スクリプトのダウンロード

以下のURLからbashまたはzsh用のファイルをダウンロードします。
https://github.com/junegunn/fzf/tree/master/shell
ホームフォルダの /fzf/ 以下に保存します

● スクリプトの設定

.bash_profile に 以下のように記述します ( bash の場合 )

# FZF
source ~/fzf/completion.bash
source ~/fzf/key-bindings.bash

● 使い方の例

● 1. コマンドの履歴をfuzzyサーチして実行する

Control + R

を押すと コマンドの履歴が表示され、fuzzyサーチして実行することができます。

● 2. SSHを一覧から選択して接続できるようにする「fssh」 コマンドを作成する

# FZF (ssh)
function fssh {
  t=$(cat ~/.ssh/config | grep 'Host ' | cut -f2 -d' ' | fzf --reverse --preview "cat ~/.ssh/config | sed -ne '/^Host {}$/,/^\s*$/p'")
  if [ -n "$t" ]; then
    echo "ssh $t" 
    ssh "$t"
  fi
}
fssh

接続先一覧からエンター押すと接続できるようになります。

● 3. package.jsonのscriptsを一覧から選択してyarnで実行する「fy」 コマンドを作成する

まず jq をインストールします

brew install jq
function fy() {
  if [ ! -f "package.json" ]; then
    echo "Error: package.json not found"
    return 1
  fi

  if [ -f "yarn.lock" ]; then
    local pm=yarn
  else
    local pm=yarn
  fi

  local script=$(cat package.json | jq -r '.scripts | to_entries | .[] | .key + " -> " + .value' | fzf --reverse)
  if [ -n "$script" ]; then
    SCRIPT=(${script/ -> / })
    echo ${pm} run ${SCRIPT[0]}
    history -s ${pm} run ${SCRIPT[0]}
    ${pm} run ${SCRIPT[0]}
  fi
}
fy

● 4. package.jsonのscriptsを一覧から選択してnpmで実行する「fn」 コマンドを作成する

function fn() {
  if [ ! -f "package.json" ]; then
    echo "Error: package.json not found"
    return 1
  fi

  if [ -f "yarn.lock" ]; then
    local pm=npm
  else
    local pm=npm
  fi

  local script=$(cat package.json | jq -r '.scripts | to_entries | .[] | .key + " -> " + .value' | fzf --reverse)
  if [ -n "$script" ]; then
    SCRIPT=(${script/ -> / })
    echo ${pm} run ${SCRIPT[0]}
    history -s ${pm} run ${SCRIPT[0]}
    ${pm} run ${SCRIPT[0]}
  fi
}
fn

● 5. docker コンテナを一覧から選択して中へ入る「fd」 コマンドを作成する

function fd(){
  local SH="bash"

  type docker >/dev/null 2>&1 || {
      echo "docker not found" >&2
      exit 1
    }
  type fzf >/dev/null 2>&1 || {
      echo "fzf not found" >&2
      exit 1
    }

  local HASH=$(docker ps | fzf --reverse --header-lines=1 --select-1 --query="${1:-}" | awk '{ print $1 }')
  history -s docker exec -it "${HASH}" "${SH}"
  docker exec -it "${HASH}" "${SH}"
}
fd

● package.jsonを 一覧を表示して実行する(npm yarn 自動選択)

brew install jq

( bash用です )

# package.json実行 (brew install jq)
function fp() {
  if [ ! -f "package.json" ]; then
    echo "Error: package.json not found"
    return 1
  fi

  if [ -f "yarn.lock" ]; then
    local pm=yarn
  else
    local pm=npm
  fi

  local script=$(cat package.json | jq -r '.scripts | to_entries | .[] | .key + " -> " + .value' | fzf)
  if [ -n "$script" ]; then
    SCRIPT=(${script/ -> / })
    echo ${pm} run ${SCRIPT[0]}
    history -s ${pm} run ${SCRIPT[0]}
    npm run ${SCRIPT[0]}
  fi
}

● シェルにファイルのプレビューを追加する ( FD clone のような )

以下のURLから preview.sh をダウンロードする https://raw.githubusercontent.com/junegunn/fzf.vim/master/bin/preview.sh

~/fzf/ に保存し、 実行権限を付与しておきます

chmod 0755 preview.sh

.bash_profile に以下を追加する

# FZF (fd)
function fd {
	file=$(find * | fzf --preview "preview.sh {} 2> /dev/null || ls {}")
  echo $file
  echo $file  | pbcopy
}

● makeの一覧を表示して実行する

# fmake
function fmake() {
  if [ ! -f "Makefile" ]; then
    echo "Error: Makefile not found"
    return 1
  fi

  local script=$(make help | fzf --reverse --ansi)
  if [ -n "$script" ]; then
    SCRIPT=(${script/  {3,}/ })
    echo make ${SCRIPT[0]}
    history -s make ${SCRIPT[0]}
    make ${SCRIPT[0]}
  fi
}

● 他にも便利な使い方を紹介されている方たちが。

仕事が遅い人は絶対に知らないワンライナー10選 - Qiita
https://blog.tsub.me/post/move-from-peco-to-fzf/
https://journal.lampetty.net/entry/terminal-env-from-peco-to-fzf
https://zenn.dev/fruitriin/scraps/5aa42e37bc57cb

No.2315
02/01 14:44

edit

Macで現在のローカルIP / グローバルIP アドレスを知るターミナルコマンド

● Macで現在のローカルIPアドレスを知るターミナルコマンド

ipconfig getifaddr en0

● Macで現在のグローバルIPアドレスを知るターミナルコマンド

curl ifconfig.io -4

エイリアス localip をつけておくといいでしょう。

alias localip='ipconfig getifaddr en0'
alias globalip='curl ifconfig.io -4'
No.2287
04/27 16:27

edit

現在のグローバルIPを調べるシェルコマンド

● 現在のグローバルIPを調べるシェルコマンド

curl -s inet-ip.info
XXX.XXX.XXX.XXX
curl -s http://httpbin.org/ip
{
  "origin": "XXX.XXX.XXX.XXX"  # グローバルIPアドレス
}
curl -s globalip.me
xxx.xxx.xxx.xxx

Alpine Linux で curl がない場合は事前に

apk add curl

してインストールしておきましょう

引用 : https://bit.ly/3nENLto

No.2092
10/28 17:56

edit

unixのシェル( bash )の便利な設定(1文字ショートカットとヒストリ)。gitブランチ表示

● lsコマンドを短縮する

unixシェルで一番よく使うコマンドの代表格といえば

ls -la

だと思います。 これを短縮して

l [Enter]

で実行できると便利なので以下のようにbash のエイリアスを設定します。

ホームディレクトリ内の .bash_profile または .bashrc に記述

# alias
alias ll='ls -la'
alias  l='ls -laF'
alias  c='cd'
alias  h='history'
alias  gr='grep'
alias hg='history | grep '
alias  g='git'
alias  d='docker'
alias  r='rsub '
alias  v='vim '
alias gp='git plog'
alias gits='git status -uall'
alias pa='php artisan'
alias localip='ipconfig getifaddr en0'
alias globalip='curl ifconfig.io -4'

● プロンプトに現在のパス名、ユーザー名を常に表示させる

またシェルのプロンプトに 「現在のディレクトリパス名」「ユーザー名」を表示させると便利なので以下のように設定します。

ホームディレクトリ内の .bash_profile または .bashrc に記述

# prompt
PS1='[$USER@\H $PWD]$ '

● Unixのシェルにパスを追加

PATH="$PATH":/usr/local/hogehoge  ←追加

とするとパス「/usr/local/hogehoge」を追加できます。

● bashのヒストリ記憶サイズを変更する

export HISTSIZE=50000
export HISTFILESIZE=50000

● 2連続で実行した履歴を何個も残さない( HISTCONTROL その1 )

export HISTCONTROL=ignoredups

● コマンドの前にスペースを入れると履歴に残さない( HISTCONTROL その2 )

export HISTCONTROL=ignorespace

● 全履歴を見て重複コマンドを削除する( HISTCONTROL その3 )

export HISTCONTROL=erasedups

● 上記3つを全てセット( HISTCONTROL その1+2+3 )

export HISTCONTROL=ignoredups:ignorespace:erasedups

● 起動時のシェルを bash に変更する

whereis bash

で bash のパスを調べて、( 例: /usr/local/bin/bash )

chsh -s /usr/local/bin/bash

とします。

● git 最新版のインストール と git-completion , git-prompt のインストール

brew install git
git --version

wget が無い場合は 事前に brew install wget しておきましょう。

git-completion.bashのインストール

wget https://raw.githubusercontent.com/git/git/master/contrib/completion/git-completion.bash -O ~/.git-completion.bash
chmod a+x ~/.git-completion.bash
echo "source ~/.git-completion.bash" >> ~/.bash_profile
source ~/.bash_profile

git-prompt.sh のインストール

wget https://raw.githubusercontent.com/git/git/master/contrib/completion/git-prompt.sh -O ~/.git-prompt.sh
chmod a+x ~/.git-prompt.sh
echo "source ~/.git-prompt.sh" >> ~/.bash_profile
source ~/.bash_profile

.bash_profile に設定を記述

source ~/.git-completion.bash
source ~/.git-prompt.sh

# git-prompt設定
GIT_PS1_SHOWDIRTYSTATE=1
GIT_PS1_SHOWUPSTREAM=1
GIT_PS1_SHOWUNTRACKEDFILES=1
GIT_PS1_SHOWSTASHSTATE=1

# prompt
PS1='[$USER@\H $PWD]\033[0;32m\]$(__git_ps1)\[\033[0m\] $ '

gitの表示は以下のようになります。

設定値 意味
GIT_PS1_SHOWDIRTYSTATE=true addされていない変更の存在を「*」で示す
commitされていない変更の存在を「+」で示す
GIT_PS1_SHOWUNTRACKEDFILES=true addされていない新規ファイルの存在を「%」で示す
GIT_PS1_SHOWSTASHSTATE=true stashがある場合は「$」で示す
GIT_PS1_SHOWUPSTREAM=auto upstreamと同期している場合は「=」で示す
upstreamより進んでいる場合は「>」で示す
upstreamより遅れている場合は「<」で示す

引用 : https://qiita.com/ryoichiro009/items/7957df2b48a9ea6803e0

● 上記の設定全部をコピペ用

# alias
alias ll='ls -la'
alias  l='ls -laF'
alias  c='cd'
alias  h='history'
alias  gr='grep'
alias hg='history | grep '
alias  g='git'
alias  d='docker'
alias  r='rsub '
alias  v='vim '
alias gp='git plog'
alias gits='git status -uall'
alias pa='php artisan'
alias localip='ipconfig getifaddr en0'
alias globalip='curl ifconfig.io -4'

# prompt
# PS1='[$USER@\H $PWD]$ '
PS1='[$USER@\H $PWD]\033[0;32m\]$(__git_ps1)\[\033[0m\] $ '

# history
export HISTSIZE=50000
export HISTFILESIZE=50000
export HISTCONTROL=ignoredups:ignorespace:erasedups

### 以下は必要なら追加

# git日本語文字化け対策
export GIT_PAGER="LESSCHARSET=utf-8 less"

# vanila js で jest を実行する時に import / export を使用可能にする
# package.json に 「 "type": "module"」 も追加すること
export NODE_OPTIONS=--experimental-vm-modules

# show git branch 
source ~/.bash_git_prompt

● linuxの場合

linuxの場合は git-completion.bash, git-prompt.sh が 標準でインストールされていることが多いので、まずは検索しましょう

find / -name git-completion.bash
find / -name git-prompt.sh

.bash_profile に設定します。

/usr/share/doc/git/contrib/completion/git-completion.bash
/usr/share/git-core/contrib/completion/git-prompt.sh

● gitリポジトリ内にいる時は gitのブランチ名を表示させる(古いやり方)

~/.bash_git_prompt を以下の内容で保存

# .bash_prompt
function git_branch() {
  s=$(git branch --no-color 2>/dev/null | sed -ne "s/^\* \(.*\)$/\1/p")
  if [ ! "$s" = "" ]; then
    echo "($s)"
  fi
}

export PS1='[$USER@\H $PWD]\033[0;32m\]$(git_branch)\[\033[0m\] $ '

.bash_profileの一番最後に次の1行を追加する

# show git branch 
source ~/.bash_git_prompt

これで git リポジトリ内にいるときは現在のブランチ名を表示させます。 git リポジトリ内にいない時は何を表示しません。

No.95
03/04 09:06

edit

シェル

unix のコマンドラインシェル でファイル内容を 変数に入れる

● unix のコマンドラインシェル でファイル内容を 変数に入れる

hoge=`cat file.out`
echo "$hoge"
No.2006
06/04 15:00

edit

unix のエディタ vi のカラーリングをやめてエディタの色を白黒にする

vi (実はvimが動いていることが多い)のカラーリングをやめさせるには次のコマンドを入力します。

● unix のエディタ vi のカラーリングをやめて白黒にする

[esc]を押して

:syntax off

● unix のエディタ vi のカラーリングをONにする

[esc]を押して

:syntax on

● vi のデフォルトのカラーリングをやめる

vim ~/.vimrc

次の内容で保存します

:syntax off

● vi と言っていますが、実は vim なときがあります。

次のコマンドで調べておきましょう

which vi
No.2000
07/12 12:34

edit

「新しいメールが /var/spool/mail/root にあります」を見る場合は mailx コマンドを使用する

● 「新しいメールが /var/spool/mail/root にあります」を見る場合は mailx コマンドを使用する

● 1. mailx のインストール

yum install -y mailx

● 2. mailコマンドの実行

mail

● 2. mail一覧画面でのコマンド入力

z [Enter]  次のページへ移動
z- [Enter]  前のページへ移動
数字  [Enter]  指定した番号のメッセージを表示
h  [Enter]  一覧画面を表示
exit  [Enter]  mailコマンド画面を終了する
No.1934
12/21 11:55

edit

Laravelでソフトデリートユーザーのログイン認証を行い、任意のカスタムエラーメッセージを表示させる

● Laravelでソフトデリートユーザーのログイン認証を行う

ソフトデリートを表現するのに

 is_active= 0 : ソフトデリートされた状態
 is_active= 1 : 通常のユーザー

を使用しているとします。

この時ログイン時にソフトデリートされているかどうかをログイン条件に入れながらログインさせます。

app/Http/Controllers/Auth/LoginController.php

    /**
     * ユーザーが認証された後の処理
     *
     * @param  \Illuminate\Http\Request  $request
     * @param  mixed  $user
     * @return mixed
     */
    protected function authenticated(\Illuminate\Http\Request $request, $user)
    {
        if( $user->is_active !== 1 )
        {
            auth()->logout();
            return back()->withErrors([
                'email' => 'ユーザーがアクティブになっていません', 
            ]);
        }
    }
No.1846
08/28 10:19

edit

xpdf で pdf を png や jpg 画像に変換する

● xpdfのインストール

sudo yum install - y xpdf

● pdftoppm コマンドの確認

pdftoppm -h

● xpdf で pdf を png や jpg 画像に変換する

pdftoppm -png  test.pdf  thumbnail

結果

thumbnail-1.png
thumbnail-2.png
thumbnail-3.png
thumbnail-4.png
thumbnail-5.png
thumbnail-6.png
pdftoppm -jpeg  test.pdf  thumbnail

結果

thumbnail-1.jpg
thumbnail-2.jpg
thumbnail-3.jpg
thumbnail-4.jpg
thumbnail-5.jpg
thumbnail-6.jpg
No.1833
01/30 22:32

edit

ファイル・ディレクトリ容量やディスクの空き容量を取得するncdu をインストールする

● ファイル・ディレクトリ容量やディスクの空き容量を取得するncdu をインストールする

yum install -y ncdu
No.1809
07/05 14:51

edit

mac で 7z コマンドを扱う

● インストール

brew install p7zip

● 使用例

.gitディレクトリ を除いて圧縮

7z a my_folder.zip  ~/my_folder  -x!.git 
No.1774
06/04 09:35

edit

find コマンドでシンボリックリンクを探す

● 1.ls コマンドでシンボリックリンクを探す

ls -laR  | grep "\->"

● 2. find コマンドでシンボリックリンクを探す

 find * -type l  
No.1727
03/30 15:52

edit

超高速なgrep ripgrep を使用する

● ripgrep

https://github.com/BurntSushi/ripgrep

● ripgrep のインストール

* CentOS 7へインストールする

sudo yum-config-manager --add-repo=https://copr.fedorainfracloud.org/coprs/carlwgeorge/ripgrep/repo/epel-7/carlwgeorge-ripgrep-epel-7.repo
sudo yum install -y ripgrep

* Macへインストールする

brew install ripgrep

● ripgrep の使い方

rg <PATTERN> <DIR_NAME>
No.1685
02/03 10:53

edit

sjis の CSVファイルを utf-8 に変換する

● sjis の CSVファイルを utf-8 に変換する

● nkfのインストール

Macの場合

brew install nkf

● フォルダーの中のすべての CSV ファイルの文字コードを UTF 8に変換する

nkf -w --overwrite *.csv
No.1678
01/24 09:45

edit

Windows コマンドプロンプトで zip 圧縮を行う

● Windows コマンドプロンプトで zip 圧縮を行う

7zip を使用します。
こちらからインストールします。

https://sevenzip.osdn.jp/download.html

"C:\Program Files\7-Zip\7z.exe" a C:\Users\hoge\Desktop\my_app.zip my_app -x!.git

パスにスペースが含まれているので "C:\Program Files\7-Zip\7z.exe" と ダブルクォーテーションで囲みます。
その後ろは
a 圧縮ファイル名 フォルダ名 です。

● .git ディレクトリを除いて unix コマンドで zip 圧縮を行う

"C:\Program Files\7-Zip\7z.exe" a C:\Users\hoge\Desktop\my_app.zip my_app -x!.git

次のように指定します
a 圧縮ファイル名 フォルダ名 -x!除外フォルダ名
この例では hogeユーザーのデスクトップに my_app.zip を作成します。

No.1643
12/19 14:15

edit

CentOS ( Linux )の yumキャッシュ、ページキャッシュを削除する

● yum のキャッシュを削除する

● 現在のyumのキャッシュを確認する

du -sh /var/cache/yum/
221M    /var/cache/yum/

221Mあります。

● yumのキャッシュを削除する

yum clean all

再度yumのキャッシュを確認する

du -sh /var/cache/yum/
28M     /var/cache/yum/

28Mに減りました。

● Linux の ページキャッシュを削除する

現在のページキャッシュを確認する

free -m
            total        used        free      shared  buff/cache   available
Mem:          487         197          24          20         265         256
Swap:        2047         699        1348

Linux の ページキャッシュを削除する

echo 1 > /proc/sys/vm/drop_caches
No.1631
11/29 14:43

edit

linux ( Cent OS )のマシン名(ホスト名)を変更する

● linux ( Cent OS )の現在のマシン名(ホスト名)を確認する

hostname

● linux ( Cent OS )のマシン名(ホスト名)を変更する

sudo vim /etc/hostname

新しいホスト名を入れて「 esc → :wq」から保存し、マシンを再起動します。

No.1612
11/01 17:19

edit

unix コマンドで zip 圧縮を行う

● unix コマンドで zip 圧縮を行う

my_app ディレクトリを圧縮して my_app.zip ファイルを作成します。

zip -r my_app.zip my_app

● .git ディレクトリを除いて unix コマンドで zip 圧縮を行う

my_app ディレクトリを圧縮して my_app.zip ファイルを作成します。

( .gitディレクトリを無視 )

zip -r my_app.zip   my_app  --exclude=*/.git/*

--exclude オプションは ディレクトリの前でも良いみたいです。

zip -r my_app.zip   --exclude=*/.git/*  my_app  

● .git ディレクトリ、___bakディレクトリを除いて unix コマンドで zip 圧縮を行う

my_app ディレクトリを圧縮して my_app.zip ファイルを作成します。

( .gitディレクトリを無視 )
( ___bakディレクトリを無視 )

zip -r my_app.zip   my_app  --exclude=*/.git/*  --exclude=*/___bak/*

● .git ディレクトリ、___bakディレクトリ、と アンダースコア3つ始まりのファイルとディレクトリを除いて unix コマンドで zip 圧縮を行う

my_app ディレクトリを圧縮して my_app.zip ファイルを作成します。

( .gitディレクトリを無視 )
bakディレクトリを無視 )
始まりのファイルとディレクトリを無視 )

zip -r my_app.zip   my_app  --exclude=*/.git/*  --exclude=*/___bak/*  --exclude=*/___*
No.1595
10/02 13:01

edit

bash の 日本語が文字化けする時の対応

bash の 日本語が文字化けする時の対応

まずはこちらのコマンドで文字化けが解消するか試します。

export LANG=ja_JP.UTF-8
export LC_CTYPE=ja_JP.UTF-8

文字化けが治るなら、設定ファイル .bash_profile に追記します

export LANG=ja_JP.UTF-8
export LC_CTYPE=ja_JP.UTF-8
No.1592
09/27 12:20

edit

diff で ディレクトリ・ファイルを除外する

● diff で 検索するときにファイルやディレクトリを除外する

tmp ディレクトリと Controller.php ファイルを除外して DIRA と DIRB のdiffをとります。

colordiff -r --exclude=tmp --exclude=Controller.php DIRA DIRB

● diff で 検索した時に、検索結果からファイルを除外する

colordiff -r DIRA DIRB  grep -v ".DS_Store"
No.1572
08/26 09:08

edit

git commit する時に Please tell me who you are とエラーが出る時の対処法

● git commit する時に Please tell me who you are とエラーが出る時の対処法

このエラーは純粋に「名前」と 「メールアドレス」が設定されていないというだけのエラーです。 設定箇所がグローバルとローカルの二つあります。 とりあえずはローカルで設定してみましょう。

.git/config を vim エディタで編集します

vim ./git/config

以下の内容を追加して保存する。

[user]
        email = <あなたのメールアドレス>
        name = <ユーザー名>

なお email は GitHub や GitLab を リモートリポジトリに設定している場合は、
サイトのアカウントのメールアドレスにしておかないと リモートプッシュする時にエラーとなりますので注意してください。

No.1538
06/27 17:31

edit

# ● git push が 「the remote contains work that you do hint: not have locally」でrejected された時の対処方法

● git push が rejected された時の対処方法

git push で次のようなエラーが出ることがたまにあると思います。 この時の対処法です。

error: failed to push some refs to 'https://YOUR-GIT-SITE/myapp.git'
hint: Updates were rejected because the remote contains work that you do
hint: not have locally. This is usually caused by another repository pushing
hint: to the same ref. You may want to first merge the remote changes (e.g.,
hint: 'git pull') before pushing again.
hint: See the 'Note about fast-forwards' in 'git push --help' for details.

前回と今回の push までの間にリモートが更新されているので、あなたのローカルに存在しないファイルがありますよとの事なのでマージしましょう。

・1. リモートのファイルを取得

git fetch

・2. マージする

git merge origin/master

git merge origin/masterを実行すると viエディタが自動で立ち上がり、次のようなメッセージが表示されるので、 一番下にマージする理由を記述して保存しましょう。(保存コマンド [esc]の後に : wq [enter] を連続で押す)

Please enter a commit message to explain why this merge is necessary

・3. リモートへpushする

git push origin master
No.1535
06/27 17:28

edit

git

ファイル・ディレクトリ容量やディスクの空き容量を取得する【du】【df】

● ファイルやディレクトリ容量を表示させるには

du -h ディレクトリ名
du -h -s ディレクトリ名(指定したディレクトリのみ表示)
du -h -a  ディレクトリ名(一覧表示)

● 容量の大きいディレクトリを発見する

容量の大きいディレクトリを発見するにはルートディレクトリから grep で

・ギガバイト以上のディレクトリを表示

du -h | grep [0-9]G

・100Mバイト以上のディレクトリを表示

du -h | grep [0-9][0-9][0-9]M

とするといいでしょう

● ディスク全体の残り容量を表示するコマンドは

df -hT

です。

● ディスク容量の残りが少なくなってきたときにチェックするとよいディレクトリ

真っ先にチェックすべきはこのディレクトリです

/var/log/

ブルートフォースアタック(総当たり攻撃)を受けている場合ログのサイズが飛躍的に大きくなっていますのでログサイズが大きい場合はどういうアタックがされているのかも合わせてチェックすると良いでしょう。

/var/cache/
/home
/usr
/var/lib/mysql
/var/lib/pgsql
/var/spool/mail
/root/Maildir

等です。

● yum の キャッシュを削除する

まずはyumキャッシュの要領を確認

du -sh /var/cache/yum/

キャッシュの削除

sudo yum clean all

● composer のキャッシュを削除する

(rootユーザからは実行できません)

composer clear-cache

● MySQL の InnoDB の肥大化を確認する

https://bit.ly/34EXFmR

No.97
10/14 12:36

edit

ファイル

サーバのリスタート(再起動)時間を調べる

● サーバのリスタート(再起動)時間を調べる

last reboot

● サーバの一番最近のリスタート(再起動)時間を調べる

last -1 reboot | grep reboot |  awk '{print $5, $6, $7, $8}'

引用 : https://goo.gl/CdQY9J

No.1460
03/13 10:14

edit

unixマシンの日付を設定する

● unixマシンの日付を設定する

date -s "01/20 13:00 2019"
No.1407
12/27 14:50

edit

Mac OSX で lsした時にパーミッションの最後に着く @ を 表示させる / 削除する

Mac OSX で lsした時にパーミッションの最後に@がつく事があります

-rw-------@  1 hogehoge  staff  1700 10 19  2017 myfile.zip

● Mac OSX で lsした時にパーミッションの最後につく @ を 表示させる

ls -l@

-rw-------@  1 hogehoge  staff  1700 10 19  2017 myfile.zip
	com.apple.quarantine	  20 

● Mac OSX で lsした時にパーミッションの最後につく @ を 削除する

xattr -d com.apple.quarantine:myfile.zip
No.1346
11/05 11:31

edit

sshで接続した先のサーバ上のファイルを Sublime Text で開く

サーバー管理の作業中はエディタは viでする事が多いかと思いますが、 次のようにして Sublime Text で開く事ができます。

● (ssh接続先)rsubコマンドをインストールする

あらかじめ、リモートへssh接続しておき、以下のコマンドで rsub をインストールします。

wget -O /usr/local/bin/rsub \https://raw.github.com/aurora/rmate/master/rmate
chmod a+x /usr/local/bin/rsub

● (ローカル)Sublime Text に 「rsub」パッケージをインストールする

・「Command」+「Shift」+「P」
・rsub で検索
・rsub をクリックしてインストール

● (ローカル) ~/.ssh/config に設定を記述する

vi ~/.ssh/config

で エディタを立ち上げて

Host YOUR.SERVER.NAME
  RemoteForward 52698 localhost:52698

YOUR.SERVER.NAME を適宜書き換えてください。

52698 ってなに?

The -R option sets up a reverse tunnel. The first 52698 names a port on the remote. It will be connected to localhost:52698 or the same port on the connecting box. That port number is the default for TextMate 2 and rmate, so you should now be able to edit away.

● いつものように ssh 接続します

ssh USER@YOUR-SERVER.TLD  -p 59999 -i ./.ssh/YOUR-ID-RSA-KEY

ポート番号(59999) 秘密鍵ファイル(./.ssh/YOUR-ID-RSA-KEY)は適宜書き換えてください

● vi の 代わりに rsub コマンドでファイルを開きます

Sublime Text で該当ファイルが開ければ成功です。

No.1333
03/31 13:54

edit

IMAPコマンドでサーバへ接続して不要なフォルダを削除する

● IMAPでサーバへ接続しログインする

openssl を使ってサーバへ接続

openssl s_client -connect YOUR-SERVER-TLD:993

ログインの実行(「YOUR@SERVER.TLD」「YOUR-PASSWORD」は適宜書き換えてください)

? login YOUR@SERVER.TLD  YOUR-PASSWORD

(先頭の 「?」 の文字は 何でもいいです(A01 とかでもOK))

● メールボックス一覧を表示

? list "" "*"

● メールボックス(フォルダ)を選択

"INBOX" を選択

? select "INBOX"

"INBOX.Sent" を選択

? SELECT "INBOX.Sent"

● フォルダ「"INBOX.[Airmail].Memo"」を削除する

? DELETE "INBOX.[Airmail].Memo"

NO Cannot delete currently-open folder. で削除できない場合は、あなたは今そのフォルダの中にいます。
一度別の inbox を select してから削除してください。

● サーバーからログアウトする

? LOGOUT

参考: http://util.systemix.ne.jp/docs/101.html

No.1320
10/23 12:16

edit

vimのカラーをmolokai に設定する

vimのカラーを人気の molokai に設定する

次のコードを一括コピペでターミナルに貼り付ければOKです。

mkdir ~/.vim
cd ~/.vim
mkdir colors
git clone https://github.com/tomasr/molokai
mv ~/.vim/molokai/colors/molokai.vim ~/.vim/colors/
echo "colorscheme molokai" >> ~/.vimrc
cd
No.1296
10/02 14:07

edit

unix(Linux)でポートの空きを確認する netcat (nc) コマンド

● netcat (nc)のインストール

コマンドがない場合は以下のようにインストールしましょう。CentOS の場合は以下のコマンドでインストールできます。

sudo yum install -y  netcat

● ホスト 192.168.33.10 の 10〜80番で空いているポートを調べる。

 nc -v -z 192.168.33.10 20-80

結果例

例:(80番ポートが空いている場合)

Connection to 192.168.33.10 port 80 [tcp/http] succeeded!

例:(20079番ポートが空いていない場合)ファイアーウォールで却下された可能性がある場合

nc: connectx to 192.168.33.10 port 20079 (tcp) failed: Connection refused

例:(20079番ポートが空いていない場合)そもそもこのマシンのポートが開いていない可能性がある場合

nc: connectx to 192.168.33.10 port 20079 (tcp) ailed: Operation timed out
No.1263
11/04 11:06

edit

コマンドラインからFTPでファイルを取得する(ftp , curl)

● curl コマンドでftpサーバからファイルを取得する

1行で書けるのでオススメです。
ヒストリにパスワードが残ってしまうのでヒストリ削除を忘れないように。

例:ftpサーバの /test.txt をダウンロードします。

curl -O -u ID:PASS ftp://YOUR-SERVER.COM/test.txt

● ftp コマンドでファイルを取得する

ftp YOUR-SERVER.COM
ID
PASS
ls
get test.txt
No.1210
04/20 11:46

edit

シンボリックリンクの代わりに mount -o bind オプションを使用する

● mount の -o bind オプションを利用しシンボリックリンクの代わりにする

chroot する時によく使用します。

例:「/bin」を「/root/myfolder/bin/」としても使用できるようにする

cd /root
mkdir myfolder
mkdir myfolder/bin
mount -o bind /bin /root/myfolder/bin/

例:「/lib64」を「/root/myfolder/lib64」としても使用できるようにする

mount -o bind /lib64 /root/myfolder/lib64

● mount でマウントされたディスクやディレクトリの一覧を表示する

mount

結果例

/dev/mapper/VolGroup-lv_root on / type ext4 (rw)
proc on /proc type proc (rw)
sysfs on /sys type sysfs (rw)
devpts on /dev/pts type devpts (rw,gid=5,mode=620)
tmpfs on /dev/shm type tmpfs (rw,rootcontext="system_u:object_r:tmpfs_t:s0")
/dev/xvda1 on /boot type ext4 (rw)
none on /proc/sys/fs/binfmt_misc type binfmt_misc (rw)
none on /proc/xen type xenfs (rw)
/etc/named on /var/named/chroot/etc/named type none (rw,bind)
/var/named on /var/named/chroot/var/named type none (rw,bind)
/etc/named.rfc1912.zones on /var/named/chroot/etc/named.rfc1912.zones type none (rw,bind)
/etc/rndc.key on /var/named/chroot/etc/rndc.key type none (rw,bind)
/usr/lib64/bind on /var/named/chroot/usr/lib64/bind type none (rw,bind)
/etc/named.iscdlv.key on /var/named/chroot/etc/named.iscdlv.key type none (rw,bind)
/etc/named.root.key on /var/named/chroot/etc/named.root.key type none (rw,bind)

後ろの(rw,bind)のように bind がついているものが bind オプションで作成されたものです。

● umount でマウントされたディスクやディレクトリを解除する

umount <ディレクトリ名>

またはマシンを再起動すると自分で mount したディレクトリは解除されます。

● mountコマンドの注意点

すでに存在するディレクトリ(例えば /bin/ )に別のディレクトリをマウントすることもできます。
これをしてしまった場合、詰みますので、速やかにマシンをリブートしてください。

● ldd コマンドで必要なライブラリを表示させる

例えば /bin/bash コマンドを使用したい場合は次のファイルも使用できる状態でないといけません

ldd /bin/bash

結果

	linux-vdso.so.1 =>  (0x00007fff29d52000)
	libtinfo.so.5 => /lib64/libtinfo.so.5 (0x00007feb46d7b000)
	libdl.so.2 => /lib64/libdl.so.2 (0x00007feb46b77000)
	libc.so.6 => /lib64/libc.so.6 (0x00007feb467e3000)
	/lib64/ld-linux-x86-64.so.2 (0x00007feb46f9c000)
No.1209
04/20 15:32

edit

sshを自動タイムアウトしないようにする

● sshを自動タイムアウト(自動切断)しないようにする

~/.ssh/config を編集します

vi ~/.ssh/config

自動応答を15秒おきに送信するようにします( デフォルトは 0 )

ServerAliveInterval 15
No.1208
03/31 13:44

edit

dig コマンドで DNS,WWW,MX(メール)サーバを調べる

● dig コマンドで DNS,WWW,MX(メール)サーバを調べる

● 1.MXレコード(そのドメインのメールサーバ)を調べる /【dig mx】

dig mx yahoo.co.jp

実は オプションは最後でも同じです。(こちらの方がヒストリから違うレコードを見たいときに便利です)

dig yahoo.co.jp mx

● 2.TXTレコード(spfレコード)を調べる /【dig txt】

dig txt yahoo.co.jp

なお SPF レコード記述例は ↓ このように記述します

例 1. IPアドレス 「123.123.123.123」を登録

v=spf1 +ip4:123.123.123.123 ~all

例 2. IPアドレス 「123.123.123.123」とサーバ「outra.server.tld」を登録

"v=spf1 ip4:123.123.123.123 include:outra.server.tld ~all"

● 3.Aレコードを調べる /【dig a】

dig a yahoo.co.jp

または a を省略して

dig yahoo.co.jp

でも同じです。

● 4.NSレコードを調べる /【dig ns】

dig ns yahoo.co.jp

● 5.全てのレコードを一括で調べる /【dig any】

dig any yahoo.co.jp

● 6.IPアドレスからドメインを逆引きする /【dig -x】

dig -x 182.22.59.229

● 7.DNSサーバを指定してドメイン調べる /【dig @DNSサーバ名】

dig a yahoo.co.jp @ns02.yahoo.co.jp

● 8.名前解決の流れをトレースする /【dig ドメイン名 +trace】

dig yahoo.co.jp +trace

● 9.(digコマンドではないですが)自分のマシンが使用しているネームサーバを調べる

cat /etc/resolv.conf

● .digrc にオプションのデフォルトを設定する

cat .digrc
+noedns
No.1195
04/16 11:35

edit

touchコマンドでファイルの日付を変更する

● touchコマンドでファイル【 my_file 】の日付を その年の 02/07 15:00 変更する

touch の -t オプションでは 年を省略して 「月」「日」「時」「分」を2桁ずつ指定することができます。

touch -t 02071500 my_file

● touchコマンドでファイル【 my_file 】の日付を 2019年の 02/07 15:00 変更する

touch の -t オプションでは 年を指定したい場合は「年」 「月」「日」「時」「分」を2桁ずつ指定します。

touch -t 1902071500 my_file

● touchコマンドでファイル【 my_file 】の日付を 現在時刻に 変更する

-t オプションを指定しないと現在時刻が設定されます

touch my_file
No.1194
02/19 14:46

edit

UNIXのシェルである日付以降のすべてのファイルを検索する

● 起点となるファイルを指定して、そのファイルの更新日以降に更新されたファイルを表示させる

1. 起点となるファイル(ファイル名はなんでもOK。例:datefile)を 作成する

・現在の日付で 起点となるファイル「datefile」を作成する

touch datefile

・特定の日付(2018/2/14)で起点となるファイル「datefile」を作成する

touch -m -d '2018/2/14 00:00:00' datefile

・FreeBSDの場合は次のようにして作成してから日付を変更する

touch datefile
touch -t 201802140000  datefile 

・Macの場合は -t オプションを使用して 日付を指定して中身が空のファイルを作成する

touch -t 201802140000 datefile

2. findコマンドで起点となるファイルを指定して検索

find . -type f -newer datefile

3. 更新があったファイルをコピーする

*(1. Linuxの場合)updated_files に更新ファイルをコピーします。

mkdir updated_files
find . -type f -newer datefile -print0 |xargs -0 cp --parents -t ./updated_files

cp コマンドオプションの説明( Linux )

--parents  ディレクトリ 階層もコピーする
-t ターゲットディレクトリ 

*(2. FreeBSDの場合)FreeBSDの場合は cp --parents が使用できないので次のように記述します

mkdir updated_files
find . -type f -newer datefile -exec cp {} updated_files \;

find -exec コマンドオプションの説明( FreeBSD )

-exec  コマンドを実行する
{}  全てのファイルが対象
\;  コマンドの区切り文字(必ずつける)

 引用:https://blog.hello-world.jp.net/linux/1255/

No.1193
02/14 11:31

edit

(sshなどの)ログインシェルを確認し、変更する

● ログインシェルを確認する

cat /etc/passwd 

● ログインシェルを変更する

・1. まず変更したいシェルコマンドのパスを調べます。

whereis bash

結果表示例

bash: /usr/local/bin/bash /usr/local/man/man1/bash.1.gz

・2. ログインシェルを変更します

chsh -s /usr/local/bin/bash
No.1189
01/14 17:47

edit

crontabを使わずにシェルコマンドを定期的に連続実行する

● crontabを使わずにシェルコマンドを定期的に連続実行する

例 : 定期的 10分(600秒) にあるサイトにアクセスします

#/bin/bash

function exec_curl(){
    TARGET_URL=$1
    curl ${TARGET_URL}
}

# テスト用
while true;
do
    exec_curl http://xxx.yyy.zzz/
    echo
    echo
	date
    sleep 600
done
No.1129
04/17 10:00

edit

zsh 便利な設定

・Mac でも Linux でも一発でクリップボードにコピーする zsh の alias

http://mollifier.hatenablog.com/entry/20100317/p1

・bashからzshに変更した時に設定したこと。

https://gist.github.com/shuuheyhey/5845703

No.1126
04/14 10:27

edit

unixマシンの情報を見るコマンド

# cat /proc/cpuinfo                  # CPU model
# cat /proc/meminfo                  # Hardware memory
# grep MemTotal /proc/meminfo        # Display the physical memory
# watch -n1 'cat /proc/interrupts'   # Watch changeable interrupts continuously
# free -m                            # Used and free memory (-m for MB)
# cat /proc/devices                  # Configured devices
# lspci -tv                          # Show PCI devices
# lsusb -tv                          # Show USB devices
# lshal                              # Show a list of all devices with their properties
# dmidecode                          # Show DMI/SMBIOS: hw info from the BIOS

引用 : http://cb.vu/unixtoolbox.xhtml

No.1100
03/08 12:36

edit

unixのユーザーが現在所属しているグループを確認する。また所属グループを変更する

● 現在の所属グループを確認する

id -a

uid=1002(ftpuser) gid=1002(ftpuser) groups=1002(ftpuser),1000(www)

所属グループ【ftpuser】【www】であることがわかります

● 一時的に現在の所属グループ(プライマリグループ)を変更する

newgrp グループ名

● ユーザーのデフォルトのプライマリグループを設定する

root ユーザでないと実行できません
例 ) ユーザ「ftpuser」のプライマリグループを「www」に設定する。(セカンダリグループは削除されます)

usermod -g www ftpuser

● ユーザーのセカンダリグループを設定する

(指定しないセカンダリグループは削除されます。所属したいグループ全てをカンマで区切って指定します)

usermod -G mygroup1 , mygroup2  ftpuser
No.1099
03/07 22:51

edit

tar 圧縮(tarコマンドでファイルやディレクトリを圧縮 / 解凍)

● tarコマンドによる圧縮( tar.gzファイルを作成する )

tar -zcvf xxxxx.tar.gz directory_name

● tarコマンドによる解凍( tar.gzファイルを解凍する )

tar -zxvf xxxxx.tar.gz

上記コマンドで解凍すると、カレントディレクトリ(現在いるディレクトリ)下に解凍されます。
特定のディレクトリ下に解凍するには -C オプションを使用します。

● ディレクトリを指定して tarコマンドによる解凍( 指定したディレクトリに tar.gzファイルを解凍する )

test ディレクトリの下に(圧縮したもとのディレクトリを作成して)解凍します。testディレクトリがない場合はエラーとなります。

tar -zxvf xxxxx.tar.gz  -C /var/test

● ZIPファイルの解凍は unzip コマンドを使用します

unzip file_name
No.1096
12/13 12:04

edit

unixコマンドで x日前のファイルを削除する

● x日前のファイルを調べる

testディレクトリ以下の 3日前より古いファイルを検索するコマンドは

find ./test/* -mtime +3 

とします。

● x日前のファイルを削除する

testディレクトリ以下の 3日前より古いファイルを削除するコマンドは

find ./test/* -mtime +3 -exec rm -f {} \; 

とします。

No.1073
12/31 13:45

edit

ファイル

unixであるディレクトリ以下のすべてのファイルを再帰的に権限変更(chmod)する

unixであるディレクトリ以下のすべてのファイルを再帰的に権限変更(chmod)するには以下のようにパイプを使って流し込みます

カレントディレクトリ以下のすべてのファイルの権限を(0666)にする

find ./ -type f -print0 | xargs -0 chmod 0666

カレントディレクトリ以下のすべてのディレクトリの権限を(0777)にする

find ./ -type d -print0 | xargs -0 chmod 0777

カレントディレクトリ以下のすべての( .log )ファイルの権限を(0666)にする

find . -name "*.log" -type f -print0  | xargs -0 chmod 0666

カレントディレクトリ以下のすべての .sqlite3 ファイルの権限を(0666)にする

find . -name "*.sqlite3" -type f -print0  | xargs -0 chmod 0666

find に `-print0xargsに-0` をつけることによってスペースを含むファイルも処理できるようにしています

・カレントディレクトリ以下のすべての templates_c ディレクトリの権限を(0777)にする

find ./ -name templates_c -type d -print | xargs chmod 0777

・カレントディレクトリ以下のすべての cache ディレクトリの権限を(0777)にする

find ./ -name cache -type d -print | xargs chmod 0777
No.1064
12/31 13:44

edit

ファイル

Linux , FreeBSD のマシンのOSの種類とバージョンとCPUの種類を調べる

UNIX系OS(Linux, FreeBSD)のOS種別とバージョンを確認するコマンドは以下のものがあります。

● os-release をみる

cat /etc/os-release

● unameコマンド

uname -a

結果例

Linux desktop 2.6.32-28-generic #55-Ubuntu SMP Mon Jan 10 23:42:43 UTC 2011 x86_64 GNU/Linux

● /etc/redhat-release を見る

cat /etc/redhat-release

結果例

CentOS Linux release 7.2.1511 (Core)

● /proc/version

cat /proc/version

結果例

Linux version 2.6.18-400.1.1.el5PAE (mockbuild@builder17.centos.org) (gcc version 4.1.2 20080704 (Red Hat 4.1.2-55)) #1 SMP Thu Dec 18 01:38:34 EST 2014

● CPUの種類を調べる

cat /proc/cpuinfo
No.938
08/14 09:42

edit

テキストファイルから重複行を削除するコマンド【uniq】

テキストファイルから重複行を削除するには

エクセル等で作業する方が多いみたいですが、unixコマンド一発です。

uniq ファイル名 

重複行が削除されたテキストが画面上に表示されます。

結果をファイルに保存したい場合は

uniq ファイル名  > 保存するファイル名

でOK。

No.739
07/29 13:55

edit

ファイル

ログイン状況を表示する who last lastlogin

ログイン状況を確認するコマンド群

現在ログインしている全てのユーザーを見る

who

ログイン履歴、ホスト名を表示

last -a

最終ログイン時刻、ホスト名を表示

lastlog


No.639
11/19 14:12

edit

ユーザー

一時的にroot(または別ユーザー)権限でコマンドを実行する sudo の設定

sudo は一時的に別のユーザーになってコマンドを実行するコマンドです。

このsudoを設定するコマンドがvisudoです。

【hoge】 ユーザーが コマンド【/usr/bin/testcommand】をパスワードなしで実行できるようにするには

sudo の設定

(root) ユーザーになって

visudo

を実行します。(エディタ vi が起動します。)

一番下に

hoge ALL=(ALL) NOPASSWD: /usr/bin/testcommand

と記述します。これだけで設定完了です。

なお全てのコマンドを sudo で実行できるようにするには

hoge ALL=(ALL) NOPASSWD: ALL

と記述します。

コマンドの実行

実行は(hoge)ユーザーになって

sudo /usr/bin/testcommand

とするとrootユーザーが上記コマンドを実行したことになります。

apacheユーザーなど 非シェルログインユーザーがsudoを実行できるようにするには

visudo を実行して

# Defaults    requiretty

と「Defaults requiretty」の先頭にシャープをつけてコメントアウトします。

するとシェルにログインできないユーザーでもsudoを実行することが出来ます。

( PHPから sudo をする場合にはこの設定を行った後下記リンクのように設定します )

参考:http://hogehack.blog80.fc2.com/blog-entry-36.html

No.631
11/19 14:14

edit

ユーザー

diff(ファイル比較コマンド)の結果を色付けして見やすくする 【colordiff】

● diff(ファイル比較コマンド)の結果を色付けして見やすくする 【colordiff】

colordiffというdiff(ファイル比較コマンド)の結果に色を付けるコマンドがあり、なかなか便利なので導入してみます。

● colordiffのインストール

Linuxの場合 : インストールは yumコマンド一発

yum install colordiff

Mac OSの場合 : インストールは brewコマンド一発

brew install colordiff

● 使い方1( diffコマンドの代わりとして使用する )

colordiff ファイル1 ファイル2

● 使い方2 ( パイプとして使用する )

cat diff_result.txt | colordiff

● 色の設定の仕方

色の設定ファイルは /etc/colordiffrc というファイルなのでこれをホームディレクトリの .colordiffrc というファイルにコピーして使用する

cp /etc/colordiffrc ~/.colordiffrc

中身はこんな感じ

banner=no
plain=black
newtext=darkblue
oldtext=darkred
diffstuff=darkgreen
cvsstuff=darkwhite
No.529
08/12 10:13

edit

ファイル

あいまい検索コマンド【agrep】を使用する。

曖昧検索を行うコマンド「agrep」 というのがあるが、標準ではインストールされていない事がある。

のでまず「yum」コマンドを使ってインストール(Fedora Coreの場合)

yum install agrep

インストールが完了したら

whereis agrep

で確認。

■ agrepの使い方(普通の検索)

agrep wordtest /usr/share/dict/words

単語「wordtest」が /usr/share/dict/words にあるかどうか検索する。(普通の検索)

■ agrepの使い方(あいまい検索)

agrep -1 wordtest /usr/share/dict/words

単語「wordtest」に1文字分の間違いを許容した範囲で検索する。(あいまい検索)

■ agrepの使い方(あいまい検索 Best-match)

agrep -i -y -B wordtest /usr/share/dict/words

オプション -B をつけると一番近いと思われる単語を検索する

No.449
04/19 12:13

edit

ファイル

複数のファイルのファイル名(拡張子)を一括で変更する。

UNIXでのファイル名変更コマンドは

mv file1.cgi file1.txt

(file1.cgi を file1.txt という名前に変更する)

ですが、これを一括でしようと思って

mv *.cgi *.txt

としてもエラーとなります。

そこで for文 を使って

for fname in *.cgi; do
mv $fname ${fname%.cgi}.txt;
done

とします

参考:http://www.atmarkit.co.jp/flinux/rensai/linuxtips/248chngext.html

No.418
04/19 12:10

edit

ファイル

SSHを通して外部サーバーから安全にCVS使う

・1. 環境変数 CVS_RSHを設定する。

bashの場合

export CVS_RSH=ssh

tcshの場合

setenv CVS_RSH ssh

・2. CVSコマンドを実行する

cvs -d hogehoge@myhost.com:/home/hogehoge/CVSROOT checkout projectname

ユーザー名:hogehoge

ホスト名:myhost.com

CVSディレクトリ:/home/hogehoge/CVSROOT

プロジェクト名:projectname

No.381
04/11 10:40

edit

シェル

ユーザーを追加する

■1.「testuser」というユーザーを追加するには次のコマンドを使用する

(シェル(ssh telnet)でのログインをさせない場合)

useradd -s /sbin/nologin testuser

(シェル(ssh telnet)でのログインをさせる場合)

useradd testuser

■2. 次に作成した「testuser」ユーザーのパスワードを設定する

passwd testuser

No.353
04/19 12:15

edit

ユーザー

あるディレクトリ以下の合計ファイル数を再帰的に知るunixコマンド

macやunixのターミナルであるディレクトリ以下の合計ファイル数を知るには

● 合計ファイル数:

ls -laR | grep -c '^-'

● 合計ディレクトリ数:

ls -laR | egrep -c '^d.+[^.]$'

でいけます。

なおディレクトリ以下に作成するファイル数は 5000以内 にとどめておいたほうがでしょう。

関連: ファイル・ディレクトリ容量やディスクの空き容量を取得する http://logic.moo.jp/memo.php/archive/97/

No.336
06/27 11:59

edit

ファイル

形態素解析ソフト「mecab」をMacにインストールして使ってみる

● mecabのダウンロード

http://taku910.github.io/mecab/#download
「mecab-0.996.tar.gz」(mecab本体)
「mecab-ipadic-2.7.0-20070801.tar.gz」(辞書ファイル)
をダウンロードする。

● mecabのインストール

形態素解析mecabのソースファイルをダウンロード
http://taku910.github.io/mecab/#download

tar xvf mecab-0.996.tar.gz
cd mecab-0.996
./configure --enable-utf8-only --prefix=/opt/local/
make
sudo make install

● 辞書のインストール

( --with-charset=utf8 で文字コードをutf8にしている)
( --prefix=/opt/local/ でインストール先を指定している)

tar xvf mecab-ipadic-2.7.0-20070801.tar.gz
cd mecab-ipadic-2.7.0-20070801
./configure  --with-mecab-config=/opt/local/bin/mecab-config --with-charset=utf8 --prefix=/opt/local/
make
sudo make install

● パスの追加(/opt/local/bin を追加します)

echo 'export PATH=/opt/local/bin:$PATH' >> ~/.bash_profile
source .bash_profile

● mecabの使い方

mecab

で mecabを起動する。

後は解析したい日本語を入力するだけ。

ダチョウ倶楽部のメンバーは肥後克広と寺門ジモンと上島竜兵である。
ダチョウ	名詞,一般,*,*,*,*,ダチョウ,ダチョウ,ダチョー
倶楽部	名詞,一般,*,*,*,*,倶楽部,クラブ,クラブ
の	助詞,連体化,*,*,*,*,の,ノ,ノ
メンバー	名詞,一般,*,*,*,*,メンバー,メンバー,メンバー
は	助詞,係助詞,*,*,*,*,は,ハ,ワ
肥後	名詞,固有名詞,人名,姓,*,*,肥後,ヒゴ,ヒゴ
克広	名詞,固有名詞,人名,名,*,*,克広,カツヒロ,カツヒロ
と	助詞,並立助詞,*,*,*,*,と,ト,ト
寺門	名詞,固有名詞,人名,姓,*,*,寺門,テラカド,テラカド
ジモン	名詞,固有名詞,人名,名,*,*,ジモン,ジモン,ジモン
と	助詞,並立助詞,*,*,*,*,と,ト,ト
上島	名詞,固有名詞,人名,姓,*,*,上島,ウエシマ,ウエシマ
竜	名詞,固有名詞,人名,名,*,*,竜,リュウ,リュー
兵	名詞,接尾,一般,*,*,*,兵,ヘイ,ヘイ
で	助動詞,*,*,*,特殊・ダ,連用形,だ,デ,デ
ある	助動詞,*,*,*,五段・ラ行アル,基本形,ある,アル,アル
。	記号,句点,*,*,*,*,。,。,。

● MeCab 用の新語辞書ファイル「mecab-ipadic-neologd」を追加する

brew install xz
git clone --depth 1 https://github.com/neologd/mecab-ipadic-neologd.git
cd mecab-ipadic-neologd
./bin/install-mecab-ipadic-neologd

なお、デフォルトでは一部の辞書はインストールされませんので 、全部入りな mecab-ipadic-NEologd をインストールするには

./bin/install-mecab-ipadic-neologd -n -a

とします。

インストールされた辞書は次のコマンドで確認することができます

echo `mecab-config --dicdir`"/mecab-ipadic-neologd"

● 使い方( -d オプションで辞書を指定する)

インストールされた辞書の場所を調べた後次のように実行します

mecab -d /opt/local/lib/mecab/dic/mecab-ipadic-neologd
ダチョウ倶楽部のメンバーは肥後克広と寺門ジモンと上島竜兵である。
ダチョウ倶楽部	名詞,固有名詞,人名,一般,*,*,ダチョウ倶楽部,ダチョウクラブ,ダチョークラブ
の	助詞,連体化,*,*,*,*,の,ノ,ノ
メンバー	名詞,一般,*,*,*,*,メンバー,メンバー,メンバー
は	助詞,係助詞,*,*,*,*,は,ハ,ワ
肥後克広	名詞,固有名詞,人名,一般,*,*,肥後克広,ヒゴカツヒロ,ヒゴカツヒロ
と	助詞,並立助詞,*,*,*,*,と,ト,ト
寺門ジモン	名詞,固有名詞,人名,一般,*,*,寺門ジモン,テラカドジモン,テラカドジモン
と	助詞,並立助詞,*,*,*,*,と,ト,ト
上島竜兵	名詞,固有名詞,一般,*,*,*,上島竜兵,ウエシマリュウヘイ,ウエシマリューヘイ
で	助動詞,*,*,*,特殊・ダ,連用形,だ,デ,デ
ある	助動詞,*,*,*,五段・ラ行アル,基本形,ある,アル,アル
。	記号,句点,*,*,*,*,。,。,。
EOS

しっかり固有名詞 肥後克広 , 寺門ジモン , 上島竜兵 が登録されています 



● コマンドラインからmecabを使う

コマンドラインからmecabを使う1つの方法として do_mecab というシェルスクリプトを作成する。
/opt/local/bin/do_mecab というファイルを下記の内容で作成する

sudo vi /opt/local/bin/do_mecab
#! /bin/sh
echo $*|/opt/local/bin/mecab -d /opt/local/lib/mecab/dic/mecab-ipadic-neologd

作成後実行権限を与える

chmod 755 do_mecab

これで

do_mecab ダチョウ倶楽部のメンバーは肥後克広と寺門ジモンと上島竜兵である。

で実行できる。

No.322
05/10 16:30

edit

popコマンドを使ったメール受信方法

● telnetでサーバ(servername.com)のポート110番と通信する。

telnet servername.com 110

● popコマンドを使ってログインする

USER hoge

+OK Password required.と表示されるので続けてパスワードを入力する

PASS password

+OK logged in.と表示されればログイン成功。

● メールサーバ上に保存されているメールの総数とサイズを知るには

STAT

+OK 512 99312506 と返されてきた場合【512通】【99312506バイト(99M)】メールサーバに保存されている。

各メールごとのサイズを知るには

LIST

1 702 2 702 3 1207 ……(以下続く)なお番号は古い順

●メールを受信するには(番号15のメールを受信する)

RETR 15

● POPサーバから接続を解除する

QUIT
No.311
04/03 13:36

edit

メール

crontab の書き方

● unixマシンで定期的自動実行( cron )を行う

crontab -e

でcronの設定ファイルを編集する。 (上記コマンドでviが立ち上がるのでviの操作に慣れておく必要がある)

設定ファイルに記述する内容は

45 04 * * * /var/test/cron.autoexec.sh

という風に記述する。
上記記述では毎日4時45分に【/var/test/cron.autoexec.sh】というファイルを実行する。
当然【/var/test/cron.autoexec.sh】には実行権限が必要。
左側の数字は
」「 」「 」 「」 「曜日」を表してて、表記方法は下記の例を参照
例;

30  * * * *				毎自 30分に実行
43 23 * * *				毎日 23:43に実行
12 05 * * *				毎日 05:12に実行
0  17 * * *				毎日 17:00に実行
0  17 * * 1             毎週月曜の 17:00に実行
0,10 17 * * 0,2,3         毎週日,火,水曜の 17:00と 17:10に実行
0-10 17 1 * *             毎月 1日の 17:00から17:10まで 1分毎に実行
0 0 1,15 * 1              毎月 1日と 15日と 月曜日の 0:00に実行
42 4 1 * *              毎月 1日の 4:42分に実行
0 21 * * 1-6            月曜日から土曜まで 21:00に実行
0,10,20,30,40,50 * * * * 10分おきに実行
*/10 * * * *        10分おきに実行
* 1 * * *         1:00から 1:59まで 1分おきに実行
0 1 * * *         1:00に実行
0 */1 * * *        毎時 0分に 1時間おきに実行
0 * * * *         毎時 0分に 1時間おきに実行
2 8-20/3 * * *      8:02,11:02,14:02,17:02,20:02に実行
30 5 1,15 * *       1日と 15日の 5:30に実行

● crontab設定の確認

crontab -l

なお実行結果は `/var/log/cron` に記録されていきますので以下のコマンドで確認します

cat /var/log/cron
No.306
03/21 18:32

edit

kakasi に辞書を追加する。

1. 最新版の kakasi をダウンロード( http://kakasi.namazu.org/ )し

辞書の元ファイル(kakasidict)をアップロードしておく.

(アップロードファイル)kakasidict
(アップロード先)/usr/local/share/kakasi/

2. 「kakasi_dictionary_artist.txt(例)」というファイルに追記していく

例:(最初にひらがな、次に半角スペース、次に漢字)

文字コード【EUC】改行コード【LF】

よみ 漢字

3. ディレクトリ移動と辞書ファイルのバックアップ

cd /usr/local/share/kakasi/ (ディレクトリ移動)
cp kanwadict  kanwadict.backup(辞書ファイルのバックアップ)

4. 辞書追加コマンド(mkkanwa)を実行

「mkkanwa 辞書ファイル 元ファイル 追加ファイル」

/usr/local/bin/mkkanwa  kanwadict  kakasidict  kakasi_dictionary_artist.txt

No.295
04/21 10:27

edit


viでよく使うキーコマンド(キーボードショートカット)

■ モードの移動

([esc]を押すとコマンドモードへ)

([a]または[i]を押すとファイル編集モードへ)

[esc] <-> [a]または[i]

■ ファイル関係(コマンドモードから実行する)

[:q!]  :ファイルを保存せずに終了
[:wq] :ファイルを保存して終了

■ カーソル移動(コマンドモードから実行する)

[1G] :ファイルの先頭に移動
[G]   :ファイルの末尾に移動
[ctrl+f] :1ページ下へ移動
[ctrl+b] :1ページ上へ移動
[/] :下に向かって文字列検索
[?] :上に向かって文字列検索
No.290
08/08 14:23

edit


文字コードを変換するコマンド【iconv】

■1. まず 変換可能な文字コードを調べる

iconv -l

(ここで表示された文字コードのみ変換対象となるので事前に確認する)

■2. 次にコマンドを実行する

(EUC-JPで書かれたファイルin.txt)を(SHIFT_JISのout.txt)に変換する

iconv -f EUC-JP -t SHIFT_JIS < in.txt > out.txt

オプション

  • f:fromcode 変換元の文字コードを指定する
  • t:tocode  変換先の文字コードを指定する

No.282
03/30 15:38

edit


kakasi を使ってみる

kakasiをインストール(管理者権限のユーザで行う)

http://kakasi.namazu.org/stable/kakasi-2.3.4.tar.gz をダウンロード
tar zxvf kakasi-2.3.4.tar.gz
cd kakasi-2.3.4
./configure
make
make install

kakasiを使ってみる

kakasi -w とすると入力受付モードでkakasiが起動する。
何か適当な文章を入力してみる
(例)
長い長い文章入力のテスト隣の客はよく柿食う客だ
長い 長い 文章 入力 の テスト 隣 の 客 はよく 柿 食う 客 だ

kakasiをコマンドライン一行で使ってみる

echo 隣の客はよく柿食う客だ | kakasi -Ja
tonariのkyakuはよくkakikuukyakuだ
(-Ja 漢字(J)をローマ字(a)に変換)

変換のオプションは

a: ascii

j: jisroman

g: graphic

k: kana (j,k defined in jisx0201)

E: kigou

K: katakana

H: hiragana

J: kanji(E,K,H,J defined in jisx0208)

例 -KH とするとカタカナをひらがなに変換する

echo カタカナニュウリョクノテストッス | kakasi -KH
(出力結果)かたかなにゅうりょくのてすとっす

-w オプションを付けるとわかち書きモードになる

echo 細野晴臣 | kakasi -w | kakasi -Ja
(出力結果)hosono haruomi
No.278
08/08 14:26

edit


alias を使ってコマンドの別名を設定する

例えば一般的に

【ll】というコマンドは【ls -l】のエイリアスであることが多い。

この設定をするのが

alias

とすると現在設定されているエイリアスの一覧を表示する。

エイリアスを設定するには

alias ll='ls -la --color=tty'

とする(bashの場合)

これで【ll】が【ls -la --color=tty】に変更される。

No.277
04/19 12:18

edit

ファイル

バックアップコマンド rsync

外部サーバにバックアップをとるコマンド rsync

あらかじめ外部サーバに ssh でパスワード無しで接続できるよう設定しておく必要がある。

(SSHをパスワード無しで接続する↓)

http://logic.moo.jp/memo.php/archive/250

rsync コマンド例

rsync -avzL --delete -e ssh  /home/mydata  user@hostname.com:/var/www/backup

バックアップ元サーバの【/home/mydata】以下を全て

バックアップ先サーバ(user@hostname.com)の【/var/www/backup】以下に

バックアップを作成する。

  • a    :全てのデータをコピーする
  • v    :転送状態を表示する
  • z    :圧縮して転送します
  • L    :(シンボリックリンクを解決して)リンク先のファイルを転送する
    • delete :バックアップ元で削除されたファイルはバックアップ先でも削除する
  • e ssh  :sshを使って転送する

(参考)

http://www.infoscience.co.jp/technical/rsync/rsync.html

No.252
11/30 17:39

edit

ファイル

No.208
04/21 10:27

edit


システムの連続起動時間を表示する uptime

システムの連続起動時間を表示するには下記のコマンドを実行する

uptime
# 現在時刻 稼働時間	ログインユーザー数 ロードアベレージ
12:20:24 up 16:59,  2 users,  load average: 0.00, 0.02, 0.00
No.204
04/19 12:26

edit


UNIXマシンの再起動コマンド

今すぐUNIXマシンを再起動するには

shutdown -r now

No.203
04/19 12:31

edit


自動起動サービスのチェックと停止 chkconfig

自動起動サービス一覧の表示

chkconfig -list

自動起動から削除

chkconfig サービス名 off

自動起動に追加

chkconfig サービス名 on

No.201
05/10 19:31

edit

プロセス

No.199
04/14 15:46

edit


プロセス管理コマンドでマシンの使用メモリを知る free ps pstree top

free

で手っ取り早く見れる。

詳しく見る場合は

ps aux 

で全てのプロセスを表示する

【SIZE】仮想分も含めた使用サイズ(Kバイト)

【RSS】実メモリ上の使用サイズ(Kバイト)

らしい。いわゆるメモリの使用量を見るには【RSS】か。

なおプロセスID【PID】は99999 まで行くと戻る(使用可能な最小値に?)という事らしい。

top

は 2秒毎にプロセス状態を調べる。

メモリ総使用量が上に表示されるのでここをチェックする。

ほっておくとずっと起動し続けているので【q】を押して終了する。

参考:

http://www.math.kobe-u.ac.jp/~kodama/tips-free-memory.html

http://www.itmedia.co.jp/help/tips/linux/l0158.html


No.138
08/08 14:27

edit

メモリ

ユーザー管理コマンド

gpasswd:(グループにパスワードを設定する)

groupadd:新規グループの作成

groupdel:グループの削除

groupmod:グループ情報の変更

passwd:ユーザーパスワードの変更

useradd:ユーザーアカウントの新規作成

userdel:ユーザーアカウントの削除

usermod:ユーザーアカウント情報の変更


ユーザの所属するグループを見るには

id  (ユーザ名)
No.106
04/19 12:35

edit

ユーザー

ImageMagick コマンドの使い方

convert (1つのファイルに対して操作したいとき)

mogrify(複数のファイルに対して操作したいとき)

# in.jpg を jpeg 画質80 の out.jpg に変換する
convert -quality 80 in.png out.jpg

No.91
08/12 10:12

edit


MACアドレスを取得する

ifconfig で確認する
arp -a

No.87
01/23 14:50

edit


smtp, popプロトコルによるメール送信、受信

●SMTPサーバ 25番ポートへ接続してメールを送信する

SMTP(メール送信サーバ)への接続はtelnetを使用して下記のように入力する。

telnet your.host.name.jp 25

接続されたら次のように入力する

HELO hoge@test.test.com
MAIL FROM:hoge@test.test.com
RCPT TO:mail@test.test.com
DATA
mail honbun
.

終了するには次のコマンドを入力する

QUIT

● SMTP Authentication を使ってメールを送信する

まず SMTP Authentication用文字列を生成する ユーザー名:testuser パスワード:password の時シェルから以下のように入力

perl -MMIME::Base64 -e 'print encode_base64("testuser?0testuser?0password");'

生成された文字列

dGVzdHVzZXIAdGVzdHVzZXIAcGFzc3dvcmQ=

をコピーしておく。

telnet your.host.name.jp 587

でsmtpへ接続して

EHLO localhost
AUTH PLAIN dGVzdHVzZXIAdGVzdHVzZXIAcGFzc3dvcmQ=
235 2.0.0 OK Authenticated

と返れば成功。以下のコマンドは同じ

MAIL FROM:hoge@test.test.com
RCPT TO:mail@test.test.com
DATA
mail honbun
.

●POP3サーバへ接続してメールを受信する

POP3 サーバへの接続(メールの受信)

USER ユーザー名
PASS パスワード
LIST (※メール一覧を表示)
RETR xxx ( xxx番目のメールを表示 )
QUIT

● POP Before SMTP の確認

POP Before SMTP の許可IPアドレスを見るには SMTPサーバにシェルログインして root ユーザーから

makemap -u hash /etc/mail/popauth.db

とする

No.54
11/05 11:56

edit

メール

パッケージ管理コマンド「yum」

● パッケージをインストール

yum install パッケージ名

● パッケージの更新の確認

yum check-update

● パッケージの更新

yum update [ パッケージ名 ]

● パッケージの削除

yum remove [ パッケージ名 ]

● パッケージの検索

yum search [キーワード]

● インストール済みパッケージの表示

yum list installed

● パッケージの情報を表示

yum list [ オプション または パッケージ名 ](概要)
yum info [ オプション または パッケージ名 ](詳細表示)
オプション
available	インストール可能なパッケージの情報を一覧表示する。
installed	システムにインストールされているパッケージの情報を一覧表示する。
recent	最近追加されたパッケージの情報を一覧表示する。
updates	更新可能なパッケージの情報を一覧表示する。
No.52
06/11 11:14

edit

HTTPクライアントコマンド wget

■ wgetコマンド

wget -r -nc -l 5 -A htm,html,shtml,php,cgi  -nd -nH http://www.yahoo.co.jp/

[ オプション ]

  • r 再帰回収
  • nc 既にダウンロードしたファイルをスキップ
  • l 10 最大10階層まで下に潜る
  • A html,cgi 取得したいファイルの拡張子をカンマで区切って記述する
  • nd ディレクトリを作らない、すべてをカレントディレクトリにダウンロードする
  • nH ドメイン名のところのディレクトリを作らない
No.49
04/19 12:22

edit