Keep Coding!

A fearless adventure in knowing what to do when no one’s there telling you what to do.

配属されて一月たったので良く使うコマンドの話。

東京暑いですね。(東北比較)

ぼくは、さいきん浴衣の女の子の良さに目覚めました。

(๑˃̵ᴗ˂̵)و


さて、4月に就職してから3ヶ月の研修期間を終えて、7月にようやく部署配属となりました。

配属されてこの1ヶ月は、AWSとかGCPをWebからポチポチしたり電話番とか電話番とか電話番を主にしています。

そして、さいきんは少しShellScriptでツールを作ったりしています。

そこで、良く使うShellコマンドとかをまとめておこうかなと思います。

1. find

ファイルを検索するコマンドです。

$ ls
app      bootstrap      composer.lock  database     package.json  public     resources   storage  vendor
artisan  composer.json  config         gulpfile.js  phpunit.xml   readme.md  server.php  tests

$ find ./app/ -name "*.php"
./app/Console/Commands/Inspire.php
./app/Console/Kernel.php
./app/Events/Event.php
./app/Exceptions/Handler.php
./app/Http/Controllers/Auth/AuthController.php
./app/Http/Controllers/Auth/PasswordController.php
./app/Http/Controllers/Controller.php
./app/Http/Controllers/TaskController.php

$ find ./app/ -name "Auth*.php"
./app/Http/Controllers/Auth/AuthController.php
./app/Http/Middleware/Authenticate.php
./app/Providers/AuthServiceProvider.php

$ find ./app/ -name "Auth*.php" | xargs echo "chmod 755"
chmod 755 ./app/Http/Controllers/Auth/AuthController.php ./app/Http/Middleware/Authenticate.php ./app/Providers/AuthServiceProvider.php

みたいな感じ。

ワンライナーで実行するのは危険なので、echoで一回挟むと良いそうです。

2. xargs

しれっと使ってますが、findとかで検索して実行結果のファイル名を渡して、まとめて削除したり権限を変えたりとかに使えます。

$ find ./app/ -name "Auth*.php"
./app/Http/Controllers/Auth/AuthController.php
./app/Http/Middleware/Authenticate.php
./app/Providers/AuthServiceProvider.php
# この3つを....

$ find ./app/ -name "Auth*.php" | xargs echo "chmod 755"
chmod 755 ./app/Http/Controllers/Auth/AuthController.php ./app/Http/Middleware/Authenticate.php ./app/Providers/AuthServiceProvider.php
# 引数に渡せる

3. grep

ファイルの中の文字列とかを検索できる。

$ grep -r "Task" ./app
./app/Http/Controllers/TaskController.php:class TaskController extends Controller{
./app/Http/Controllers/TaskController.php:      $query = Task::query()->select('*')->where('status', '=', Task::STATUS_INCOMPLETE)->orderBy('updated_at', 'desc');
./app/Http/Controllers/TaskController.php:    $completedTodos = Task::whereStatus(Task::STATUS_COMPLETED)->orderBy('completed_at', 'desc')->get();
./app/Http/Controllers/TaskController.php:    $trashedTodos = Task::onlyTrashed()->get();
./app/Http/Controllers/TaskController.php:    return View::make('pages.tasks.index', compact('incompleteTasks', 'completedTasks', 'trashedTasks'));
./app/Http/Controllers/TaskController.php:    $task = Task::create([
./app/Http/Controllers/TaskController.php:      'status' => Task::STATUS_INCOMPLETE,
./app/Http/Controllers/TaskController.php:    $task = Task::find($id);
./app/Http/Controllers/TaskController.php:        'completed_at' => $input['status'] == Task::STATUS_COMPLETED ? new DateTime : null,
./app/Http/Controllers/TaskController.php:    $task = Task::find($id);
./app/Http/Controllers/TaskController.php:    $task = Task::find($id);

4. sed

いろいろな用途があるみたいですが、主に文字列の置換に使ってます。

$ cat server.php | sed -e 's/php/php_php/g'
<?php_php

雑だけどこんな感じ。

5. cut

タブで区切られているtsvファイルから、指定の列を抜き出すコマンド。

区切り文字を指定できるので、タブ以外でも抜き出せる。

$ cat test.tsv
A   B   C   D
E   F   G   H
I   J   K   L

$ cat test.tsv | cut -f1
A
E
I

$ cat test.txt
A B C D
E F G H
I J K L

$ cat test.tsv | cut -d " " -f1
A
E
I

スペース区切りなら、awkとかもあるけどね。

おわり