20191115のLinuxに関する記事は8件です。

Linux コマンド一覧表

機能に続いてLinuxのコマンドについてまとめようと思います。

詳細コマンド

manコマンド(コマンド内容表示)

基本の前にmanコマンドを書きます。
対象のコマンドの使い方や使用できるオプションを調べることができますので。
最初に知っておくべきです。

$ man コマンド名

その他詳細内容コマンド

コマンド 説明 オプションまたは使用例
whatis コマンドの簡単な説明を表示
which コマンドの保存先を調べる
type コマンドの保存先を調べる -a 全ての保存先を表示
apropos コマンドをキーワードで検索
find ファイルの検索。find ディレクトリ名 -name ファイル名で検索できる。 -name ファイル名
-typeタイプ(d: ディレクトリ、f: ファイル、l: シンボリックリンク)
-mtime 変更日時(-3で3日前から現在、+3で3日前よりも前)
-sizeサイズ
cal カレンダーの表示 例) cal 11 2018
date 日付の表示
pwd いまいるディレクトリの表示(print working directory)

基本コマンド(常用コマンド)

コマンド 説明 使用例 オプション 
cd ディレクトリ(フォルダ)移動 cd 移動フォルダ名
ls フォルダの内容をリスト形式で表示する 対象フォルダに移動して、ls -a システムファイル表示
-l ロングフォーマット
-d 指定のディレクトリ情報のみ表示
mv ファイルを移動 mv 移動元 移動先 
cp ファイルやフォルダをコピーする cp 移動元 移動先  -i インタラクティブモード
-p ファイルの属性を維持
-R 丸ごとコピー
-v コピーされたファイル名の表示
clear 消さずに画面を綺麗にする -
mkdir フォルダを作成する  mkdir 名 -p 入れ子のフォルダを一気に作成
touch ファイルを作成する touch 名
rmdir 空のフォルダを削除する rmdir 名
rm ファイルやフォルダを削除する rm 名 -r ディレクトリとディレクトリ内の全てのファイルを削除。確認は無し
pwd 現在いる位置を表示する -
find ファイルの検索をする find / -name 名
cat ファイルの内容を表示する cat ファイル名 -n 行数表示
diff ファイルとファイルの内容の違いを表示する diff 旧名 新名
grep 指定した文字列がテキスト内に存在した場合その行を抽出する grep "検索したい文字" * ファイル名
chmod ファイルやフォルダのアクセス権限を変更する chmod 権限ファイル名
chown ファイルやフォルダのオーナーやグループを変更する chown 変更したいユーザー名 変更したいファイル名
history コマンドの履歴を表示する -
ln ファイルやフォルダにリンクを設定する ln リンク元 リンク先
man コマンドのマニュアルを表示する man コマンド
apropos manページの内容を検索する apropos キーワード
less テキストファイルを閲覧する less ファイル名
more ファイルをページ単位で閲覧する more ファイル名

ユーザー管理

コマンド 説明
useradd/adduser ユーザーを新規作成する
deluser ユーザーを削除する
groupadd グループを新規作成する
groupdel グループを削除する
chfn ユーザー情報を変更する

システム管理

コマンド 説明
free 空きメモリや、使用中メモリを表示する
last 最近ログインしたユーザー名を表示する
finger ユーザー情報を表示する

ネットワーク関連を設定したい時

コマンド 説明
route ルーティングの表示や設定を行う
ftp ファイルをFTPで転送する
ssh sshでログインする

ショートカット

少し違いますが便利な知識です。

ショートカットキー 説明
↑ ↓ コマンド履歴を順に表示
tabキー フォルダやファイル名の予測変換
Ctr(control) + a カーソルを先頭に
Ctr + e カーソルを終端に
Ctr + b カーソルを一文字戻す
Ctr + f カーソルを一文字進める
Ctr + d カーソル位置の文字を消す
Ctr + h カーソル位置の左側の文字を消す
Ctr + w カーソル位置の左側の単語を消す
Ctr + r コマンド履歴の中で検索する
  • このエントリーをはてなブックマークに追加
  • Qiitaで続きを読む

【Terraform_01】鍵を使ってパスワードレスでSSH

はじめに

タイトルそのまま、公開鍵と秘密鍵を使ってパスワードレスでEC2にSSHします。
ただそれだけなのですが、Terraformを使って構築したのが原因でハマりました。。
戒めの備忘録です。環境はmac。

先に結論

Terraformのaws_key_pairはimportしかサポートしていないので、パスワード無しで生成した公開鍵を使ってコード化する必要がある。

参考にしたサイト

下記サイトを参考にさせて頂きました、この場を借りてお礼申し上げます:pray:
Terraformを使わない場合の手順は下記サイトをご参考頂ければと思います!

sshの鍵をTerraformで扱う
SSH公開鍵認証で接続するまで
ssh-copy-idで公開鍵を渡す
sshで公開鍵認証を使ってアクセスする

作業開始

公開鍵と秘密鍵の生成

$ pwd
/Users/okome/.ssh
$ ssh-keygen -t rsa -f okome_id_rsa
$ ls -l
-rw-------  1 okome  okome  1843 Nov 15 20:30 okomne_id_rsa
-rw-r--r--  1 okome  okome   412 Nov 15 20:30 okomne_id_rsa.pub
$ cat okome_id_rsa.pub
ssh-rsa #ハッシュ値は省略します

秘密鍵(okomne_id_rsa)のパーミッションは600が必須です。

コード化

keypair.tf(拡張子が.tfであればファイル名は任意)で作成した公開鍵を指定します。
コードはgithubにupしておきました。

リソース名の"this"とkey_nameの"this-key"は任意の値でOKです。

# okome_id_rsa.pub(password less)
resource "aws_key_pair" "this" {
  key_name = "this-key"
  public_key = "ssh-rsa #ハッシュ値は省略します"
}

コード化の後はterraform applyでEC2インスタンス(とVPCとかのNW)を構築します。

.ssh/configの作成

SSHを楽にすべく、以下のファイルを作成します。

$ /Users/okome/.ssh
$ vi /Users/okome/.ssh/config
Host okome01
  HostName     [EC2インスタンスに付与したパブリックIP]
  Port         22
  User         ec2-user #AmazonLinux2の場合
  IdentityFile ~/.ssh/okomne_id_rsa

EC2インスタンスにSSH

$ ssh okome01

       __|  __|_  )
       _|  (     /   Amazon Linux 2 AMI
      ___|\___|___|

https://aws.amazon.com/amazon-linux-2/
40 package(s) needed for security, out of 72 available
Run "sudo yum update" to apply all updates.
-bash: warning: setlocale: LC_CTYPE: cannot change locale (UTF-8): No such file or directory
[ec2-user@ip-xx-xx-xx-xx ~]$

パスワード聞かれなかった!成功!

おわりに

SGでアクセスを制限してるのでパスワードレスでも良いと思いますが、強固にしたい場合はパスワードあったほうが間違いないと思います。
その場合は鍵を生成する際にパスワードを入力すれば、それがそのままSSH実行時のパスワードになります。

$ ssh-keygen -t rsa -f okome_id_rsa
Generating public/private rsa key pair.
Enter passphrase (empty for no passphrase):
Enter same passphrase again:

ハマった原因は以前作成したパスワード付きの鍵をコード化してそれをすっかり忘れてた、ですね。。
一旦コメントに書くことで応急処置しましたが、できれば技術で解決したい!
ただしやり方はわからないw

簡単ですが以上です:innocent:

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

【Terraform_01】keypairを使ってパスワードレスでSSH

はじめに

タイトルそのまま、公開鍵と秘密鍵を使ってパスワードレスでEC2にSSHします。
ただそれだけなのですが、Terraformを使って構築したのが原因でハマりました。。
戒めの備忘録です。環境はmac。

先に結論

Terraformのaws_key_pairはimportしかサポートしていないので、パスワード無しで生成した公開鍵を使ってコード化する必要がある。

参考にしたサイト

下記サイトを参考にさせて頂きました、この場を借りてお礼申し上げます:pray:
Terraformを使わない場合の手順は下記サイトをご参考頂ければと思います!

sshの鍵をTerraformで扱う
SSH公開鍵認証で接続するまで
ssh-copy-idで公開鍵を渡す
sshで公開鍵認証を使ってアクセスする

作業開始

公開鍵と秘密鍵の生成

$ pwd
/Users/okome/.ssh
$ ssh-keygen -t rsa -f okome_id_rsa
$ ls -l
-rw-------  1 okome  okome  1843 Nov 15 20:30 okomne_id_rsa
-rw-r--r--  1 okome  okome   412 Nov 15 20:30 okomne_id_rsa.pub
$ cat okome_id_rsa.pub
ssh-rsa #ハッシュ値は省略します

秘密鍵(okomne_id_rsa)のパーミッションは600が必須です。

コード化

今回はkeypair.tf(拡張子が.tfであればファイル名は任意)に、先ほど作成した公開鍵を指定します。
コードはgithubにupしておきました。

リソース名の"this"とkey_nameの"this-key"は任意の値でOKです。

$ cat keypair.tf 
# okome_id_rsa.pub(password less)
resource "aws_key_pair" "this" {
  key_name = "this-key"
  public_key = "[okome_id_rsa.pub]の値をコピペする"
}

コード化の後はterraform applyでEC2インスタンス(とVPCとかのNW)を構築します。

.ssh/configの作成

SSHを楽にすべく、以下のファイルを作成します。

$ /Users/okome/.ssh
$ vi /Users/okome/.ssh/config
Host okome01
  HostName     [EC2インスタンスに付与したパブリックIP]
  Port         22
  User         ec2-user #AmazonLinux2の場合
  IdentityFile ~/.ssh/okomne_id_rsa

EC2インスタンスにSSH

$ ssh okome01

       __|  __|_  )
       _|  (     /   Amazon Linux 2 AMI
      ___|\___|___|

https://aws.amazon.com/amazon-linux-2/
40 package(s) needed for security, out of 72 available
Run "sudo yum update" to apply all updates.
-bash: warning: setlocale: LC_CTYPE: cannot change locale (UTF-8): No such file or directory
[ec2-user@ip-xx-xx-xx-xx ~]$

パスワード聞かれなかった!成功!

おわりに

SGでアクセスを制限してるのでパスワードレスでも良いと思いますが、強固にしたい場合はパスワードあったほうが間違いないと思います。
その場合は鍵を生成する際にパスワードを入力すれば、それがそのままSSH実行時のパスワードになります。

$ ssh-keygen -t rsa -f okome_id_rsa
Generating public/private rsa key pair.
Enter passphrase (empty for no passphrase):
Enter same passphrase again:

ハマった原因は以前作成したパスワード付きの鍵をコード化してそれをすっかり忘れてた、ですね。。
一旦コメントに書くことで応急処置しましたが、できれば技術で解決したい!
ただしやり方はわからないw

簡単ですが以上です:innocent:

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

【Terraform-01】keypairを使ってパスワードレスでSSH

はじめに

タイトルそのまま、公開鍵と秘密鍵を使ってパスワードレスでEC2にSSHします。
ただそれだけなのですが、Terraformを使って構築したのが原因でハマりました。。
戒めの備忘録です。環境はmac。

先に結論

Terraformのaws_key_pairはimportしかサポートしていないので、パスワード無しで生成した公開鍵を使ってコード化する必要がある。

参考にしたサイト

下記サイトを参考にさせて頂きました、この場を借りてお礼申し上げます:pray:
Terraformを使わない場合の手順は下記サイトをご参考頂ければと思います!

sshの鍵をTerraformで扱う
SSH公開鍵認証で接続するまで
ssh-copy-idで公開鍵を渡す
sshで公開鍵認証を使ってアクセスする

作業開始

公開鍵と秘密鍵の生成

$ pwd
/Users/okome/.ssh
$ ssh-keygen -t rsa -f okome_id_rsa
$ ls -l
-rw-------  1 okome  okome  1843 Nov 15 20:30 okomne_id_rsa
-rw-r--r--  1 okome  okome   412 Nov 15 20:30 okomne_id_rsa.pub
$ cat okome_id_rsa.pub
ssh-rsa #ハッシュ値は省略します

秘密鍵(okomne_id_rsa)のパーミッションは600が必須です。

コード化

今回はkeypair.tf(拡張子が.tfであればファイル名は任意)に、先ほど作成した公開鍵を指定します。
コードはgithubにupしておきました。

リソース名の"this"とkey_nameの"this-key"は任意の値でOKです。

$ cat keypair.tf 
# okome_id_rsa.pub(password less)
resource "aws_key_pair" "this" {
  key_name = "this-key"
  public_key = "[okome_id_rsa.pub]の値をコピペする"
}

コード化の後はterraform applyでEC2インスタンス(とVPCとかのNW)を構築します。

.ssh/configの作成

SSHを楽にすべく、以下のファイルを作成します。

$ /Users/okome/.ssh
$ vi /Users/okome/.ssh/config
Host okome01
  HostName     [EC2インスタンスに付与したパブリックIP]
  Port         22
  User         ec2-user #AmazonLinux2の場合
  IdentityFile ~/.ssh/okomne_id_rsa

EC2インスタンスにSSH

$ ssh okome01

       __|  __|_  )
       _|  (     /   Amazon Linux 2 AMI
      ___|\___|___|

https://aws.amazon.com/amazon-linux-2/
40 package(s) needed for security, out of 72 available
Run "sudo yum update" to apply all updates.
-bash: warning: setlocale: LC_CTYPE: cannot change locale (UTF-8): No such file or directory
[ec2-user@ip-xx-xx-xx-xx ~]$

パスワード聞かれなかった!成功!

おわりに

SGでアクセスを制限してるのでパスワードレスでも良いと思いますが、強固にしたい場合はパスワードあったほうが間違いないと思います。
その場合は鍵を生成する際にパスワードを入力すれば、それがそのままSSH実行時のパスワードになります。

$ ssh-keygen -t rsa -f okome_id_rsa
Generating public/private rsa key pair.
Enter passphrase (empty for no passphrase):
Enter same passphrase again:

ハマった原因は以前作成したパスワード付きの鍵をコード化してそれをすっかり忘れてた、ですね。。
一旦コメントに書くことで応急処置しましたが、できれば技術で解決したい!
ただしやり方はわからないw

簡単ですが以上です:innocent:

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

PHP→Pythonの呼び出し時に'ascii' codec can't encode characters in position xx-xx: ordinal not in range(128)

Pythonでスクリプト書いて、PHPから呼び出したい。
Python側をコンソール上で動作確認して、
PHPでフロント作って呼び出そうとしたらこれ

'ascii' codec can't encode characters in position 28-32: ordinal not in range(128)

ascii?コンソール上で動くけど?
locale変更してもダメ

試しにpython実行コマンドで

LC_ALL=\"ja_JP.utf8\" python test.py

のように定義したら動いた。

分からんわこんなん。

P.S. 上司ありがとう。

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

http要求を行い、ステータスコードが200の場合のみ内容を保存する

背景

curlにて機能を作っていたが、「要求が失敗した場合も-o(output option)に保存されてしまう」問題が有りシェルスクリプト化しました。

コード

#!/bin/bash
# ./curl+.sh {url} {output}
URL=$1
OUTPUT=$2
TMPOUTPUT=/tmp/$(date +%Y%m%d_%H%M%S_%3N)

status=`curl -o $TMPOUTPUT -li $URL -w '%{http_code}' -s`
if test $status -eq 200 ; then
cp $TMPOUTPUT $OUTPUT
echo 1
else
echo 0
fi
  • このエントリーをはてなブックマークに追加
  • Qiitaで続きを読む

【fishシェルのテンプレ】$PATHにパスを追加する(「Googleの中の人」ver)

テンプレ

解説はインラインのコメントを参照してください。

# The begin/end block limits the scope of all variables except $PATH
# begin/endは(-xでexportしている)$PATH以外のすべての変数スコープを限定するよ
begin

  # 例として/opt/binを追加します
  set new_path "/opt/bin"

  # -gx for global (not limited to this begin/end block) and exportable (part of
  # the environment for child processes)
  # -gxはグローバル化(begin/endブロック以外の場所からも使えるようにする)とエクスポート(個プロセスでも使える環境変数にする)の為に使っているよ
  if not contains "$new_path" $PATH
    set -gx PATH "$new_path" $PATH
  end

end

経緯

最近、google-cloud-sdkを対話スクリプトでインストールした際、次のような対話項目がありました。

Enter a path to an rc file to update, or leave blank to use 
[/home/dev-user/.config/fish/config.fish]:

この手のパス追加はB系シェルを前提としたものが多いので、fishシェルを使っている身としては嬉しい限りです。上記config.fishに追加されていた設定スクリプトを開いたところ、私のような輩を想定していたのか各行に初心者向けのコメントがついていたので、感動して記事にしました。(コメントの英語部分はオリジナルそのままです。)

ありがとうございます、Googleの中の人

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

Linuxについて

SQLと扱いが混乱してきたので
少し備忘録を書きます。

Linuxとは

OSの一種、MacやWindowsと同じ枠組みです。
主にサーバー用として使うOSです。
ちなみにLinux自身にも色々種類があります。
Linuxカーネルを基本にして
様々な企業・団体が独自のLinuxディストリビューション(改造Linux)を再配布しています。

利点

  • スペックの低いPCでも使える
  • 基本無料である

Linux用語

Linuxカーネル(カーネル)

リーナス・トーバルズ氏が開発したLinuxのこと。
基本構成は下記の通り

  • プロセス管理
  • プロセス間通信
  • メモリ管理
  • ファイルシステム
  • ネットワーク
  • カーネルプリミティブ

パッケージ

Linuxが採用しているアプリケーションの配布形態です。
インストールは色々存在し

RPM(RPM Package Manager)
Yum(Yellowdog Updater Modified)
Apt(Advanced Package Tool)
DNF(Dandified Yum)
などと呼ばれるパッケージ管理ツールを使用して、パッケージをダウンロードしてインストールします。
rpmコマンドでパッケージをインストールしたい場合は以下のようなコマンドです。

$ rpm -ivh 「パッケージ名」

ディレクトリ

フォルダのこと

シェル

シェルは、Linuxへの命令文を入力するためのアプリケーションの総称です。
Linuxの代表的なシェルはbashであり
sh、ksh、zsh、csh、tcshなどもシェルです。

コマンド

実行命令文のこと主な一覧はこちら

  • cd:ディレクトリの移動
  • cp:ファイル・ディレクトリのコピー
  • rm:ファイル・ディレクトリの削除
  • vi:エディタの起動・ファイルの作成
  • rpm:パッケージのインストール
  • make:ソースファイルのコンパイル

サービス

Linuxが起動するときに自動的に起動するプログラムのこと

Apache
Webサーバとして動作するサービス

Samba
Linuxで、Windowsのファイルサーバやプリントサービス、ドメインコントローラ機能、ドメイン参加機能を提供するサービス

BIND
DNS(Domain Name Service)サーバの機能を提供するサービス

ライブラリ

よく使われるプログラムの共通部分を、他のプログラムから利用できるようにしたものです

OpenSSL
インターネット上で標準的に利用される暗号通信プロトコルであるSSLおよびTLSの機能を実装した、オープンソースのライブラリ

NSS(Network Security Services)
セキュア通信を用いるソフトウェアの開発のためのクロスプラットフォームライブラリ

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