コマンド&シェル」タグアーカイブ

Slypheedのメールをコマンドで作成

添付やアドレス等をバッチで設定して起動。あとFOR文のメモ有り。

ちょっと修正。変数にまとめた。
bodyの中で改行したかったけど、改行コードもダメだし、一旦保留。
あとconfigの設定も指定しないとダメだった。

相対パスのショートカットを作成

%windir%\System32\rundll32.exe url.dll,FileProtocolHandler “Sylpheed-3.5.1\sylpheed.exe”
として作業フォルダーを空白にする。

CURLで連番保存

curl -O “http://xxx.com/[0-20].pdf”

-O は表示ではなくファイル名そのまま。(ちなみにwgetで-Oは別名で保存)
-o は別名で保存する。
-L リダイレクトを追う。
-C – レジューム

wget

-c ダウンロードを続きから。
-t リトライ回数指定する。(0は無制限)
-O 別名で保存する。
–retry-connrefused 接続拒否無視

wget -c -t 0 –retry-connrefused xxx

nesh ネットワーク関連コマンドメモ

IPの自動取得
netsh interface ip set address “Wi-Fi” static dchp

IPの設定
netsh interface ip set address “Wi-Fi” static 192.168.102.5 255.255.255.0 192.168.102.1

DNSサーバの設定
netsh interface ip set dns “Wi-Fi” static 192.168.102.1 primary

DNSサーバの自動取得
netsh interface ip set dns “Wi-Fi” dhcp

6to4の無効化
netsh interface 6to4 set state disabled

ISTAPの無効化
netsh interface isatap set state disabled

TEREDOの無効化
netsh interface teredo set state disabled

設定の書き出し
netsh dump > xxx.txt

Ubuntu ユーザーの追加、設定、パーミッション

ユーザ関連

ユーザ一覧
getent passwd
less /etc/passwd

ユーザ情報
id xxx

グループ一覧
getent group
less /etc/group

グループに所属ユーザの確認
getent group xxx

グループの作成
groupadd wp

グループにユーザを追加
usermod -aG wp www-data

ログインユーザの所属グループ
groups
groups ユーザ名
でもOK

sudoできるユーザ
/etc/sudoer
Ubuntuの場合sudo、adminグループ

ubuntuではsudoグループがsudoできるグループ
adminというグループには誰も所属していない

ユーザ作成
>>sudo useradd inna

>>getent passwd | grep inna
inna:x:1001:1002::/home/inna:

>>sudo passwd inna
xxx

mオプションを付けないと、ホームディレクトは作成されない
sudo mkdir inna
sudo chown inna:inna /home/inna/
だけど、この場合、/etc/skelの内容がコピーされない

useradd -D
デフォルトの確認

ユーザの削除
userdel -r inna

mオプションでホームディレクトリの作成
(自動で、/etc/skelのコピーが入る)
sudo useradd -m inna

ログインできなユーザへ
sudo usermod -s /usr/sbin/nologin inna

ログインできるユーザへ
sudo usermod -s /bin/bash inna

参加するグループの変更
usermod -aG

パーミッション

chown -R xxx/xxx
で再帰的にユーザ、グループを全て変えられる。

d/rwx/r-x/r-x

o+xはカレントディレクトリにできる。
o-xすると、カレントにできず、内部のファイル、ディレクトにアクセスできない。
上の階層のパーミションの影響はxだけで大丈夫。xはアクセス権。

o+rはlsができる。
o-rにするとカレントではlsができないがサブのファイル、ディレクトリは指定できる。
(サブディレクトリへの影響はxのため)

o=wはファイル、ディレクトリを作れる。

inna/ — inna:inna d/rwx/r-x/r–
|–  a/ —inna:inna d/rwx/rwx/rxw
だと/inna/aでいけない。

inna/ — inna:inna d/rwx/r-x/–x
|– a/ — inna:inna d/rwx/rwx/rxw
だと/inna/aでいける。

もう一例

inna —inna:okamura rwx/—/–x
 |–test — okamura:okamura rwx/rwx/rwx
上記パーミッションで以下のアクセスできるか
c /home/inna/test – NG

inna —inna:inna rwx/—/–x
  |-test — okamura:okamura rwx/rwx/rwx
上記パーミッションで以下のアクセスできるか
c /home/inna/test – OK

chmod

sudo chmod [ u / g / o / a ] [ + / – / = ] [ r / w / x ] 対象ファイル

u: ユーザー
g: グループ
o: その他
a: すべて

sudo chmod 764 hoge.txtのように指定することもできる

4: 読むことが可能(Read)
2: 書くことが可能(Write)
1: 実行が可能(eXecute)
0: なにもできない

権限の意味

ファイル
r: そのファイルを読み込む
w: そのファイルを書込める
x: バイナリなら実行できる。スクリプトなら、そのスクリプトを実行できる。
(スクリプトの実体はテキストファイルで先頭に#記号がある)

ディレクトリ
r: そのディレクトリの中身をみる。
w: そのディレクトリにファイルを作成すること。
x: そのディレクトリをカレントディレクトリにすること。

ディレクトリの実行権はサブディレクトリにも影響するが、RWは指定のフォルダだけ。

chown,chmodの実用例(wordpress)

sudo chown -R root:root wp-admin
該当フォルダ以下のフォルダもファイルも全て変わる。
この処理はwp-adminも該当する。

sudo chmod -R u-rwx wp-admin
該当フォルダ以下のフォルダもファイルも全て変わる。
この処理はwp-adminも該当する。

sudo find wp-admin -type d -print | xargs sudo chmod 755
サブフォルダのディレクトリだけ
この処理はwp-adminも該当する。

sudo find wp-admin -type f -print | xargs sudo chmod 640
サブフォルダのファイルだけ
この処理はwp-adminも該当する。

/usr/share/wordpressに以下を実行。
sudo chown -R root:wp *
sudo find . -type d -print | xargs sudo chmod 755
sudo find . -type f -print | xargs sudo chmod 640
このコマンドはカレントディレクトリも摘要されるので注意。

WordPressのアップデート時にFTPを求められる場合

以下のコマンドをwp-contentの中で実行してみた。
sudo find . -type d -print | xargs sudo chmod g+w
sudo find . -type f -print | xargs sudo chmod g+w
ダメ。

仕方ない。
sudo chown -R www-data:wp wp-content
としてみるがダメ。

wp-admin/includes/file.php
の所有者をwww-dataに変更したら進んだ。

Gitメモ

最初に

リポジトリは共有とローカルがある。

通常、クローンして以下、ローカルでの作業。

コミットする予定のファイルをステージング(インデックス)へ記録。

ローカルで作業して一区切りで保存することコミットといい、コミットすると、ローマルでの基準マスターブランチが作成され、最新のコミットがheadとなる。

※ブランチはツリー上の機能やバージョンで枝分かれしていく履歴を管理している。
※現在のブランチの先頭のことをヘッダという。

古い -> 新しい
[98ca9] <- コミット [34ac2] <- コミット [f36ab] <- コミット(ヘッダ)

名称のorigin, masterというのは
origin = レポジトリの別名
master = ブランチの名前
でデフォルトの名称。

git clone https://xxx
で共有リポジトリとの変更履歴も含めたファイルが保存される。

git * , git add xxx で索引に登録
git commit -m “コメント” でコミットする。(この段階では共有リポジトリには保存されていない。)

共有リポジトリにプッシュ
git push 共有リポジトリ名 ブランチ名

共有リポジトリが登録されていない場合、
git remote add origin xxxで登録できる。

現在のローカルと、共有リポジトリに差が生まれる(共有は他からpushされる)
ローカルを最新にするのがgit pull

簡単な使い方

git clone https://github.com/okamurax/vba_to_sqlserver.git
cd vba_to_sqlserver
git add .
git commit -m “first commit”
git push https://github.com/okamurax/vba_to_sqlserver.git master

基本的なコマンド

sudo apt-get install git
インストール

git config –global user.name “okamura”
git config –global user.email “mail@xxx.com”
基本設定

git config –global color.ui true
カラー表示

git config –global alias.co checkout
別名

git config -l
コンフィグ一覧

git init
現在のディレクトリを使う宣言

.git等が作成される。
この.gitと同階層以下が作業ディレクトになる印で、.gitを手動でコピーすることもできる。

git add index.rb
git add . (サブディレクトリ以下を全てaddする)
ステージングへ

git commit
git commit -m “xxx”
ステージからリポジトリ

git show xxx(id)
コミットの内容がみれる。

git log
コミットのログを確認できる。(リポジトリのディレクトの中にいないとダメ)

git log –oneline
一行で表示したい

git log –stat
変更ファイルされたファイル

git log -p
変更箇所を表示する

git status
ファイルの状態。

modifiedと表示されると変更されていて、
changes not staged for commit ステージングにもコミットにいないという意味。
changes to be commited とステージングにいてコミットされていない状態。

git checkout — index.rb
コミットしていないファイルを、コミットした情報に戻す。

git diff
ステージングエリアに上がっていないものを比較できる
(ローカルとステージの差分)

git diff –cached
ステージングに上がったあとは –cached
(ステージとコミットの差分)

git rm index.html
で消す

git mv index.html
で移動

vim .gitignore
で対象外を管理できる。
*.log等を書いておくと、対象外とする。
.gitignoreを置いた階層と、以下サブディレクトに有効になる。

git commit –amend
直前のコミットを変更。履歴が増えない。
コミットするファイルは通常通り、addしてcommitする
そのときに、オプションで–amendを付ける
そうすると、直前のコミットのコメントを変更できる。

git reset –hard HEAD
直前のコミットに戻す場合。

git reset –hard HEAD^
直前のコミットの一つ前に戻る

git reset –hard xxxxxxxxxxxxxx
でも戻れる。

git reset –hard ORIG_HEAD
最新の状態から以前のコミットに一度戻して、
やっぱり最新の状態で良かった場合。

git branch
ブランチの一覧取得

git branch hoge
ブランチ作る

git checkout hoge
現在のブランチへ移動する。
ファイルの変更、追加などブランチごとの状態が維持される。

git checkout -b hoge
新しいブランチを作成しつつそのブランチ移動。

git merge hoge
ブランチの変更を取り込む。
hogeでの変更がよかったので、現在のブランチに取り込む。
コミット履歴も結合される。

git branch -d hoge
ブランチ消す

git tag
タグの一覧

git tag xxx
これで直近のコミットにxxxというタグがつく。

git tag yyy xxxx
これでxxxというidのコミットにyyyというタグがつく。

git tag -d xxx
タグを消す。

共有リポジトリもローカルと同じで、
***.git のようなディレクトリを作成するし、そのディレクトの中で、
git init –bare
を実施する。
bareオプションを付けると、
そのディレクトリではファイルの作成、変更等しないという意味。

git remote add origin xxx.git
(共有リポジトリの場所)

別のリポジトリを登録
作業ディレクトにしたい場所で実行する。
そのディレクトリではまずgit initされていないとダメ。
(cloneは大丈夫なので注意)

URLに”origin”という短縮名(ニックネーム)を付けると考えればOK。

空のディレクトリでgit initして、remote addしても特にファイルはコピーされない。
(cloneはコピーされる)

git initしただけのディレクトはブランチがない。
最初のコミットでブランチができる。

git remote rm origin
登録した共有リポジトリを削除

git push ox master
作業ディレクトリの内容を共有リポジトリへ登録。
oxという共有リポジトリに向かってmasterブランチを登録する。

push:アップロード
ox:リモートのサーバ名の短縮名(直接URLでもOK)
master:ブランチ名

masterの部分は正確にはmaster:masterとなる。
(ローカルのmasterをリモートのmasterに反映)

git clone xxx.git
共有リポジトリからコピー

git pull origin master
共有から持って来てローカルでマージされる。
マージなので、共有リポジトリとローカルでの変更箇所が一緒だと、コンフリクトする。

VisualStudioでの使い方

チームエクスプローラ > 接続管理 > 新規
を選択
そこにローカルrepで保存しておくパスを指定。(空のフォルダしか選択できない)

このように作成すると、接続管理にローカルrepが複数登録もできる。
右クリックから開く、またはダブルクリックで選んだリポジトリが現在の接続先。

ローカルrepに接続した状態だと、チームエクスプローラのホームにソリューションが表示される。
新規作成を選ぶと、ローカルrepのサブフォルダに新規プロジェクトができる。
このローカルrepのフォルダに既存のソリューションを移動しても表示されるのでそれを開くことも可能。

ファイルを変更したら、
チームエクスプローラ > 変更 > コミット
をする。
これでローカルリrepにコミットされた状態。

リモートrepにプッシュするためには
チームエクスプローラ > 同期
を実行。
これでリモートrepに保存された。

リモートrepの作り方。ローカルLANの場合。

Ubuntu側でSambaで共有しているフォルダで
git init –bare –shared
をする。

–sharedしてもダメでSambaのフォルダなので、
sudo chown -R nobody:nogroup フォルダ名
を実行する。

既にリモートrepにファイルがある場合、
チームエクスプローラ > 接続管理 > 複製
から、リモートrepの場所とローカルrepの場所を指定。

リモートrepもローカルrepも1箇所で複数のソリューションを管理できる。

Eclipseでの使い方

使う前にフォントの変更。
ウィンドウ > 設定 > 一般 > 外観 > 色とフォント > テキスト・フォント > 編集
から変更する。

ウィンドウ > パースペクティブ > パースペクティブを開く > その他 > Git > Git リポジトリーの複製
からGitHubのリポジトリを入力する。

ファイル > インポート > Git > Gitからプロジェクト > 既存のローカル・リポジトリー
でプロジェクトを作成する。

 

screen関連

起動
screen

一覧
screen -ls

デタッチ
Ctrl+a, d

アタッチ
screen -r id

終了
Ctrl+a, \

シェル作成
Ctrl+a, c

シェル一覧
Ctrl+a, w
Ctrl+a, “(ダブルクオーテーション)

シェル移動
Ctrl+a, 1~

シェルを閉じる(screen自体は生きてる)
Ctrl+a, k

ウィンドウ分割
Ctrl+a, |(バーティカルバー)
Ctrl+a, S

ウィンドウ移動
Ctrl+a, tab

ウィンドウ分割終了
Ctrl+a, Q(その他全ての領域)
Ctrl+a, X(現在の領域)

ファイル名を指定して実行

他にもあるけど、ここでは忘れそうなものだけ。

Windowsの機能
optionalfeatures

サービス
services.msc

プログラムの追加と削除
appwiz.cpl

コンピューターの管理
compmgmt.msc

システム構成ユーティリティ
msconfig

システムのプロパティ (環境変数)
sysdm.cpl

タスクスケジューラ
taskschd.msc

入力設定
control input.dll

共有フォルダ
fsmgmt.msc

インターネットオプション
inetcpl.cpl

デバイスマネージャ
devmgmt.msc

イベントビューワ
eventvwr

WIndows Update
wuapp

Win10の場合は作る必要がある。
%windir%\explorer.exe %LOCALAPPDATA%\Packages\windows.immersivecontrolpanel_cw5n1h2txyewy\LocalState\Indexed\Settings\ja-JP\AAA_SystemSettings_MusUpdate_UpdateActionButton.settingcontent-ms

ファイアーウォール
firewall.cpl

フォルダオプション
control folders

電源オプション
powercfg.cpl

Vim操作

操作基本

u, Ctrl+R
アンドゥ、リドゥ

gg
画面トップ

G
画面末尾

w, e, b
単語単位での移動

Ctrl+V
矩形選択

Shift+j
行結合

>>,  <<
インデント

Ctrl+u, Ctrl+d, Ctrl+f, Ctrl+B
スクロール

*
カーソル下の文字を検索

: を入力後、Ctrl+R, Ctrl+W
コマンド下の文字をvimgrep

split, vsplit
:sp xxx名, :vsp xxx名
画面の分割

:e.
ファイラで開く

Ctrl-W, W
分割画面の移動

Ctrl+U, Ctrl+D
スクロール

Ctrl+i
進む

Ctrl+o
戻る

言語設定

e ++enc=utf-8
指定文字コードで開きなおす

set fenc=shift_jis
指定文字コードに変更

set encoding=utf-8
Vim自体の言語設定

:verbose highlight cursorline
設定を見れる

置き換え

:%s/old/new/gc

‘g’ を加えると行の先頭だけではなく行の中全て
‘c’ を加えると置換の度に確認を求める

sが置き換えの意味、%が現在開いているファイルの意味。

ただし、通常の正規表現とは違うエスケープが必要らしい。
以下は、#から始まる行と、改行だけの行を削除。
:%s/^#.*\n\|^\n//g

Vimgrep

正規表現のパターン

:vim {pattern} app/**
:vim {pattern} **/*
が基本の書き方。

パスの指定は、先ず検索したいパスを指定して、それに、
*
**
*.txt
**/*.txt
の組み合わせの何れかがくっつくイメージ。

| cw で渡して、 :copen で開く。

Ctrl-w, w
移動

:q
閉じる。

ちなみに通常のgrep基本

grep -rn xxx *
等記述する

G
通常正規表現

E
拡張正規表現

P
Perl互換正規表現

r
階層下のファイル内を対象

n
行番号

コマンドメモ Ubuntu

 less

-N
ナンバリング

-F
画面に収まれば自動終了

-R
カラー表示

-X
終了時画面クリアしない

-S
折り返し無し

-s
空白まとめる

-p xxx
文字反転

-O xxx.txt
パイプのみ、閲覧後ファイル保存

less起動後

q
終了

Shift+f (Ctrl+cで通常モード)
自動更新

g, G
先頭、末尾へ移動

j, k
一行の上下

f, b / w, z
一ページの上下

& xxx
xxxのみ表示
&で絞りんこんでShift+fで更新も可能。

/
検索(nで移動)

-S
折り返し無し。(移動は←, →)

テキスト関連

tr -f \r
Win改行を除く

nkf -wd ファイル名
改行をLinux文字コードをUTF-8

nkf -wd –overwrite ファイル名
そのまま上書き

nkf –guess ファイル名
文字コード判定

hexdump -c xxx
改行コード調べる

sed -e “s/,/\n/g”
カンマを改行へ

 aptコマンド

apt-get update
キャッシュの更新

apt-get upgrade
ソフトバージョンアップ

apt-get dist-upgrade
ディストリビューションのアップ

apt-get remove xxx
ソフトの削除

apt-get purge xxx
(apt-get –purge remove xxx)
設定ファイル残らないソフトの削除。

apt-get –purge autoremove
使っていないパッケージ削除(設定ファイルも)

apt-get autoclean
使っていないアーカイブ削除
(キャッシュされているけどインストールしていない.deb)

do-release-upgrade
OSのアップデート

dpkg -l
パッケージの一覧

dpkg -L パッケージ
インストールしたファイル一覧

起動関係

shutdown -h now
終了

shutdown -r now
再起動

プロセス関係

ps aux | grep httpd
プロセスのユーザを確認する。

ps -aux | grep apache
これでプロセス名を確認して
kill xxx
でプロセス終了。

pgrep -l apache
でプロセス番号を探すこともできる。

pkill プロセス名
で複数のプロセスを終了することもできる。

find

find . -name *a*
下位dirを調べる。dirとファイルを一緒に調べるので、アスタリスク必須。

SCP

scp ./example.tar user@210.123.45.67:/home/user/
example.tarを210.123.45.67に転送。

scp -r ./test username@example.net:/home/username
testディレクトリをexample.netに転送。

秘密鍵を使う場合、
scp -i 秘密鍵 コピーしたいファイルパス 受取先パス

その他

/etc/init.d/networking restart
IPアドレスが消えた場合。

cd –
戻る

ctrl + u
入力中を消す

xxx &
ジョブをバックグラウンドへ

jobs
ジョブ一覧

kill %1
ジョブを消す

source .bashrc
bashの設定変更後

サイズを調べる

df -h
デバイスのサイズ

du -h /var/
特定フォルダ以下のサイズ(階層指定の場合 du -h –max-depth=1 / )