Memo
最新の 8 件
[情報技術] ACL(Access Control Lists)で権限管理
LinuxでディレクトリーのPermission(権限)を確認して
$ ls -l testdir
drwxr-x---+ 2 root root 4096 3月 5 09:45 testdir/
のようになっている場合、つまり権限文字列の末尾に「+」がついている場合、そのディレクトリーはACFで管理されています。
現在の設定を確認するコマンドは「getfacl」です。
$ getfacl testdir
# file: testdir
# owner: root
# group: root
user::rwx
user:test:r-x
group::r-x
mask::r-x
other::---
所有者も所有グループもrootですが、「user:test:r-x」とある通り、ユーザー「test」には読み込み・実行の権限があります。
ユーザー「test2」にもtestと同じ権限を与えたいときは、コマンド「setfacl」を使います。
$ setfacl -m u:test2:rx ./testdir
権限を削除するときは
$ setfacl -x u:test2 ./testdir
のように「-x」を使います。
詳しくはマニュアルを参照してください。
2026-05-03 (Sun) by Canaid SK
[情報技術] Linuxのパーミッション「S」
ディレクトリやファイルの権限が「rws」の場合、特権ビット「setuid (4000)」「setgid (2000)」または「sticky (1000)」が付与されています。特権ビットが付与されたファイルは、rootで実行時に所有者に権限が切り替わります。グループに特権ビットが付与されたディレクトリでは、作成したファイルのグループが所有者のグループになります。
実行権限「x (1)」が付与されていない場合、「rwS」のように s が大文字になります。
2026-05-03 (Sun) by Canaid SK
[情報技術] JavaのJARファイルの作り方
JavaのJARファイルを作る最も簡素な流れは、以下の通りです。
- javaファイルにコードを書く。(例:A.java)
- javaファイルをコンパイルする。(例:javac A.java)
- jarファイルを作る。(例:jar cfm A.jar A A.class)
- jarファイルを実行する。(例:java -jar A.jar)
順に説明します。
●A.java
何でも良いですが、簡単なのを適当に作ります。
public class Test {
public static void main(String[] argv) {
System.out.print("option: ");
if (argv.length == 0) System.out.println("none");
else System.out.println(argv[0]);
}
}
●javac A.java
`A.java`をコンパイルすると、`A.class`というファイルが生成されます。
●jar cfm A.jar A A.class
- jar: jarコマンド
- cfm: c (create) f (output file) m (manifest) を指示するオプションです。順番が大切です。この後に続くファイル名は、ここで指示した順番通りでなければいけません。
- A.jar: 出力するJARファイルの名前
- A.class: JARファイルに含めるクラスファイル
●java -jar A.jar
JARファイルを実行します。次の結果になればOKです。
$ java -jar A.jar
option: none
$ java -jar A.jar test
option: test
2026-04-03 (Fri) by Canaid SK
[情報技術] LinuxのCUIで音量を変更する
音量(ボリューム)をCUIから変更するなら、ツールを導入するのがよいです。基本的なものとして次のものがあります。
いずれもコマンドラインツールがあります。
コマンドで何ができるかは、`--help`オプションで確認してください。
$ pamixer --help
音量を確認するには、
$ pamixer --get-volume
最大値は100です。
音量を設定するには、
$ pamixer --set-volume 50
これで音量は50%になります。
2026-03-30 (Mon) by Canaid SK
[情報技術] curlでIPを指定(名前解決)してウェブサイトを表示
curlでウェブサイトにアクセスすると、コンテンツが返ってきます。ネームサーバーを通さずドメイン(ホスト名)とIPを直接結びつけてアクセスするには、次のようにコマンドを書きます。
$ curl --resolve {host}:{port}:{ip} {address}
- {host}: 解決したいドメイン(ホスト名)
- {port}: 接続するポート番号
- {ip}: ドメインと紐つけるIPアドレス
- {address}: アクセス先(http:// や https:// を省いたもの)
2026-03-06 (Fri) by Canaid SK
[情報技術] ウェブサイトごとにPHPバージョンを決める
以下の条件が揃っていれば、.htaccessに設定を記述するだけでウェブサイトごとにPHPバージョンを決められます。
- ウェブサーバー:Apache2
- FastCGI:導入済み
- php-cgi:様々なバージョンが導入済み
- ScriptAlias:/cgi-bin/ に指定されているPathが実在し、そのPathにphp7.4等の実行ファイル(CGI版PHP)がある。(*1)
- .htaccess:使える
- .htaccessでAddHandler:使える
- .htaccessでAction:使える
.htaccessに記述するコードは2行です。
Action myphp /cgi-bin/php7.4
AddHandler myphp .php
- myphp:任意の文字列。自分がわかりやすいように独自のものを決めます。
- /cgi-bin/:Apacheで設定されているScriptAliasのURL-Pathです。
- php7.4:数字でバージョンを指定しています。ディストリビューションによっては `php74` などとなっています。環境に合わせて変更してください。
- .php:拡張子phpのファイルを紐つけています。拡張子htmlを追加で紐つけるなら `.php .html` と半角スペース区切りで指定します。
拡張子htmlを追加する件について、どこかの個人の記事で「さくらのレンタルサーバーだと↓のように設定したのに動かない」と書かれているのを見かけましたが、それはCGI版PHPを使っているからだと思います。下記のハンドラーはモジュール版PHP用です。
AddHandler application/x-httpd-php .html
*1 CGI版PHPとCLI版PHPは挙動が違います。必ずCGI版PHPを使います。CLI版を使った場合は、「End of script output before headers」という具合のエラーが出るでしょう。
2026-01-28 (Wed) by Canaid SK
[情報技術] メールフォームからのメールがGmailに届かない
「ウェブサイトのメールフォームから送られるメールが、Gmailにだけ届かない」という場合、Gmail以外にメールを送り、ヘッダーを確認してください。着目点は
Return-Path: ***
の「***」部分です。「***」はメールアドレスになっていると思いますが、恐らくそのアドレスのホスト名とSPFに記載のIPアドレスが不一致です。SPFが設定されていない場合は、もとより一致するはずがありません。
PHPのmail()関数を使ってメールを送る場合は、5番目の引数であるadditional_paramsにSenderアドレスを設定してください。`-f` オプションを使います。
例えば次のようにします。
mail({送信先}, {題名}, {本文}, "From: {送信元}", "-f{送信元}");
{送信元}のホスト名は、メールフォームが設置されているウェブサイトのドメインと同じである、または同じIPを引いていることが前提です。
正しく設定できていれば、メールフォームから送られてきたメールのヘッダーに
Return-Path: {送信元}
という情報があるはずです。
2026-01-28 (Wed) by Canaid SK
[情報技術] vimで使われている画面描写ライブラリ「ncurses」
vimがCUIでどうやって画面を作っているのかが気になったのでソースコードを読んだところ、画面描写のところで「ncurses」が見つかりました。ncursesはC言語で作られたライブラリで、ターミナルに依存しないテキスト・ユーザー・インターフェース作成用APIのライブラリだそうです。
試しにncursesを使って画面描画をしてみました。
"ncurses.c" という名前のファイルを作り、そこにCのコードを書いていきました。書いたら保存して、手頃なCコンパイラ(わたしはgcc)でコンパイルして、できた実行ファイルを実行して確認です。コンパイル時に「関数が定義されていない」とエラーが出る場合は、オプション "-l" でライブラリをリンカーに渡してみてください。
/**
* COMPILE Example
* $ gcc ncurses.c -o ncurses -lncurses
*/
#include <ncurses.h>
#include <stdlib.h>
int main() {
// ncursesの初期化
initscr(); // 画面の初期化
start_color(); // カラーのサポートを開始
// カラーの初期化
init_pair(1, COLOR_RED, COLOR_BLACK); // 赤色の色ペアを定義
// カーソルを非表示に
curs_set(0);
// カーソルを特定の位置に移動
mvprintw(10, 10, "Hello, Terminal using ncurses!");
// 色を適用
attron(COLOR_PAIR(1)); // 色ペアを使用
mvprintw(12, 10, "This text is red!");
attroff(COLOR_PAIR(1)); // 色ペアの適用を解除
// 更新を行う
refresh();
// キー入力を待つ
getch();
// ncursesの終了
endwin();
return 0;
}
2026-01-10 (Sat) by Canaid SK
過去ログを見る
sknote2 v2.0.2 © CANADOH