- 投稿日:2020-08-01T22:42:06+09:00
VirtualBox上で動くUbuntuの解像度を変更する
- 投稿日:2020-08-01T17:04:59+09:00
[Ruby] 別ユーザで外部コマンドを実行する
前提
- Ruby 2.7
- Ubuntu 20.04
- あんまり深く考えてない
以下の
test.sh
というファイルを、superuser な Ruby から特定のユーザで起動したい。#!/bin/bash echo "test.sh ok" id実装
gid = 1001 uid = 1001 pid = fork do exit 127 unless Process::GID.change_privilege(gid) == gid exit 127 unless Process::UID.change_privilege(uid) == uid begin exec './test.sh' rescue # Errno::ENOENT exit 127 end exit 127 # なんかそれ以外のケース end res = Process.waitpid(pid) puts 'complete' p $?実行結果
$ sudo ruby a.rb test.sh ok uid=1001(****) gid=1001(****) groups=1001(****),0(root) complete #<Process::Status: pid 75202 exit 0>注意点
spawn
にはユーザを変更するような機能は無いので、fork
してからexec
する。- 全部成功する前提であればこれは楽なんだけれども。失敗するケースのエラーハンドリングを考えたい。
fork
しており別プロセスなので、変数は共有出来ないはず。IO.pipe
も馬鹿っぽいabort
すると、exec成功時のアプリケーションで失敗したケースと見分けがつかない。- そこで、終了コード
127
(つまりENOENT
)で失敗を伝える。exec成功時のアプリケーションで127
を返されると見分けつかないが、それは無いとしておく。
- 投稿日:2020-08-01T16:19:26+09:00
IBusで全角半角を切り替えるショートカットを設定する方法
- 環境
- CentOS Linux release 7.8.2003 (Core)
- IBus 1.5.17
- [Preferences]からダイアログを表示する
- [General]タブ > [Keyboard Shortcuts] > [Next input method:] > [...]ボタンでダイアログを表示する
- [Key code:]と[Modifiers:]を設定する
- [Add] > [Apply] > [OK]ボタンでダイアログを閉じる
- [Close]ボタンでダイアログを閉じる
- 投稿日:2020-08-01T15:42:32+09:00
Ubuntu20.04にdropboxをインストールして実行
※ この記事は個人で実行してみた際にうまく行った方法を記しただけで、検証・考察して得た方法ではありません。
※ ほとんど以下の公式サイトに書いてあるとおりです。
https://www.dropbox.com/install-linux手順
1. インストール
以下のコマンドを実行してインストール
cd ~ && wget -O - "https://www.dropbox.com/download?plat=lnx.x86_64" | tar xzf -2. ログイン、登録
以下のコマンドを実行してDropboxデーモンを起動
~/.dropbox-dist/dropboxdサーバーで初めて Dropbox を実行する場合、使用中のブラウザでリンクをコピーして貼り付けて新規アカウントを作成するか、既存のアカウントとサーバーを連携させるように指示が表示されます。その後、Dropbox フォルダがホーム ディレクトリに作成されます。(上記公式HPより)
作成された~/Dropboxにファイルを入れると同期されるようになる。
上記プログラムを終了してしまうと、自動同期されないので以下のプログラムの実行などが必要3. 同期させるためのプログラムの実行
公式サイト(以下URL)の下部から"Pythonスクリプト"をダウンロードする
https://www.dropbox.com/install-linuxダウンロードしたpythonプログラムを実行
python3 dropbox.py startこれで自動で同期されるようになる。
python2だとそのままでは実行できない点に注意。
- 投稿日:2020-08-01T11:20:23+09:00
【ln】ディレクトリのシンボリックリンクの貼り方がややこしい
サーバーにプロジェクトをデプロイする際に、公開フォルダのみをドキュメントルートに置きたかった。
やりたいこと
ざっくりこんな感じのツリーがあったとする。
root ├── project │ ├── etc │ └── public │ ├── index.html │ ├── css │ └── js └── public_html └── projectやりたいこととしては,
/root/public_html/project
に
/root/project/public
へのリンクを張りpublic_html └── project ├── index.html ├── css └── jsという見え方をする状態。
lnコマンドでシンボリックリンクを張る
失敗
$ cd /root/public_html $ ln -s /root/project/public project結果
$ ls -l drwx---r-x projectリンク貼られてない。
$ cd project $ ls -l lrwxrwxrwx public -> /root/project/public/root/public_html/project
の下にpublicというリンクができてしまった。
失敗なのでいったん消す。$ rm publicディレクトリの中身をリンクする
lnコマンドの際に「/」付けるかどうかで挙動が変わるらしい。
再挑戦。$ cd /root/public_html $ ln -s /root/project/public/ project $ ls -l lrwxrwxrwx index.html -> /root/project/public/index.html lrwxrwxrwx css -> /root/project/public/css lrwxrwxrwx js -> /root/project/public/jsできた。
この方法だと、
/root/public_html/project
というディレクトリが実体としてあった上でリンクが貼られる。
なので、
/root/public_html/project
がない状態でこれをやろうとすると怒られた。ディレクトリそのものをリンクする
一旦既存のディレクトリ消す。
$ pwd /root/public_html $ rm -rf project$ ln -s /root/project/public project $ ls -l lrwxrwxrwx project -> /root/project/publicこれもリンクは貼れた。
こっちはprojectそのものがリンクになる。まとめ
レンタルサーバーで試したところ、「ディレクトリそのものをリンクする」だと、後ほど勝手に空のディレクトリに上書きされてしまった。
サーバーの設定でドメイン(サブドメイン)名のディレクトリが自動で作られるようなので、ディレクトリと認識されずに上書きされたのだろうか。なので今回は
「ディレクトリの中身をリンクする」方法を採用。時と場合によって使い分ける感じかな。
- 投稿日:2020-08-01T08:27:09+09:00
エイリアスの作成(引数が複数ある場合)【BashとPowerShellの比較】
Bash
コマンド形式
$ alias エイリアス名="コマンド名 引数1 引数2 ... 引数N"使用例
例として、tmuxに関するエイリアスを記載してみたいと思います。
# エイリアス「ton」を作成 $ alias ton='tmux set-window-option synchronize-panes on' # エイリアス「toff」を作成 $ alias toff='clear; tmux set-window-option synchronize-panes off'ちなみに、これらのエイリアス(
ton
とtoff
)の意味は以下のURLを参照。
tmuxで複数のペインに対して同時にコマンドを実行する
tmuxで複数サーバの同時オペレーションPowerShell
コマンド形式
存在しない。
自作で引数ありのエイリアスを作成します。引数ありの自作エイリアス関数のフォーマットはかなりコテコテで、以下のように書きます。
Microsoft.PowerShell_profile.ps1function エイリアス名() { コマンド名 引数1 引数2 ... 引数N }ただし
Microsoft.PowerShell_profile.ps1
というファイルに記載しないと、エイリアスとして有効になりません。
Microsoft.PowerShell_profile.ps1
の場所は、以下のコマンドで一発です。> echo $profile C:\Users\ユーザ名\Documents\WindowsPowerShell\Microsoft.PowerShell_profile.ps1もし
Documents
フォルダ下にWindowsPowerShell\Microsoft.PowerShell_profile.ps1
が無かったら、フォルダごと自分で作っちゃえばOKです。使用例
例として、PowerShellからWordを起動するエイリアスを記載してみたいと思います。
Microsoft.PowerShell_profile.ps1# Wordを開く function word() { $WORD_PATH = "C:\Program Files\Microsoft Office\root\Office16\WINWORD.EXE" if ( $args ) { # 開きたいファイルがある場合 Start-Process $WORD_PATH $args } else { # 単にWordだけを起動したい場合 Start-Process $WORD_PATH } }エイリアス作成後は、
Microsoft.PowerShell_profile.ps1
を.(ドット)
で読み込ませます。
$profile
がMicrosoft.PowerShell_profile.ps1
ですよ!!> . $profile # 「.(ドット)」で読み込みちゃんとエイリアスが作成できれば、PowerShellで
word
を実行するだけで、Wordが起動します。エイリアス専用のファイルとして分けたい場合
【ここをクリックして開く】エイリアス専用のファイルとして分ける
- まず、エイリアス専用のファイルを作ります。
ここではpowershell_aliases.ps1
をMicrosoft.PowerShell_profile.ps1
と同じフォルダ下に作成します。
- 続いて
Microsoft.PowerShell_profile.ps1
を開きましょう。> vim $profile # vimが無い人は「notepad」で開きましょう!! > notepad.exe $profile
Microsoft.PowerShell_profile.ps1
にエイリアス専用のファイルpowershell_aliases.ps1
を読み込ませます。
エイリアス専用ファイルの場所は絶対パスで指定しましょう。Microsoft.PowerShell_profile.ps1# エイリアス専用ファイルの読み込み $ALIASES = "C:\Users\ユーザ名\Documents\WindowsPowerShell\powershell_aliases.ps1" . $ALIASES # 「.(ドット)で読み込ませます」
- エイリアス専用ファイル
powershell_aliases.ps1
に、お好きなエイリアスを作って行きます。> vim "C:\Users\ユーザ名\Documents\WindowsPowerShell\powershell_aliases.ps1" # または notepad で開く > notepad.exe "C:\Users\ユーザ名\Documents\WindowsPowerShell\powershell_aliases.ps1"
- 最後に
Microsoft.PowerShell_profile.ps1
を.(ドット)
で読み込ませて、エイリアスを反映させます。powershell_aliases.ps1
ではなくMicrosoft.PowerShell_profile.ps1
を読み込ませます。> . $profile # 「.(ドット)」で読み込み終わり。