読者です 読者をやめる 読者になる 読者になる

ターミナルの操作※随時更新

はじめに

ショートカットキーを覚えたほうが効率的だと思う今日このごろ。 ただ、一度で覚えきれる量ではないので、使ってみて覚えたコマンドをどんどん更新していきたいです。

移動編

ctrl + b

1文字戻る

ctrl + f

1文字進む

ctrl + a

行頭に移動する

ctrl + e

行末に移動する

alt + ←

1単語分戻る

alt + →

1単語分進む

削除編

ctrl + h

手前の1文字を削除する

ctrl + d

後ろの1文字を削除する

ctrl + w

1単語分削除する

カット(切り取り)とヤンク(貼り付け)編

ctrl + k

カーソル位置から行末までをカットする

ctrl + u

カーソル位置から行頭までカットする

コマンドプロンプトで使用できるコマンドとかを調べるにはmanコマンドが便利

はじめに

これまではUNIXLinuxで使用するコマンドを調べようと思ったら以下のように-hや–helpを使ったり、ググったりしていた。

cat -h

これでもよいけれど、manコマンドという便利なコマンドがあることを知った。 manはマニュアルの頭3文字のようだ。 具体的には以下のように使う。

man cat

実行結果

NAME
     cat -- concatenate and print files

SYNOPSIS
     cat [-benstuv] [file ...]

DESCRIPTION
     The cat utility reads files sequentially, writing them to the standard output.  The file operands are processed in command-line order.  If file is a single dash (`-') or absent, cat
     reads from the standard input.  If file is a UNIX domain socket, cat connects to it and then reads it until EOF.  This complements the UNIX domain binding capability available in
     inetd(8).

     The options are as follows:

     -b      Number the non-blank output lines, starting at 1.

     -e      Display non-printing characters (see the -v option), and display a dollar sign (`$') at the end of each line.

     -n      Number the output lines, starting at 1.

     -s      Squeeze multiple adjacent empty lines, causing the output to be single spaced.

     -t      Display non-printing characters (see the -v option), and display tab characters as `^I'.

     -u      Disable output buffering.

     -v      Display non-printing characters so they are visible.  Control characters print as `^X' for control-X; the delete character (octal 0177) prints as `^?'.  Non-ASCII characters
             (with the high bit set) are printed as `M-' (for meta) followed by the character for the low 7 bits.

とっても詳細(^ ^)/ ちなみにqキーでマニュアルモードを終了出来る。

キーワードでも調べられる

コマンド名をがわからなくても、こんなことしたいというキーワードで調べることもできる。

man -k キーワード

こんな感じに使う。 削除をしたいが、コマンドはわからんという例。 本当は他にもremoveに関するものが出力されたけど、省略。

man -k remove

rm(1), unlink(1)         - remove directory entries
rmdir(1)                 - remove directories
rmdir(2)                 - remove a directory file
sem_unlink(2)            - remove a named semaphore
shm_unlink(2)            - remove shared memory object
srm(1)                   - securely remove files or directories
unlink(2), unlinkat(2)   - remove directory entry

UNIXの勉強を始めた自分にはありがたい機能だと思う。

読書をただの趣味で終わらせないために

新卒で入社した職場でもうすぐ1年がたつ。 職場では、本を週に1冊以上読むことが推奨されている。 本を読むのは好きだし、1冊くらいなら苦にならないのでほとんど続けられている。

最近、ただ本を読むだけで満足して何一つ自分の血肉になっていないように感じ始めた。 本は学びになるが、学び取ったことを実践して初めて本に価値があると思う。

そこで、今後は本を読んだら日常にどう活かすか「アクション」までを週1回ペースで懸けたらと思う。

宣言しないとやらなそうなので、ここに宣言しておく。

Rails11章

Rails Railsチュートリアル プログラミング

学び

  • object
  • request.referrer

object

フォーム変数fをf.objectとすることで、関連付けられたオブジェクトにアクセスできる。

form_for(@user) do |f|

の場合は、f.objectは@userとなる。

request.referrer

一つ前のURLを返す。

Rails11章

Railsチュートリアル Rails プログラミング

学び

  • object
  • request.referrer

object

フォーム変数ff.objectとすることで、関連付けられたオブジェクトにアクセスできる。

form_for(@user) do |f|

の場合は、f.object@userとなる。

request.referrer

一つ前のURLを返す。

Rails tutlarila 9章

Rails Railsチュートリアル プログラミング

学んだこと

  • form_forが新規ユーザーと既存ユーザーをどう見分けているか
  • フレンドリーフォワーディング
  • リダイレクトが呼び出されるタイミング

form_forが新規ユーザーと既存ユーザーをどう見分けているか

Active Recordのnew_record?論理値メソッドを使用して区別している。form_forの引数に渡されたインスタンスに対してnew_record?を実行し、trueの時はPOSTを、falseの時はPATCHを使用する。

User.new.new_record?
=> true

User.first.new_record?
=> false

フレンドリーフォワーディング

ユーザーがリクエストした時点のページを保存しておいて、ログイン後などにその場所にリダイレクトさせる。

# 記憶したURL (もしくはデフォルト値) にリダイレクト
  def redirect_back_or(default)
    redirect_to(session[:forwarding_url] || default)
    session.delete(:forwarding_url)
  end

  # アクセスしようとしたURLを覚えておく
  def store_location
    session[:forwarding_url] = request.url if request.get?
  end

転送先のURLを保存するには、session変数を使用する。

リクエスト先のURLを取得するために、requestオブジェクトを使用する。

リダイレクトが呼び出されるタイミング

return文やメソッド内の最終行が呼び出されない限り、リダイレクトは発生しない。

よって、redirect文の後にあるコードも実行される。

Rails tutorial8章

Rails Railsチュートリアル プログラミング

学んだこと

  • HTTP
  • sessionメソッド
  • findとfind_byの違い
  • ||=
  • cookiesメソッド
  • 三項演算子

HTTP

HTTPはステートレスなプロトコルで、リクエストごとが独立しているため、以前のリクエストの情報を利用できない。

ブラウザでのページの移動際に、ユーザーのIDを保持しておく手段がない。セッションを使い、半永続的なユーザーのブラウザとWebサーバ間での接続を設定する。

セッションはHTTPプロトコルと海藻が異なるので、HTTPの特性とは別に接続を確保できる。

sessionメソッド

sessionメソッドは、ハッシュのように扱え、一時的なcookieを作成できる。ユーザーのブラウザ内の一時cookiesに暗号化済みのものが自動で作成される。

sessioonメソッドで作成された一時cookiesは、ブラウザを閉じた瞬間に有効期限が終了する。

sessionメソッドで作成した一時cookiesは自動的に暗号化され、攻撃者が一時cookiesを盗み出したとしても、利用することはできない。

例えば、ユーザーIDがを一時cookiesの中から取得したとしても、本物のユーザーとしてログインすることはできない。

findとfind_byの違い

findは、該当するidがなかった場合、例外(エラー)を返す。

対してfind_byは該当するidがなかった場合、nilを返す。

||=(or equals)

||= とは、変数の値がnilなら変数に代入するが、nilでなければ代入しない。

@hoge
=> nil
@hoge ||= 'bar'
=> 'bar'
以下と同様
@hoge = @hoge || 'bar'
=> 'bar'
@hoge ||= 'fuga'
=> 'bar'

cookiesメソッド

cookiesメソッドは、cookieを生成するメソッド。sessionメソッドと同様にハッシュで扱う。個別のcookiesは、一つのvalueとオプションのexpiresからできる。expiresは省略可能。

cookies[:remember_token] = { value: remember_tokne, expires: 20.years.from_now.utc }

//以下と同義
cookies.parmanent[:remember_token] = remember_token

三項演算子

条件分岐をコンパクトに表現できる。

書式は以下。

boolean(条件式) trueの時の処理 : falseの時の処理