20210428のLinuxに関する記事は8件です。

何でもかんでもsudoすればいいってもんじゃないらしいぞ!

そうらしいな!
  • このエントリーをはてなブックマークに追加
  • Qiitaで続きを読む

Linuxのローカライゼーション

lpicの勉強をしていて普段ロケールを使うことがないので忘れないようにまとめます。 ローカライゼーション ローカライゼーション(localization)とは言語や通貨の単位、日付の書式などを国や地域に合わせること。 これを国際化(internationalization)と言う。(i18n)と略される。 主なロケール カテゴリ lpicの本でピックアップされているロケールのカテゴリをまとめます。 LC_CTYPE : 文字の種類などの規定 LC_COLLATE : 文字の照合や整列に関する規定 LC_MESSAGES : メッセージ表示に使用する言語 LC_NUMERIC : 数値に書式に関する規定 LC_TIME : 日付や自国の書式に関する規定 環境変数LC_ALLを使用すると全てのカテゴリでその値が使われる。LANGが設定されていれば全てのカテゴリでその値が使われるが、個々の設定が可能(デフォルト値のような感じ)。 ロケール名 C, POSIX : 英語 ja_JP.utf8(ja_JP.UTF-8) : 日本語/Unicode ja_JP.eucJP : 日本語/EUC-JP ja_JP.shiftJIS : 日本語/シフトJIS en_US.utf8 : 英語(米)Unicode localeコマンドを使うと現在のロケールを表示する。 -aオプションで設定可能なロケールの表示。 -mで利用できる文字コードの表示。 その他のロケール名。 ロケールの一時的な変更 変数名=ロケール名 コマンドのように指定する。 例えば一時的に英語にしたい場合。 LANG=C man ls とするとlsのマニュアルを英語で表示する。 文字コード これも本にまとめられているもののみ載せます。 ASCII : 7ビットで表される基本的な128種類の文字。 ISO-8859 : ASCIIを拡張した8ビットの文字コードで256種類の文字。 UTF-8 : Unicodeを使用した文字コードで、1文字を1~6バイトで表す。 EUC-JP : UNIX環境で標準的に利用されていた日本語の文字コード。 SHIFT-JIS : Windowsで利用される日本語の文字コード。 ISO-2022-JP : 電子メールなどで使用される日本語の文字コード(JISコード)。 文字コードの変換にはiconvコマンドを使う。 iconv -f 文字コード -t 文字コード ファイルなど オプションは、-fはfrom。-tはtoなどで覚えられそう。 iconv -lで扱える文字コードの一覧を表示できる。 ファイルの文字コードが不明な場合、nkf -g ファイル名で文字コードを確認できる。 間違いがございましたらご指摘ください。
  • このエントリーをはてなブックマークに追加
  • Qiitaで続きを読む

nkfコマンドでファイルの文字コードと改行コードを統一する

nkfは「Network Kanji Filter」の略であり、文字コードと改行コードを変換するコマンドです。 異なるOS(WindowsやLinux)でファイルを共有するときの問題を解決します。 今回はLinux上でnkfコマンドを利用して、文字コードと改行コード以下に統一します。 文字コード: UTF-8(BOMなし) 改行コード: LF(Unix系) nkfコマンドのインストール 以下のコマンドでnkfをインストールできます。 # CentOS7 sudo yum install -y nkf # CentOS8 sudo dnf install -y --enablerepo=PowerTools nkf # ubuntu sudo apt install -y nkf ファイル変換 以下のテキストファイルを変換します。 test.txt test あえて、文字コードはUTF-8(BOMあり)で改行コードはCRLF(Windows系)にしてあります。 cat -e test.txtで確認すると、BOMが入っていることと改行コードがCRLFになっていることを確認できます。 $ cat -e test.txt M-oM-;M-?test^M$ M-oM-;M-?はBOMであり、^M$は改行コードのCRLFです。(^MがCR、$がLF) 文字コードの変換 まずは文字コードをUTF-8(BOMなし)に変換します。-wオプションで変換ができます。 $ nkf -w test.txt test^M$ 改行コードの変換 次に改行コードをLFに変換します。-dオプションで変換できます。 $ nkf -d test.txt M-oM-;M-?test$ まとめ もちろんオプションを併用することもできるので、一括で変換する場合は以下になります。 --overwriteオプションを指定すると、指定ファイルが上書きされます。 オプションがない(デフォルト)だと標準出力に結果が出力されます。 $ nkf -wd --overwrite test.txt $ cat -e test.txt test$ Reference UTF-8のhttpd.confでエラー - think-t の晴耕雨読 【 nkf 】コマンド――文字コードと改行コードを変換する:Linux基本コマンドTips(51) - @IT
  • このエントリーをはてなブックマークに追加
  • Qiitaで続きを読む

Gtk3アプリのTreeViewの表示

Gtk3のTreeViewの表示 GtkSharpチュートリアルに書かれているサンプルをコピペするだけでTreeViewを表示できます GtkSharp TreeView Tutorial Gladeの編集 GladeにtreeViewを追加をします 不要なコントロールは削除しました TreeViewにIdのところに名前をつけます TreeVieIDを定義します。 Gtk3Sharpテンプレートにあった余分なイベントハンドラーは削除しました。 using System; using Gtk; using UI = Gtk.Builder.ObjectAttribute; namespace treeViewGtkApplication { class MainWindow : Window { [UI] private TreeView _treeView1 = null; public MainWindow() : this(new Builder("MainWindow.glade")) { } private MainWindow(Builder builder) : base(builder.GetRawOwnedObject("MainWindow")) { builder.Autoconnect(this); _mkTreeView(); } void _mkTreeView() { Gtk.TreeViewColumn artistColumn = new Gtk.TreeViewColumn (); artistColumn.Title = "Artist"; // アーティスト名を表示するテキストセルを作成する Gtk.CellRendererText artistNameCell = new Gtk.CellRendererText (); // セルを列に追加する artistColumn.PackStart (artistNameCell, true); // 曲名の列を作る Gtk.TreeViewColumn songColumn = new Gtk.TreeViewColumn (); songColumn.Title = "曲名"; // 曲名の列にも同じことをする Gtk.CellRendererText songTitleCell = new Gtk.CellRendererText (); songColumn.PackStart (songTitleCell, true); // TreeViewにカラムを追加する _treeView1.AppendColumn (artistColumn); _treeView1.AppendColumn (songColumn); // モデル内のどのアイテムを表示するかをセルレンダラーに伝える artistColumn.AddAttribute (artistNameCell, "text", 0); songColumn.AddAttribute (songTitleCell, "text", 1); // アーティスト名と曲名の2つの文字列を保持するモデルを作成します。 Gtk.ListStore musicListStore = new Gtk.ListStore (typeof (string), typeof (string)); // ストアにデータを追加します。 musicListStore.AppendValues ("Garbage", "Dog New Tricks"); // TreeViewにモデルを割り当てる _treeView1.Model = musicListStore; } } } チュートリアルのサンプルの書き換える必要があります。 Mono Gtk.TreeModel ↓ GTK3 Gtk.ITreeModel Modelを使った表示の仕方 チュートリアルに書かれている内容をコピペで表示できました。 using System; using System.Collections.Generic; using Gtk; using UI = Gtk.Builder.ObjectAttribute; namespace treeView2Application { class MainWindow : Window { [UI] private TreeView _treeView1 = null; List<Song> songs; public MainWindow() : this(new Builder("MainWindow.glade")) { } private MainWindow(Builder builder) : base(builder.GetRawOwnedObject("MainWindow")) { builder.Autoconnect(this); _mkTreeView(); } void _mkTreeView() { songs = new List<Song>(); songs.Add (new Song ("Dancing DJs vs. Roxette", "Fading Like a Flower")); songs.Add (new Song ("Xaiver", "Give me the night")); songs.Add (new Song ("Daft Punk", "Technologic")); Gtk.TreeViewColumn artistColumn = new Gtk.TreeViewColumn (); artistColumn.Title = "Artist"; Gtk.CellRendererText artistNameCell = new Gtk.CellRendererText (); artistColumn.PackStart (artistNameCell, true); Gtk.TreeViewColumn songColumn = new Gtk.TreeViewColumn (); songColumn.Title = "Song Title"; Gtk.CellRendererText songTitleCell = new Gtk.CellRendererText (); songColumn.PackStart (songTitleCell, true); _treeView1.AppendColumn (artistColumn); _treeView1.AppendColumn (songColumn); Gtk.ListStore musicListStore = new Gtk.ListStore (typeof (Song)); foreach (Song song in songs) { musicListStore.AppendValues (song); } artistColumn.SetCellDataFunc (artistNameCell, new Gtk.TreeCellDataFunc (RenderArtistName)); songColumn.SetCellDataFunc (songTitleCell, new Gtk.TreeCellDataFunc (RenderSongTitle)); _treeView1.Model = musicListStore; } private void RenderArtistName (Gtk.TreeViewColumn column, Gtk.CellRenderer cell, Gtk.ITreeModel model, Gtk.TreeIter iter) { Song song = (Song) model.GetValue (iter, 0); if (song.Artist.StartsWith ("X") == true) { (cell as Gtk.CellRendererText).Foreground = "red"; } else { (cell as Gtk.CellRendererText).Foreground = "darkgreen"; } (cell as Gtk.CellRendererText).Text = song.Artist; } private void RenderSongTitle (Gtk.TreeViewColumn column, Gtk.CellRenderer cell, Gtk.ITreeModel model, Gtk.TreeIter iter) { Song song = (Song) model.GetValue (iter, 0); (cell as Gtk.CellRendererText).Text = song.Title; } } public class Song { public Song (string artist, string title) { this.Artist = artist; this.Title = title; } public string Artist; public string Title; } } 課題 レンダー用の関数を毎回書かないといけなく面倒 SetCellDataFunc関数を毎回書かないようにしたい。 Gtk3アプリのTreeViewの表示の簡略化に続く
  • このエントリーをはてなブックマークに追加
  • Qiitaで続きを読む

【技術書まとめ】新しいLinuxの教科書�

シェル カーネルのインタフェース dateなら/usr/bin/dateを探す なぜシェルがあるのか シェルだけ変更できる OSが違っても操作できる エラー時にカーネルの影響を減らす 「1つのプログラムには、1つのことをうまくやらせる」 「小さなコマンドを組み合わせて複雑な処理ができる」 ターミナル ユーザがコンピュータへ入出力するときに使うハードウェア エミュレータが使われている 入出力の画面があるだけ コマンドラインの編集 Esc 押してから b で単語1つぶん移動 Ctrl + h で1文字削除 Ctrl + w で1単語削除 Ctrl + y で最後に削除した内容を挿入 トラブル時 Ctrl + s 画面表示のロック Ctrl + q ロック解除 Ctrl + l 画面を消去する コマンド履歴 Ctrl + p 1つ前のコマンド Ctrl + n 次のコマンド インクリメンタルサーチ Esc 検索結果を残したままコマンドラインに戻る Ctrl + g 検索結果を破棄 Linux では全てがファイル Linux はシステム全体で1つのディレクトリツリーのみ Linux のディレクトリ FHS(Filesystem Hierarchy Standard) /bin Linuxシステムの動作に最低限必要なコマンド /dev デバイスファイルを格納する /etc 設定ファイル /home ユーザごとに割り当てられる /sbin 管理者ユーザ向けコマンド shutdownなど /tmp 一時ファイル /usr 各種アプリと付属ファイル 下に bin,sbin,etc などを持つ /var 変化するデータを置く ログや電子メール コマンド touch 既存ファイルがあっても上書きされない cat 引数なし キーボードからの入力を待つ less ファイルを1画面で見る /etc,?etcで検索できる nで次の検索結果へ mv file1 file2でファイル名変更する ln -s file1 file2でシンボリックリンクをつける 活用法 深すぎるファイルにつける バージョンにlatestのリンクをつける 探す find . -name file-1.txt -print カレントから下りながら探してパスを表示する -iname 大文字小文字区別しない ワイルドカードを使うときは''を使う パス名展開されてしまうから -type dでディレクトリに絞りこむ fは通常ファイル lはシンボリックリンク locate 作成してしばらくたったファイルの検索 locate -b pythonで名前を含むファイルを検索できる ディレクトリは表示されない 複数入れるとOR検索になる AND検索は-Aを入れる Vim コマンド入力ができない時 Escを何度か押す 保存せず終了 :q! 単語一つ分移動する w b 行頭へは0 行末へは$ ggで冒頭 Gで末尾 oで次の行から編集する カットやコピーペースト カットはdと範囲を指定 ヤンクはyと範囲を指定 pでプット アンドゥはu リドゥはCtrl + r bash エイリアス alias <名前>='<コマンド>' シェル変数 var1='test variable' $var1で参照できる スペースは入れない 環境変数の設定 export LESS='--no-init' 以降lessコマンドで--no-initが自動で付くようになる カスタマイズ ~/.bashrcに書く source ~/.bashrcで即時反映 コメントは# ファイルのパーミッション -は通常ファイル、dはディレクトリ、lはシンボリックリンク rwxr-xr-xなどの9文字はオーナー、グループ、その他のユーザのパーミッション chmod シンボルモード chmod u+w file.txt uはオーナー、gグループ、oその他のユーザ、augoすべて +権限を追加、-禁止する、=指定した権限と等しくする chmod go=r file.txt 数値モード 4は読み取り(r)、2は書き込み(w)、1は実行(x) chmod 755 file.txt 各行はオーナー、グループ、その他の足し算になっている 環境変数を引き継がないでスーパーユーザになる su - ps aus すべての実行プロセス確認する kill <PID>で止める 終了できるのは実行ユーザのみ 本当はシグナルを送信するコマンド 途中で止めたい時 Ctr + z リダイレクトとは 標準入出力先を変更する機能 入力リダイレクト cat < /etc/crontab 出力リダイレクト ls -l / > list.txt 標準出力先がlist.txtになる >>と書くことで追記になる 上書きしない 出力を捨てたいとき cat /etc/crontab > /dev/null ls / /xxxx 2> /dev/null エラー2は捨てて通常出力だけを見たいとき 標準もエラーも捨てる ls / /xxxx > /dev/null 2>&1 ファイルの頭だけ表示する head /etc/crontab 出現回数ランキング作成する sort file1 | uniq -c | sort -rn 正規表現 grep 'mail[1-4] example.txt' 1-4 にマッチ [^13]は1か3以外 grep '^B[ea]*r$' drink.txtなどもできる .は任意の1文字 '^net'は頭がnet 'net$'は終わりがnet 'Be*r'は0回以上の繰り返し 拡張正規表現 grep -E 'Be+r' drink.txt 郵便番号の3桁-4桁 [0-9]{3}-[0-9]{4} ウォッカかワインか grep -E 'My (Vodka|Wine)' drink.txt sed 削除する sed 1d drink2.txt 置換する sed 's/Beer/Whisky/g' drink2.txt awk ls の出力から5列目と9列目を取り出す ls -l /usr/bin/ | awk '{print $5,$9}' 最後の2列を表示する ls -l /usr/bin/ | awk '{print $(NF-1),$NF}' 9列目の頭がcpを表示する ls -l /usr/bin/ | awk '$9~ /^cp/ {print $5,$9}' csvの最後の列の総和を出す wk -F, '{sum += $NF} END{print sum}' score.csv 行数$NRで割って平均値を出す wk -F, '{sum += $NF} END{print sum}' score.csv シェルスクリプト #!シバンを頭に書く sourceで実行でも良い . ./homesize-noshebang.shのドットコマンドでも同じ意味 aliasの設定の違いなどで想定しない動作をしたりする ファイル名指定で実行の方がいい source ./homesize.shのように相対パスか絶対パスで書く パス指定がないとサーチパス内からも探してしまうから ;で繋げられて、\で改行できる $で変数の値を取得するイメージ =前後にはスペースを入れない 使えるのはアルファベットと数値と_のみ ""は変数展開できる ./parameters.sh aaa bbb ccc $1, $2, $3に引数が入る $#で引数の個数を取れる $@で全ての引数を受け取る [はコマンド if [ "$1" = "bin" ]; thenでは"$1や=が引数となる [は引数の条件式を判定するコマンド 正であれば0を、そうでなければ0以外を終了ステータスとして返す 終了ステータスは$?でわかる test "$1" = "bin"; thenでもほぼ同じ &&は終了ステータスが0で正常な時、次のコマンドを実行する [ -f file.txt ] && cat file.txt $((i + 2))で計算できる bashの算術式展開 アーカイブ アーカイブする tar cf dir1.tar dir1 cfはcreate file ファイル属性もそのままアーカイブされる バックアップにはcpよりもいい rootで実行する アーカイブできたら内容確認する tar tf dir1.tar 展開する tar xf dir1.tar 圧縮 圧縮する gzip ps.txt 展開する gzip -d ps.txt.gz tarとgzipを一緒に使う tar czf dir1.tar.gz dir1 tar xzf dir1.tar.gz SSH先のディレクトリdir1をtar+gzファイルとして転送する ssh osumi@serverB 'tar czf - dir1' | tar xzf - bzipはより圧縮率が高い xzはさらに高い Linuxカーネルなど git git diffはワークツリーとインデックスの差分 git diff --cachedはインデックスとリポジトリの差分 git diff HEADはワークツリーとリポジトリの差分
  • このエントリーをはてなブックマークに追加
  • Qiitaで続きを読む

【Windows】 最低限のTeX環境構築

対象 私の所属する学科の人に向けた記事です. 目標 TeX で最低限レポートが書ける程度に環境構築. 環境 Windows10 WSL Ubuntu 20.04LTS (Ubuntu 18.04LTS や他のバージョンでも可能) 準備 次のような手順で説明します. すでに完了している事項は適宜スキップしてください. WSL の有効化 usrフォルダの作成 テンプレートのダウンロード usr フォルダへのリンクを作成 texlive のインストール 1.WSL の有効化 こちらの記事を参考に WSL を有効化して Ubuntu をインストールしてください. 2.usr フォルダの作成 Windows のC:ドライブの直下にusrフォルダを作成します. 3.テンプレートのダウンロード GitHubからzip形式でダウンロード. zip形式でタンロードしたものを先ほど作ったusrフォルダに解凍して配置してください. cd ls usr/ として,template_texと表示されれば成功です. 4.usrフォルダへのリンクを作成 Windows のフォルダと Ubuntu のフォルダを紐付けます. 次のコマンドを順番に実行してください. cd ln -s /mnt/c/usr . lsコマンドを実行してusrと表示されれば成功です. 5.texlive のインストール 初めにcdコマンドでMakefileがあるディレクトリまで移動します. Ubuntuで次のコマンドを実行してください. 結構時間がかかりますが気長に待ちましょう. make install 途中で次のような入力を求められる場合があります. パスワードを聞かれる場合は パスワードを入力してEnter インストールの続行の意思 Do you want to continue? [Y/n] yと押してEnterキーを押してください. 以上で準備は終わりです. 次にコンパイル手順を説明します. コンパイル方法 main.texが存在するディレクトリまでcdコマンドで移動します. 注意 特別な理由がない限り,基本的にファイル名を変更しないでください. lsでmain.texの存在を確認する. makeと打ち込むと,エラーがなければ pdf ファイルが作成されます. コンパイルが成功した場合 のように表示され,Windows のフォルダを見てみると. 終わりに VSCode等でコンパイルできるようにしないとなかなか面倒ですが,とりあえずは最低限の環境構築です. 急いで書いたので誤りがあったらすみません.
  • このエントリーをはてなブックマークに追加
  • Qiitaで続きを読む

dnf system-upgrade download が失敗するときのお話

結論 sudo dnf system-upgrade download --releasever=xx(リリースの数字) --allowerasing --skip-broken で、何が? skip-brokenとallowerasingがないと大体上手くいかないよ、というお話。 skip-broken これは依存関係が壊れている(?)ときにオプションを足すように促される。促されたら入れたらいいけど別に最初から入れてもいい気はする。 allowerasing(最重要) ここでつまづきました。何がってfedoraのリリースでは古い機能が切り捨てられる(サポートされなくなる)のは日常茶飯事なのでallowerasingが要るんですわ。しかもこれはエラーメッセージで教えてくれない(常識なの?)ので気づかない。 実はこのことは公式docsに書いてたりはする。 ちなみにまあこのコマンド走らせる前に sudo dnf update --refresh --allowerasing するときも同様ね。 雑談 Fedora34リリース今日されましたね。日付変わってる?うるせぇ俺はUTCで生きてるんだ
  • このエントリーをはてなブックマークに追加
  • Qiitaで続きを読む

linuxのiptablesでproxyサーバーを簡単に実現する方法

概要 linuxのiptablesでproxyサーバーを簡単に実現します。ローカルネットワーク内のpc1は、proxyサーバーを経由して、外部インターネットにアクセスします。 pc1(public ipなし) ----> proxy server(public ipあり) ---> インターネット ##pc1## private ip: 172.31.8.4 ##proxy server## private ip: 172.31.11.10 auto public ip: 13.231.116.234 環境 AWS VPC AWS EC2 (proxyサーバ:1台、pc1:1台) Debian 10 (HVM), SSD Volume Type - ami-0ac97798ccf296e02 (64-bit x86) t2.micro 手順 1. AWS EC2インスタンスの作成(proxyサーバ) ・ Auto-assign Public IP:Enable ・ 送信元/送信先チェックを無効にする 作成したEC2インスタンスを選択して --> Actions --> Networking --> Change source/destination check --> Stopにチェックを入れて、Saveボタンを押下します。 ・IP forwardを有効にする admin@ip-172-31-11-10:~$ cat <<EOF | sudo tee /etc/sysctl.d/ipforward.conf > net.ipv4.ip_forward=1 > EOF net.ipv4.ip_forward=1 admin@ip-172-31-11-10:~$ admin@ip-172-31-11-10:~$ sudo sysctl --system * Applying /etc/sysctl.d/99-sysctl.conf ... * Applying /etc/sysctl.d/ipforward.conf ... net.ipv4.ip_forward = 1 * Applying /etc/sysctl.d/protect-links.conf ... fs.protected_hardlinks = 1 fs.protected_symlinks = 1 * Applying /etc/sysctl.conf ... admin@ip-172-31-11-10:~$ ・iptablesにルールを追加する(source ip: 172.31.8.4 --> 172.31.11.10) 〜〜外部に送信する前に、source ip(pc1のip)を自動的にproxyサーバのeth0のipに設定する〜〜 admin@ip-172-31-11-10:~$ sudo iptables -t nat -A POSTROUTING -o eth0 -j MASQUERADE admin@ip-172-31-11-10:~$ admin@ip-172-31-11-10:~$ sudo iptables -t nat -S -P PREROUTING ACCEPT -P INPUT ACCEPT -P POSTROUTING ACCEPT -P OUTPUT ACCEPT -A POSTROUTING -o eth0 -j MASQUERADE admin@ip-172-31-11-10:~$ 2. AWS EC2インスタンスの作成(pc1) ・ Auto-assign Public IP:Disable ・ Kernel IP routing tableを変更する 〜〜default Gatewayを削除する〜〜 admin@ip-172-31-8-4:~$ sudo ip route del default 〜〜新しいdefault Gateway(proxyサーバー)を追加する〜〜 admin@ip-172-31-8-4:~$ sudo ip route add default via 172.31.11.10 dev eth0 変更前: admin@ip-172-31-8-4:~$ sudo route -n Kernel IP routing table Destination Gateway Genmask Flags Metric Ref Use Iface 0.0.0.0 172.31.0.1 0.0.0.0 UG 0 0 0 eth0 172.31.0.0 0.0.0.0 255.255.240.0 U 0 0 0 eth0 admin@ip-172-31-8-4:~$ 変更後: admin@ip-172-31-8-4:~$ sudo route -n Kernel IP routing table Destination Gateway Genmask Flags Metric Ref Use Iface 0.0.0.0 172.31.11.10 0.0.0.0 UG 0 0 0 eth0 172.31.0.0 0.0.0.0 255.255.240.0 U 0 0 0 eth0 admin@ip-172-31-8-4:~$ 3.結果を検証する admin@ip-172-31-8-4:~$ curl yahoo.co.jp <HTML> <HEAD> <TITLE>Document Has Moved</TITLE> </HEAD> <BODY BGCOLOR="white" FGCOLOR="black"> <H1>Document Has Moved</H1> <HR> <FONT FACE="Helvetica,Arial"><B> Description: The document you requested has moved to a new location. The new location is "https://www.yahoo.co.jp/". </B></FONT> <HR> </BODY> admin@ip-172-31-8-4:~$ admin@ip-172-31-8-4:~$
  • このエントリーをはてなブックマークに追加
  • Qiitaで続きを読む