ショートカットまとめ
よく忘れるショートカットをまとめておく。
VSCode
Markdown
Markdownのプレビュー表示:[Command]+[K]→[V]
質問の仕方がよくなかったので、質問の仕方をまとめてみた。
15分頑張っても解決できない時 ただし、質問内容を考えるのは倍以上の時間をかけて精査すること そこまでしても、回答を頂ければその時間は回収できるし、何より回答者の時間を奪わない
可能な限り、以下のフォーマットに従って質問する。
## 質問概要 ※2行以内で簡潔に書く(書けなければ、別のQAにできないか考える) ## 詳細 ### 目標 あるべき姿を記述する ### 現状の問題 - エラーなどを見やすく抜粋してコピーして貼る - とりあえず、ログの内容はしっかり理解すること - 必ず、自分や他の環境で再現するか検討する - スクリーンショットは回答者が調べにくいため、貼らない ### 背景 なぜその問題を解きたいか ### やったこと - 何ができて、何ができないかを明確にする - コードが長くなり過ぎないように貼る - もし、長くなるなら、そもそも問題を簡略化できないか?、必要ないコードまで貼り付けていないか?を考える - GitHub やGist にて共有も考える ### 考えたこと - 問題に関して、なぜ問題が起きたかの自分なりの考えを記述する - 問題は分割して、1ステップずつ考えたことを書く ## 補足 ### 調べたこと - 今把握している知識を簡単に書く - 必ず公式ドキュメントを読む ### 試したこと 問題解決に向けてしたことやデバッグ結果を書く。 ### 実行環境やフレームワークについて 相手の手元で再現できる情報を記載する。
- [ ] フォーマット通りかけているか? - [ ] ChatGPTに確認したか? - [ ] 読む側の視点に立って、うっと思わないか? - [ ] 読む側の視点に立って、言いたいことを推測するようにエスパーさせてないか? - [ ] 質問の背景やなぜ知りたいかを明記されているか? - [ ] 可能なら、回答者のメリットやどうタメになるかを書く - [ ] QAをスマホで見ても、見にくくなってないか? - [ ] そもそも、回答者が回答したいと思う文面になっているか、もう一度確認する - [ ] 質問する前に一息ついて、見直す
- [ ] 必ずお礼を言う - [ ] 再度質問する時も、上記の内容を確認する - [ ] 解決結果を伝える
バグなどの謎の現象に立ち向かうも闇が濃く、どうしても沼から脱出できない時に見るフローチャート - Thanks Driven Life
恥ずかしがらずにオープンな場で積極的に質問していきましょう、という話 - give IT a try
【初心者ITエンジニア向け】上手な質問は「相手にエスパーさせない質問」です - give IT a try
質問は恥ではないし役に立つ - Qiita プログラマーに嫌われない質問術!プログラミングスキルアップに繋がる最高の質問のための3ポイントを紹介 | 東京フリーランス
teratail【テラテイル】|ITエンジニア特化型Q&Aサイト
学習効率をグッとあげる質問の仕方 | Take off Rails
5ヶ月でチーム開発完了
工夫しすぎないで、最小限で提出(歓迎要件は無視やるなら後で)
lsコマンドを作る1
lsコマンドを作る2
lsコマンドを作る3
lsコマンドを作る4
ls コマンドを作る5
wc コマンドを作る
nginx で SSL 対応サイトを作る
SQL の基本を理解する
PostgreSQLの基本を理解する
データベース設計の基本を理解する
Webアプリケーション
REST の考え方を理解する
Sinatra を使ってWebアプリケーションの基本を理解する
WebアプリからのDB利用
Rails の基本を理解する
Rails の i18n を理解する
kaminari を使ってページング処理を実装する
devise を使ってユーザー認証を実装する
ActiveStorage で画像アップロードを実装する
コメントを付けられるようにする
日報の言及機能を作る
テスト技法
TDD の基本を理解する
test-unit の基本を理解する
Railsでテストを書く
オブジェクト指向プログラミング
ボウリングのスコア計算プログラムオブジェクト指向版
ls コマンドを作るオブジェクト指向版
JavaScript入門
JavaScript環境の設定
FizzBuzz問題(JavaScript)
npm
Linter (ESLint) と Formatter (Prettier)
カレンダーのプログラム(JavaScript)
非同期処理(JavaScript)
クラス(JavaScript)
npm パッケージの作成
Reactチュートリアル
Reactを学ぶ
ReactでSPAを作る
Contextを使ってグローバルなstateを管理する
SWRを使ってAPIをコールする
Webセキュリティ
アジャイル開発 /スクラム を理解する
ビデオチャットを使えるようになる
開発に参加するための準備をする
開発に参加して PR を送りマージする
どんなサービスを作るかを考える
ペーパープロトタイプを作る
カンバンを作る
技術検証をする
リソース・データ設計
Web サービスを作る
CI
デプロイ
自分で作った Web サービスのデザインレビューを受ける
自分で作った Web サービスのコードレビューを受ける
Web サービスをリリースする
プロを目指す人のためのRuby入門[改訂2版] 言語仕様からテスト駆動開発・デバッグ技法まで 伊藤 淳一 (著)
def test_method [10, 20] end a, _b = test_method
/
: エスケープ処理(後の記号の意味をなくしてただの文字列とする)1_000_000_000
と書けば_
は無視される
&&の優先順位は||より高い
以下は左項が0.3000~04と丸め誤差があるため、等しくならない。
0.1 * 3 == 0.3 #=>false
そのため、以下のように有理数に変換する必要がある。
0.1r * 3r == 0.3 #=>true
また、メソッドはrationalize
である。
%! 文字列!
でエスケープが必要なく!
で文字列を作れる
複数行に渡る時は以下のようにヒアドキュメントを使用する。
str = <<識別子(TEXTなど大文字) 文字列 文字列 識別子
<<-
を使うと最後の識別子をインデントさせることができる。
sprintf('%0.3f',1.2)#=>"1.200"
というふうにsprintfで表示できる。
基数指示子 |基数指示子|内容| |---|---| |0b|2進数| |0o|8進数| |0x|16進数|
ビット演算 |記号|内容| |---|---| |&|ビットごとのAND| |||ビットごとのOR| |^|ビットごとのXOR| |>>|右ビットシフト| |<<|左ビットシフト| |~|ビットごとのNOT|
指数表現
2e-3 #=>0.002
1 && nil && 3 # => nil
のように左から評価していき、式全体の真偽値が確定した時点で評価を終了する(短絡評価、ショートサーキット)
演算子の優先順位!
>&&
>||
>not
>and, or
and, or
は制御フローを扱うのに向いている
条件演算子を用いた条件 ? trueの時の実行処理 : falseの時の実行処理
?
で終わるメソッドは慣習として真偽値を返すメソッド!
で終わるメソッドは危険を意味する(破壊的メソッドなど)def メソッド名(引数) = 処理
pp 表示したい内容
:配列の内容を見やすく整形して出力する
Minitestを使ったテストコードの基本系
require'minitest/autorun' require_relative 'ファイル名' class SampleTest < Minitest::Test def test_sample assert_equal A, B end end
検証メソッド
# aがbと等しければパスする assert_equal b,a # aが真であればパスする assert a # aが偽であればパスする refute a
a,b = [1, 2] # =>a = 1, b = 2
: 多重代入が可能
a[1, 3]
: 2つ目の要素から3つ分の要素を取り出す
<<
: 配列の最後に要素を追加delete_at(要素番号)
: 要素番号に該当する要素の削除delete(要素)
: 要素に等しい要素の削除delete_if
: 以下のようにブロックの戻り値が真の要素を削除a.delete_if do |n| n.odd? end
push
と<<
の違いはpushは引数に複数の値を入れることができるconcat: 破壊的に配列を連結する(非推奨)
|、-、&はそれぞれ和集合、差集合、積集合を求めることができる
*
を前につけて残り全要素を配列として受け取る(途中に使ってもいいa, *b, c
)
a, *b = 1, 2, 3 p b #=> [2, 3]
*
だけで残りの配列を無視するa, * = 1, 2, 3
*
(splat演算子)を配列の前につけることで配列が展開されるa = [1] b = [2, 3] a.push(*b) #=>[1, 2, 3] [1, *b] #=>[1, 2, 3]
*
をつけることで可変長引数(rest引数)にできるdefgreet(*names) "#{names.join('と')}、こんにちは!" end greet('田中さん') #=> "田中さん、こんにちは!" greet('田中さん','鈴木さん') #=> "田中さんと鈴木さん、こんにちは!"
%w(a b c) #=>["a", "b", "c"]
スペースあり
%w(a\ b c) #=>["a b", "c"]
式展開
a = "A" %W(#{a} b\n c) #=>["A" "b\n", "c"]
cahrs
: 一文字ずつ配列に入れるRuby.chars #=> ["R", "u", "b", "y"]
split
: 区切り文字で配列に入れる'R,u,b,y'.split #=> ["R", "u", "b", "y"]
以下のようにデフォルト値を決めることができる。
Array.new(10){ |n| n%3 + 1 } #=> [1, 2, 3, 1, 2, 3, 1, 2, 3, 1]
※第二引数で決めてしまうと、同じものを参照しているので事故が起こりやすい。 ブロックでデフォルト値を決めるように
even_numbers = numbers.select { |n| n.even? }
[r, g, b].sum('#') do |n| n.to_s(16).rjust(2, '0') end
以下の場合、&とシンボルで書くことができる 1. ブロックパラメータが1個だけである 2. ブロックの中で呼び出すメソッドには引数がない 3. ブロックの中では、ブロックパラメータに対してメソッドを1回呼び出す以外の処理がない
['a', 'b', 'c'].map { |s| s.upcase } # ↓ ['a', 'b', 'c'].map(&:upcase)
map.with_index{ |obj, i| "#{i}: #{obj}" }
のように、each以外でindexを取れる(引数があると、その数からindexが始まる)
以下のように、複数の要素をブロックに渡すことができる
[[1, 2],[3, 4]].each do | a, b | a + b end #=> [3, 7]
[[1, 2],[3, 4]].each do | (a, b), i | a + b + i end #=> [3, 8]
_1
, _2
など、ブロックパラメータの番号をそのままパラメータとして使える(使うかどうかは要検討)[[1, 2], [10, 20], [100, 200]].each{ _1+_2 } #=> [3, 30, 300]
open
メソッドにもブロックは使える..
以内...
以上、未満
()で囲まないと優先順位が低いので注意
以下のように配列の要素を範囲指定できるa = [1, 2, 3, 4, 5] a[1..3] #=> [2, 3, 4]
n.upto(m)
: nからmまで数値を1つずつ増やすa=[] 10.upto(12) {|n| a<<n} a #=> [10, 11, 12]
n.downto(m)
: nからmまで数値を1つずつ減らす
step(間隔): 値を増やす間隔を指定できる
(1..10).step(2) { |n| numbers << n }
開始値.step(上限値, 一度に増減する大きさ)
: 開始値から上限値まで増減する大きさを決められるwhile
は1行で書くとa = [] a <<1 while a.size < 5
begin 処理 end while false
unitl: 条件が偽である間処理を繰り返す
for文: 基本的にはeachを使う
for 変数 in 配列やハッシュ 処理 end
catch タグ do 処理 throw タグ 戻り値 end
シンボル特徴: ・表面上は文字列っぽいので、プログラマにとって理解しやすい。 ・内部的には整数なので、コンピュータは高速に値を比較できる。 ・同じシンボルは同じオブジェクトであるため、メモリの使用効率が良い。 ・イミュータブルなので、勝手に値を変えられる心配がない。
delete
: 指定したキーに対応する要素を削除
メソッドのキーワード引数
def メソッド名(キーワード引数1: デフォルト値1, キーワード引数2: デフォルト値2) end
**をハッシュの前につけるとハッシュの要素を展開できる
merge
メソッドも同様
**引数で任意のキーワードを受け付ける
def メソッド名(key1: value1, key2: value2, **others) end
メソッド名(**hash)
Hash.new { |hash,key| hash[key] = デフォルト値 }
文字クラス: 文字の集合を表す 量指定子: 文字量を指定
{n,m}
: 直前の文字が n 個以上、m 個以下[a-z]
: aからzのいずれか[AB]
: AまたはBが1文字?
: 直前の文字が1個、または無し.
: 任意の1文字+
: 直前の文字が1個以上(「貪欲」で最長マッチを返す)*
: 直前の文字が0個以上(「貪欲」で最長マッチを返す)( )
: マッチする部分をキャプチャ(捕捉)and グループ化?:
をつけるとキャプチャなし\w
: 英単語を構成する文字(半角英数字とアンダースコア)[^AB]
: AでもなくBでもない任意の1文字^
: 行頭を表す$
: 行末を表す\t
: タブ文字を表す\n
: 改行文字を表す\s
: 空白文字(スペース、タブ文字、改行文字等)を表すABC|DEF
: 「文字列ABCまたは文字列DEF」のOR条件を表す^
: ^文字
で行頭の意味になったり、[^ ]
で否定の文字クラスの意味になったりする\b
: 単語の境界を表す(?=abc)
: 「abcという文字列の直前の位置」を表す(先読み)(?<=abc)
: 「abcという文字列の直後の位置」を表す(後読み)(?!abc)
: 「abcという文字列以外の直前の位置」を表す(否定の先読み)(?<!abc)
: 「abcという文字列以外の直後の位置」を表す(否定の後読み)\1
や \2
といった連番で参照できる(後方参照)?
や *
、+
といった量指定子は ( )
の後ろに付けることもできる|
を使ったOR条件では、各条件内でもメタ文字が使える\
でエスケープする{n,}
や {,n}
はそれぞれ「直前の文字がn個以上」「n個以下」の意味になる\W
、\S
、\D
、\B
はそれぞれ \w
、\s
、\d
、\b
の逆の意味になる=~
: マッチすれば真、しなければ偽
!~
: 上記と逆
(?<名前>)
: キャプチャに名前をつけるm = /(?<name>)/.match(text) #以下は全て同じ m[:name] m['name'] m[0]
/(?<name>)/ =~ text
puts name
ただし、正規表現と対象の文字列を逆にすることはできない また、正規表現を代入した時にも使えない
scan
: 引数で渡した正規表現にマッチする部分を配列に入れて返す
()
があるとキャプチャを二次元配列として、グループ化する[]
, slice
, slice!
: 正規表現を渡すと、文字列から正規表現にマッチした部分を抜き出すtext = 'sample123-4567' text[/\d{3}-\d{4}/] #=> "123-4567" text[/(\d{3})-(\d{4})/, 2] #=> "4567" text[/(?<left_num>\d{3})-(?<right_num>\d{4})/, 'right_num'] #=> "4567"
split
: マッチした文字列を区切り文字にして文字列を分解し、配列として返すgsub
, gsub!
: 第1引数の正規表現にマッチした文字列を第2引数の文字列で置換
置換対応をハッシュで指定可能text = '1,2-3' hash = { ',' => ':', '-' => '/' } text.gsub(/,|-/, hash) #=> "1:2/3"
文字列番号で参照(''
で囲むことに注意)
text.gsub(/(\d),(\d)-(\d)/, '\1-\2-\3') #=> "1-2-3"
名前付きキャプチャ
text.gsub(/(?<first>\d),(?<second>\d)-(?<third>\d)/, '\k<first>-\k<third>') #=> "1-3" text.gsub(/(?<first>\d),(?<second>\d)-(?<third>\d)/) do "#{$~[:first]}-#{$~[:third]}" end # => "1-3"
属性(アトリビュート): オブジェクトから取得できる値
継承の関係は「スーパークラスはクラスである」またはその逆が言えるかどうかで考える。
class Product attr_reader :name, :price def initialize(name, price) @name = name @price = price end end class DVD <Product attr_reader running_time def initialize(name, price, running_time) super(name, price) # superでもいい @running_time = runnning_time end end
クラスメソッドをprivateにするには
class << self end
定数を外部から参照するにはクラス名::定数名
とする。
include メソッド名
: クラスでモジュールのメソッドを呼び出す。
ミックスイン: にモジュールをクラスにincludeして機能を追加すること
クラス内でしか使わないのであれば、privateにする
特異メソッド: 特定のオブジェクトにだけ紐付くメソッドのこと
extend
: モジュールのメソッドを特異メソッド(クラスメソッド)とする
モジュール構文の中にクラス定義を書くと「そのモジュールに属するクラス」という意味になるため、同名のクラスがあっても外側のモジュール名さえ異なっていれば名前の衝突は発生しなくなる
モジュール名::クラス名
でモジュールに属するクラスを呼び出す
::クラス名
: (左側には何もなし)トップレベルの同一名のクラスを呼び出す
module_function
: ミックスインおよび特異メソッド(モジュール関数)として使用可能にする
インスタンス変数を作成し値を保持する
yield
: メソッド内で渡されたブロックを実行する
引数の前に&
をつけることで、ブロックを引数とする(一番最後にすること)。ブロックを実行する場合はcall
メソッドを使用する。
def メソッド(&引数) 引数.call end
Procオブジェクト: ブロックなどの処理をオブジェクトとして扱う
case 式 in パターン else end
case {key1: value1, key2: value2} in {key1: String => var1, key2: 18.. => var2} in {key1: String, key2: 18.. } => var end
|
で繋ぎどれか一つにマッチしたらマッチしたとみなす
def deconstruct [@x, @y] end
def deconstruct_key [@x, @y] end
tap
: メソッドチェーンを調べる
logger.debug
: ログにデバッグ情報を出力する
-W:deprecated
オプションをつけて実行すると警告が出力される
以下をrake タスク名
で実行できる。
task :タスク名 do end
X ||= A X ||= begin 代入処理 end
Xがnilまたはfalseなら、AをXに代入
!!true #=> true !!1 #=> true !!false #=> false !!nil #=> false
ゼロからわかる Ruby 超入門 五十嵐邦明,松岡浩平 著
.to_i
でIntegerへの変換、.to_s
でstringへの変換=begin =end
binding.irb
でそこの行でストップして、デバッグ可能p
: 後ろの変数やオブジェクトを表示するメソッド
-.even?
: 偶数か判定.odd?
: 奇数か判定if elsif else end
後置if(if修飾子)
実行文 if 条件文
条件を満たさないときに実行するif文
unless 条件 実行文 end
case when else end
N回繰り返して実行
N.times do 実行文 end
N.times {実行文}
配列を代入する変数は複数形にする
後ろから数えるときは-1, -2
配列.first
: 最初の要素配列.last
: 最後の要素
配列.unshift(追加するもの)
: 配列の先頭に追加
配列.push(追加するもの)
: 配列の末尾に追加配列 << 追加するもの
: 末尾に追加
配列.shift
: 配列の先頭を削除
配列.pop
: 配列の末尾を削除配列.delete_at(n)
: n番目(n-1番目)を削除して詰める
配列1 + 配列2
: 末尾に配列を足す
配列1 - 配列2
:配列2にない配列1の要素を取り出す配列の全要素を変数に一つずつ代入して繰り返す
配列.each do | 変数 | end
break
: 繰り返しを途中で終わらせるnext
: 繰り返しの次の回へ進む3から5まで繰り返す
(3..5).each do | 変数 | end
配列.sum
: 総和を計算配列,size
: 要素数配列.uniq
: 重複しない要素だけ取り出す配列.uniq!
: 元の配列を重複しない要素だけにする(破壊的変更)配列.uniq{ |n| n.to_s }
: 配列をnに代入し、stringに変換した状態で重複しない要素を取り出す.object_id
: オブジェクトID(破壊的変更かどうか判別する時に使える)
mapメソッド: 配列の各要素へ処理を行い、変換してできた要素を持った、新しい配列を作るメソッド
result = [1 2 3].map do |x| x * 2 end
resultは[2 4 5]となっている
result = ["abc" , "123"].map(&:reverse)
: 各要素を逆順にする
ブロックはプログラムのかたまりをメソッドに渡すことができる仕組み(引数みたいなもの)
call
: 変数(&変数)に代入されたブロックを実行
def foo(&b) b.call enf foo do 処理 end
{:キー => 値, :キー => 値} {キー: 値, キー: 値}
キーはsymbolオブジェクトである。
シンボルの特徴は以下の通りです:
同じ名前のシンボルは、メモリ内で一意であり、同じオブジェクトIDを持ちます。これにより、シンボルの比較が非常に高速で行えます。一方、同じ内容の文字列は別のオブジェクトとして扱われるため、比較が遅くなることがあります。
シンボルは不変です。つまり、一度作成されたシンボルは変更できません。これにより、シンボルはハッシュのキーやオブジェクトの属性名など、変更されることが望ましくない場所で使われることが多いです。
シンボルは、メモリ使用量が小さいため、大量の同じ名前の識別子を扱う場合に効率的です。
ハッシュ.default = 0
でキーがない時の値を設定
新しいハッシュ = ハッシュ1.merage(ハッシュ2)
: 二つのハッシュをマージ
ハッシュ.delete(キー)
: 指定したキーを削除
ハッシュで繰り返し処理をする
hash.each do | key, value | puts "#{key} is #{value}." end
キーだけを繰り返すには
hash.each_key do | key | puts "#{key} is #{value}." end
ハッシュ.has_key?(キー)
: キーが存在するか判定
引数のペアを指定するとき
def メソッド名(キーワード1: デフォルト値1, キーワード2: デフォルト値2) end メソッド(引数1: オブジェクト1, 引数2: オブジェクト2)
class クラス名 def メソッド end end オブジェクト1 = クラス名.new オブジェクト2 = レシーバー(オブジェクト1).メソッド
インスタンス: クラスから作ったオブジェクト(特定のクラスに属する)
@インスタンス変数
: 同じオブジェクト内であれば複数のメソッドで使用可能
- attr_writer: インスタンス名
インスタンス変数へ代入するメソッドを定義
- attr_reader :インスタンス名
: インスタンス変数を戻り値とするメソッドを定義
- attr_accessor :インスタンス名
: 上記二つを行う
オブジェクト.instance_variables
: オブジェクトが持っているインスタンス変数を全て返す
def initialize
: オブジェクト作成時に最初に自動的に実行される
class test def self.クラスメソッド名 end
※クラスメソッドとインスタンスメソッドでのインスタンス変数は別
@@変数
: クラス変数
class クラス < スーパークラス end
.ancectors
: 継承関係を辿ることができるer
以下のようにprivate
をつけることで、レシーバーを指定してメソッドの呼び出しを禁止できる
class test def method1 end private def method2 end end
private_class_method
: クラスメソッドをprivateにする
他のクラスとメソッドを共有したい時に使用
class クラス名 include モジュール名 end
モジュールメソッドをクラスメソッドにする
class クラス名 extend モジュール名 end
同じクラスを複数の場所で使いたい時に、モジュールを使って名前をつけ分けることを「名前空間を作る」と呼ぶ。
クラス名(モジュール名)::クラス名(モジュール名)
: クラス名(モジュール名)を指定
インスタンスを作るときはクラスを使い、作らないときはモジュールを使う。
require_relative "ファイル名"
: ファイルを読み込む
require "Gem名"
begin # 例外が発生する可能性がある処理 rescue # 例外が発生した時に実行する処理(rescue節) end
beginとendは省ける
例外発生時に例外オブジェクトが代入される
begin # 例外が発生する可能性がある処理 rescue 例外クラス => オブジェクト # 例外が発生した時に実行する処理(rescue節) end
rasie "例外メッセージ"
: 例外メッセージを発生させる
begin # 例外が発生する可能性がある処理 rescue # 例外が発生した時に実行する処理(rescue節) ensure # 例外の発生有無に関わらず実行される処理 end
/正規表現パターン/
"文字列".match?(/パターン/)
: パターンにマッチするものあるか判定/文字列\z/
: 末尾が文字列で終わる/\A文字列/
: 先頭が文字列で終わる[文字群]
: 文字群のどれかとマッチ.
: 任意の一文字にマッチ文字*
: 文字が0回以上マッチ文字+
: 文字が1回以上マッチ"文字列".gsub("置換対象", "置換後")
: 文字列を置換(gsub!
で破壊的に変更)三宅 英明,大角 祐介著 「新しいLinuxの教科書」
コマンド | 内容 |
---|---|
/bin | Linuxシステムの動作に最低限必要な、重要度の高いコマンドを格納 |
/dev | デバイスファイルを格納 |
/etc | 設定ファイルを格納 |
/home | ホームディレクトリ(ユーザーにrwが与えられている) |
/sbin | 管理者向けコマンド格納 |
/tmp | 一時的なファイルを置く |
/var | 変化するデータを格納 |
コマンド | 内容 |
---|---|
Ctrl+k | カーソル位置から行末までを削除する |
Ctrl+u | カーソル位置から行頭までを削除する |
Ctrl+y | 最後に削除した内容を挿入する |
コマンド | 内容 |
---|---|
Ctrl+s | 画面表示をロックする |
Ctrl+q | 画面表示のロックを解除する |
Ctrl+c | 実行を終了 |
Ctrl+l | 画面を消去 |
コマンド | 内容 |
---|---|
Ctrl+r | 履歴を遡ってインクリメンタル検索 |
Ctrl+g | 検索結果を破棄し、プロンプトに戻る |
コマンド | 内容 |
---|---|
pwd | current directory |
ls ba??
:baで始まり全体の長さは4文
コマンド | 内容 |
---|---|
ls -l | 属性表示 |
ls -F | ファイルの種類表示 |
コマンド | 内容 |
---|---|
rm -r | directoryの中身も消す |
rmdir | 空のdirectoryを消す |
-r
: 再帰的に実行(再帰的とはディレクトリのさらに下にディレクトリがあるかを探して、最も深い階層にあるファイルやディレクトリを表示する方法)
コマンド | 内容 |
---|---|
cat -n | 閲覧&行番号表示 |
Ctrl+d | catコマンドから抜ける |
1画面ごとに表示して、上下にスクロール
コマンド | 内容 |
---|---|
Space or f | 1画面下にスクロール |
b | 1画面上にスクロール |
j | 1行下にスクロール |
k | 一行上にスクロール |
q | lessコマンド終了 |
検索
コマンド | 内容 |
---|---|
/ | 下方向検索 |
? | 上方向検索 |
n | 次の検索結果に移動 |
N | 前の検索結果に移動 |
コマンド | 内容 |
---|---|
ln -s リンク元ファイル名 リンク名 | シンボリックリンク作成 |
find 検索開始dir 検索条件 アクション
find . -name ファイル名(*.txtなど)
: ファイル名検索(*を使うときは'を忘れずに)find . -type ファイル種別
: 以下参照指定 | ファイル種別 |
---|---|
f | 通常ファイル |
d | directory |
l | シンボリックリンク |
locate オプション 検索パターン
find: ディレクトリツリーを下って全てのファイルを探す
locate: 事前にファイルパスのデータベースが作られており、データベースだけを検索するので、高速に動作する
ただし、以下のようなことが起こる
オプション | 内容 |
---|---|
-i | 大文字小文字区別しない |
-b | ファイル名を対象に検索(無いとパス名も検索対象) |
-a | AND検索(無いとOR検索) |
--help
: コマンド自身のヘルプ表示man コマンド
: lessコマンドを使ってマニュアル表示(-k
でキーワードからコマンドを探す)(lessと動作は同じ)which オプション コマンド
: 指定されたコマンド名をサーチパスから探して、見つかった実行ファイルのフルパスを表示
コマンド | 内容 |
---|---|
vi | 起動 |
:q | 終了(!をつけると編集内容を破棄して終了) |
:w | 保存(*w ファイル名 : ファイル名で保存) |
x | カーソル下削除 |
i | カーソルの左側に入力 |
a | カーソルの右側に入力 |
コマンド | 内容 |
---|---|
w | 前方に単語1つぶん移動する |
b | 後方に単語1つぶん移動する |
W | スペース区切りで前方に単語1つぶん移動する |
B | スペース区切りで後方に単語1つぶん移動する |
0 | 行頭に移動する |
$ | 行末に移動する |
行番号G | 行番号に移動 |
gg | 最初の行へ移動 |
G | 最後の行へ移動 |
コマンド | 内容 |
---|---|
d$ | 行末までをデリート |
d0 | 行頭までをデリート |
x、dl | 1文字をデリート |
dw | 単語1つをデリート |
dgg | 最初の行までをデリート |
dG | 最後の行までをデリート |
dd | 現在カーソルのある行を削除 |
プットはp
ヤンクはy
(上記の表のdをyに置き換えると同じ動きをする)
コマンド | 内容 |
---|---|
/<文字列> | 下方向に向かって<文字列>を検索する |
? | <文字列>上方向に向かって<文字列>を検索する |
n | 次の検索結果に移動する |
N | 前の検索結果に移動する |
:
を押した後に%s/置換元/置換後/g
コマンド | 内容 |
---|---|
j | 現在の行と下の行が連結される |
u | 元に戻す |
Ctrl+r | undoを取り消す(redo) |
コマンド | 内容 |
---|---|
alias 名前='コマンド' |
エイリアスの作成 |
type コマンド | エイリアスの確認 |
unakias コマンド | エイリアスの削除 |
command コマンド or \コマンド | エイリアスではなく明示的にコマンドを実行する |
変数名=値
: 変数の設定(値にスペースが必要な場合は'')※=の左右にはスペースを入れない
$変数名
で参照
既にあるパスに追記する場合はPATH=$PATH:追記パス
export シェル変数名
: 指定したシェル変数を環境変数にする(export 変数名='値'
で値も設定できる)
カスタマイズ例
※設定ファイルはコピーすること、必ず違うシェルを開いておきログインできなくなる事態を避けること
˜/.bash_profile
if [ -f̃˜ /.bashrc ]; then sourcee˜ /.bashrc fi
˜/.bashrc
LANG=ja_JP.UTF8 PS1='[\u@\h]\w\$' exportLESS='--no-init' set -o ignoreeof #コマンド履歴設定 shopt -s histappend HISTSIZE=1000000 HISTFILESIZE=1000000 export PATH="$PATH:$HOME/bin" #エイリアスの設定 alias ls='ls -F' alias la='ls -a' alias ll='ls -l' alias rm='rm -i' alias cp='cp -i' alias mv='mv -i' alias mkdir='mkdir -p'
記号 | ファイルのパーミッション | ディレクトリのパーミッション |
---|---|---|
r | 読み取り | ディレクトリに含まれるファイル一覧の取得 |
w | 書き込み | ディレクトリ下にあるファイル・ディレクトリの作成・削除 |
x | 実行 | ディレクトリをカレントディレクトリにする |
chmod [ugoa][+=][rwx] <ファイル名>
記号 | 意味 |
---|---|
u | オーナー |
g | グループ |
o | その他のユーザー |
a | ugo全て |
chmod <8進数の数値> <ファイル名>
記号 | 数字 |
---|---|
r | 4 |
w | 2 |
x | 1 |
<8進数の数値> = オーナー合計 グループ合計 その他のユーザーの合計
su
でスーパーユーザーに入るexit
で出る
基本sudo
の使用を推奨
メモリ上で実行状態にあるプログラム(Linuxカーネルから見た処理の単位)
ps
: 実行中のプロセス確認
ps xf
(-なし): 現在のユーザーが実行中の全てのプロセスを表示
kill %プロセスID
: プロセスを終了
シェルから見た処理の単位(パイプを繋ぐとジョブはコマンドライン全体で1つとなる)
jobs
: 現在のジョブ一覧(末尾に&がついていたら、バックグラウンド処理)fg %ジョブ番号
: フォアグラウンドへ(ユーザー入力を受け付けるジョブの状態)(数字をつけないとカレントジョブ(+)がフォアグラウンドになる)bg %ジョブ番号
: ジョブをバックグラウンドへ(コマンドの末尾に&をつけて実行することでバックグラウンドになる)kill %ジョブ番号
: ジョブを終了標準入出力:コマンドなどの処理の流れの入出力を表しており、標準入力をキーボードやファイル、標準出力と標準エラー出力をディスプレイやファイルと自由に選択できる
標準入出力先を変更する機能
コマンド < ファイルなど
: 入力リダイレクトコマンド > ファイルなど
: 出力リダイレクトコマンド 2> ファイルなど
: エラー出力リダイレクトコマンド 2>&1 ファイルなど
: 出力&エラー出力リダイレクト>
を>>
にすると追記※基本はこっちを使う
/dev/null
: 入力や出力をnullにする
- コマンド >> /dev/null
などでエラーだけを表示
- コマンド >> /dev/null 2>&1
で何も表示しない
1つのコマンドの結果を別のコマンドに直接送り込んでコマンドを連携させる
コマンド1 | コマンド2 | コマンド3
: コマンド1→コマンド2→コマンド3
history
: コマンドライン履歴表示
標準入力を入力とし、標準出力を出力とするコマンド
コマンド | 内容 |
---|---|
cat | 入力をそのまま出力する |
head | 先頭の部分を表示する |
tail | 末尾の部分を表示する |
grep | 指定した検索パターンに一致する行だけを表示する |
sort | 順番に並べ替える |
uniq | 重複した行を取り除く |
tac | 逆順に出力する |
wc | 行数やバイト数を出力する |
フィルタ例
history | head
: コマンド履歴を最初の10行だけ表示du -b パス | sort -n
: ファイルサイズの小さい順に並べ表示(-n
: 数値で指定)du -b パス | sort -n | tac
: ファイルサイズの大きい順に並べ表示(`sort -rn': 逆順に数値を並べ表示)ps x | sort -k 5
: コマンド順に並べ表示(-k
: フィールドで指定)
※sort
はオプションなしではASCII順に並べる条件に合致する文字列集合を表現するための記法
文字列検索(使用頻度多い)
grep オプション 検索パターン ファイル名
オプション | 内容 |
---|---|
-n | 行番号表示 |
-i | 大文字小文字区別せず |
-v | マッチしなかった行を表示 |
正規表現は''で囲んで指定する
メタ文字 | 意味 |
---|---|
. | 任意の1文字にマッチ |
[文字列] | 特定の文字のどれかにマッチ([a-zA-Z]などの指定、[^文字]で指定した文字以外とマッチ) |
|メタ文字を打ち消す | |
^文字列 | 行頭の文字列を指定しマッチ |
文字列$ | 行末の文字列を指定しマッチ |
文字* | 0回以上の繰り返しとマッチ |
grep -v ^$ ファイル名
: 空行だけ取り除いて表示
^ex.*txt$
: exで始まってtxtで終わる行
-E
オプションをつける
記号 | 意味 |
---|---|
文字+ | 1回以上の繰り返しとマッチ |
文字? | 0回または1回の繰り返し |
{m,n} | m回以上n回以下の繰り返し |
(文字列) | 文字列のグループ化 |
| | OR条件 |
行数・単語数・バイト数を数えるコマンド
オプション | 内容 |
---|---|
-l | 行数表示 |
-w | 単語数表示 |
-c | バイト数表示 |
重複した行を取り除く(重複行が連続していない場合は取り除かれない)
sort ファイル名 | uniq
: ソートして重複した行を取り除く(基本セットで使う)
uniq -c
: 重複数を数える
cut -d 区切り文字 -f フィールド番号 ファイル名
: 区切り文字で指定した文字で入力行を分割し、その中のフィールド番号(行において何番目か)で指定したものを出力
tr 置換前の文字 置換後の文字
例:cat file | tr abc BCD
: a→B、b→ C、c→Dと置き換えている(a-zならaからzまで)
tr -d 削除文字
: "\n"
を削除文字に指定すると改行を全て削除する
-n 行数
で表示する行数を選択
-f ファイル名
: ファイルを監視する
ファイルの差分を表示
diff オプション 比較元ファイル 比較先ファイル
記号 | 意味 |
---|---|
<範囲1>a<範囲2> | 1つ目のファイルの範囲1の後に、2つ目のファイルの範囲2の内容が追加された |
<範囲1>c<範囲2> | 1つ目のファイルの範囲1の箇所が、2つ目のファイルの範囲2の内容に変更された |
<範囲1>d<範囲2> | 1つ目のファイルの範囲1の箇所が削除された |
ハンク(hunk): 差分表示ひとかたまり
-u
: ユニファイド形式
@@ -1つ目のファイルの変更開始行,変更行数,+2つ目のファイルの変更開始行,変更行数@@
「Stream Editor」の略。非対話型エディタ。 編集結果を標準出力として出力するので、元のファイルは変更しない。
sed オプション スクリプト 対象ファイル
スクリプトは「アドレス コマンド」や「コマンド 引数 プラグ」の組み合わせでできている(基本''で囲ったほうがいい)。
コマンド | 内容 |
---|---|
d | 行を削除 |
p | 行を表示 |
s | 行を置換 |
アドレス例 | 意味 |
---|---|
1d | 1行目を削除 |
2,5d | 2~5行目を削除 |
3,$d | 3行目から最終行までを削除 |
d | 全て削除 |
/^B/d | 先頭がBで始まる行を削除 |
コマンドp
の注意点:sedコマンドは行をパターンスペースにコピーしてから、パターンスペースに編集コマンドを実行し、最後にパターンスペースの内容を出力する。
パターンスペースを表示させないようにするには-n
オプションを使う。
s/置換前文字列/置換後文字列/フラグ
フラグなしだと一つだけ置換。g
フラグで全て置換
sed -n 's/!//gp' ファイル名
で置換が発生した行だけを表示
sed -r 's/My (.*)/--\1--/'
テキストの検索や抽出・加工などの編集操作を行うコマンド。「オーク」と読む。
awk オプション スクリプト 対象ファイル
スクリプトは「パターン { アクション }」で構成されている。 パターン:アクションを実行するかどうかの条件(処理中に読み込んでいく1行の入力テキストをレコードと呼ぶ)。 アクション:テキストの編集処理
print
: アクションを記述
$(NF-1)
とすると最後から数えて1番目となる)$1,$2
でスペースをつけて出力される($1 $2
だとスペースが消える)正規表現は/でかこむ。
例:第9フィールドの先頭がcpの文字列ならば5,6フィールドを出力(~
は正規表現の比較)
awk '$9 ~ /^cp? {print $5,$9}'
END{アクション}
: 全ての入力ファイルを処理し終えてから最後に実行{print $0}
が実行され)出力される。-F区切り文字
: 区切り文字の変更(-F,
など)NR
:これまで読み込んだレコード数が代入されている組み込み関数-f
を使用)$ cat average.awk {sum += $NF} END{print "Average:",sum/NR} $ awk -F -f average.awk score.csv Average 53:833
シバン
#!/bin/bash
(shebang(シバン))を最初の行に入れる。これにより「このシェルスクリプトは/bin/bashで動かします」という宣言をする。
$ ./test.sh
→$ /bin_bash ./test.sh
と実行される。
source 指定したファイルの内容をそのままコマンンドラインに入力した時と同じように実行する(シバンいらない)。設定ファイルの実行などに使われる。
※実行後は元のシェル(カレントシェル)にも影響をおよぼすことに注意。
./test.sh
はサブシェル(現在のシェルから起動される子プロセス)で実行される(サーチパス(`$PATH)にはカレントディレクトリが登録されていないため相対パス指定してる)。
sourceコマンドをしようするときは、必ずパスを明示する(サーチパスを自動的に探してしまうため、予期せぬファイルをsourceコマンドで読み込んでしまう危険性がある)。
;
で区切ることで1行にまとめて書く事ができる\
を末尾に置くことで改行できる$
をつけない(参照時のみ使用)=
の前後にはスペースを入れない$( コマンド )
でコマンドを記述
if [ "a" = "b" ]; then elif コマンド; then else fi
[ "a" = "b" ]にはすべてスペースがある([は条件式開始のコマンド)。
コマンド1 && コマンド2
:コマンド1が正常終了した時だけコマンド2を実行する(if文でAND条件として使用可能)コマンド1 || コマンド2
:コマンド1が正常動作しなかった時だけコマンド2を実行する(if文でOR条件として使用可能)exit 終了ステータス
:シェルスクリプトが別のプログラムから呼ばれた際にエラー処理可能
for 変数名 in リスト do done
seq 開始値 終了値
:数値列を出力する"$@"
: 全てのコマンドライン引数を出力する指定された文字列がパターンにマッチするかどうかを判断し、マッチしたパターンに対応する処理を行う
case 文字列 in パターン1) 処理1 ;; パターン2) 処理2 ;; *) 例外処理 ;; esac
文字列 | 文字列
: 複数のパターンのOR条件記述
while コマンド do done
$((数式))
: 文字列を計算式として扱う
local
でlocal関数を定義(何も宣言しなければglobal関数となる)。
以下のようにfindとxargsを組み合わせれば、サブディレクトリ内のファイルまで含めて任意のコマンドを実行できる。
find . -type f -name '*.txt' | xargs ls -l
APT(Advanced Packaging Tool) APTはリポジトリにあるパッケージをその依存関係に基づいてダウンロードし、システムにインストールするツール。
apt-get オプション コマンド パッケージ名 apt-cache オプション コマンド パッケージ名
パッケージインストール
sudo apt-get install パッケージ名
パッケージ検索
apt-cache search 検索ワード
--names-only
でパッケージ名だけ検索
「リポジトリ」の情報を管理するのが「sources.list」と呼ばれるファイルである(/etc/apt/sources.listas)。