Unixシェル

SWC @ 千葉大学

https://swcarpentry-ja.github.io/2024-05-30-chiba-slides/shell

はじめに

データの準備

  • shell-lesson-data.zipをダウンロードして、ファイルをデスクトップに移動してください。

  • ファイルを解凍します。デスクトップにshell-lesson-dataという新しいフォルダが作成されているはずです。

新しいシェルを開く

オペレーティングシステム別の指示については、シェルレッスンを参照してください。

シェルの紹介

人間とコンピュータの相互作用

  • 人間はGUI(グラフィカルユーザインターフェース)またはCLI(コマンドラインインターフェース)を使ってコンピュータと対話します。

  • GUI: 直感的でメニュー駆動型ですが、反復作業には効率的ではありません。

  • CLI(Unixシェル): 反復作業に効率的で、タスクを迅速に自動化できます。

シェルの紹介

  • シェルはユーザーが入力したコマンドを解釈して実行します。

  • 人気のあるUnixシェル: BashBourne Again SHell)。

  • シェルを使用する利点:

    • 反復作業を自動化
    • 強力なパイプラインで効率的なデータ処理
    • リモートマシンとのやり取りや高性能コンピューティングに不可欠
  • 今日はコマンドを使ってシェルと対話する方法を学びます

シェルインターフェース

シェルを開くと、次のようなものが表示されます:

$

シェルインターフェース

  • $プロンプトで、ここにコマンドを入力します

  • セットアップによっては、次のように少し異なる場合があります:

nelle@localhost $

ls

最初に学ぶコマンドはlsで、現在のディレクトリの内容を一覧表示します(後で戻ってきます):

ls
Desktop     Downloads   Movies      Pictures
Documents   Library     Music       Public

Nelleのパイプライン

  • サンプルデータセットは”Nelle Nemo”のストーリーに基づいています

  • 文脈: Nelle Nemoは海洋生物学者で、海洋生物をサンプリングしています。

  • Nelleのタスク: goostats.shを使って1520のサンプルのタンパク質量を測定します。

  • 課題: GUIを使用する場合、Nelleは1520のファイルを手動で実行する必要があり、12時間以上かかります。Nelleはシェルを使ってこれをより効率的に行うことができるでしょうか?

ファイルとフォルダのナビゲーション

質問

  • コンピュータ上でどのように移動できますか?

  • どのようにファイルやディレクトリを確認できますか?

  • コンピュータ上のファイルやディレクトリの場所をどのように指定できますか?

ファイルシステムとは?

  • ファイルシステム: ファイルとディレクトリを管理します。
    • ファイル: 情報(データ)を保持します。
    • ディレクトリ(= フォルダ): ファイルまたは他のディレクトリを保持します。

現在地は?

pwdを使用して、現在の作業ディレクトリ(コンピュータ上の「居場所」)を表示します。

スラッシュ

  • /文字には2つの意味があります。
    • ファイルやディレクトリ名の先頭に現れると、ルートディレクトリを指します。
    • パスの内部に現れると、単なる区切りです。

例えば、Nelleのファイルは/Users/nelleに保存されています。

lsでファイルを一覧表示

  • -Fオプションを使用して出力を調整します:
    • 末尾の/はディレクトリを示します
    • @はリンクを示します
    • *は実行可能ファイルを示します
ls -F

ターミナルをクリア

clearを使って散らかったターミナルをクリアできます(全ての出力を消します)

ヘルプ

--helpを追加してヘルプメニューを表示します:

ls --help

ヘルプ

または、コマンドの前にmanを追加します:

man ls

チャレンジ: ls

pwd/Users/backupを表示し、-rlsに逆順で表示するよう指示する場合、次の出力を得るにはどのコマンドを使用しますか:

pnas_sub/ pnas_final/ original/
  1. ls pwd
  2. ls -r -F
  3. ls -r -F /Users/backup

他のディレクトリの探索

ls -F Desktop

cdで他のディレクトリに移動

cd Desktop
cd shell-lesson-data
cd exercise-data

移動のショートカット: ..

..は一つ上のディレクトリに移動します

cd ..

移動のショートカット: ..

ls -aを使ってすべてを表示すると、..が見えることに注意してください

移動のショートカット: ~

~を使ってホームディレクトリに移動できます

移動のショートカット: -

-を使って直前のディレクトリに戻ることができます

絶対パスと相対パス

  • /で始まらないパスを入力すると、現在の場所に相対的なフォルダやファイルを指します

  • /で始まるパスを入力すると、ファイルシステムのルートからのパスを指します

チャレンジ: 相対パス

pwd/Users/thingを表示している場合、ls -F ../backupは何を表示しますか?

  1. ../backup: No such file or directory
  2. 2012-12-01 2013-01-08 2013-01-27
  3. 2012-12-01/ 2013-01-08/ 2013-01-27/
  4. original/ pnas_final/ pnas_sub/

シェルコマンドの一般的な構文

シェルコマンドの一般的な構文

  • オプションは通常2つの方法で書くことができます:
    • ロングフォーム--ls --all
    • ショートフォーム-ls -a
  • スペースは重要です(ls-Fはコマンド”ls-F”を意味します)
  • 大文字と小文字は区別されます(ls -sls -S

タブ補完

シェルはタブキーを押すとファイルやフォルダの名前を自動で入力してくれます

`~/

Desktop/shell-lesson-data/`から試してみてください

ls north-pacific-gyre/
ls north-pacific-gyre/goo

ファイルとディレクトリの操作

質問

  • どのようにファイルやディレクトリを作成、コピー、削除できますか?

  • どのようにファイルを編集できますか?

mkdirで新しいディレクトリを作成

  • shell-lesson-dataにいることを確認し、その後exercise-data/writingに入ります

  • 周りを見てから、thesisという新しいディレクトリを作成します:

mkdir thesis

mkdirで新しいディレクトリを作成

-pを使用してネストされたディレクトリを作成できます

mkdir -p ../project/data ../project/results

実行した内容を確認します(-Rオプションを使うと、ディレクトリ内のすべてのネストされたサブディレクトリを一覧表示します):

ls -FR ../project

ベストプラクティス: ファイルとディレクトリの名前

  1. スペースを使用しないでください。
  2. 名前の先頭に-(ダッシュ)を使用しないでください。
  3. 文字、数字、.(ピリオド)、-(ダッシュ)、_(アンダースコア)を使用します。

テキストファイルを作成

nanoはテキストエディタプログラムです。ファイルを作成し、編集のために開きます。

cd thesis
nano draft.txt

Ctrl+oを押して保存し(^0で示されています)、Ctrl+xで終了します

touchでテキストファイルを作成

touch my_file.txt

rmでファイルを削除

rm my_file.txt
  • rmは完全に削除します!(ゴミ箱はありません)。使用する際は非常に注意してください。

mvでファイルやフォルダを移動または名前変更

shell-lesson-data/exercise-data/writingに入ります:

cd ~/Desktop/shell-lesson-data/exercise-data/writing

draft.txtの名前を変更します:

mv thesis/draft.txt thesis/quotes.txt

lsで結果を確認します)

mvでファイルやフォルダを移動または名前変更

  • rmと同様に、mvには「元に戻す」ボタンはありません: 同じ名前のファイルを上書きするので、慎重に使用してください!

quotes.txtを現在のディレクトリに移動します:

mv thesis/quotes.txt .

ls thesisを確認します

cpでファイルやフォルダをコピー

  • cpmvに似ていますが、移動の代わりにコピーします
cp quotes.txt thesis/quotations.txt
ls quotes.txt thesis/quotations.txt

cpでファイルやフォルダをコピー

  • フォルダをそのままcpすることはできません:
cp thesis thesis_backup
cp: thesis is a directory (not copied).

cpでファイルやフォルダをコピー

  • フォルダとその内容をすべてコピーするには、-rrecursive)オプションを使用します
cp -r thesis thesis_backup

rm -rでフォルダを削除

  • cp-rを使用するのと同様に、フォルダを削除するには-rが必要です:
rm -r thesis
  • 再度、注意!!

複数のファイルの移動、コピー、または削除

  • 複数のファイルをフォルダに移動またはコピーするには、まずすべてのファイル名を入力し、最後にフォルダ名を入力します。

  • これをshell-lesson-data/exercise-dataで試してみましょう:

mkdir backup
cp creatures/minotaur.dat creatures/unicorn.dat backup/

ワイルドカードを使って複数のファイルを一度に指定する

  • 複数のファイルを一度に移動するのは便利ですが、たくさん入力する必要がありました

  • *? を使って複数のファイル名に一致させることができます。これらは「ワイルドカード」と呼ばれます

ワイルドカードを使って複数のファイルを一度に指定する

  • shell-lesson-data/exercise-data/alkanesにあるファイルを考えてみましょう:

  • *: 0文字以上の任意の文字を表します。

    • 例: *.pdbethane.pdbpropane.pdb などに一致します。
    • 例: p*.pdbpentane.pdbpropane.pdb に一致します。

ワイルドカードを使って複数のファイルを一度に指定する

?: 正確に1文字を表します。

  • 例: ?ethane.pdbmethane.pdb に一致します。
  • 例: *ethane.pdbethane.pdbmethane.pdb に一致します。
  • 例: ???ane.pdbcubane.pdbethane.pdboctane.pdb に一致します。

チャレンジ:パターンに一致するファイル名

alkanes ディレクトリで実行すると、以下の ls コマンドのうちどれが次の出力を生成しますか?

ethane.pdb methane.pdb

  1. ls *t*ane.pdb
  2. ls *t?ne.*
  3. ls *t??ne.pdb
  4. ls ethane.*

チャレンジ:ディレクトリと
ファイルの整理

ジェーミーはプロジェクトに取り組んでおり、ファイルがあまり整理されていないことに気づきました:

ls -F
analyzed/  fructose.dat    raw/   sucrose.dat

以下のコマンドが示す出力を得るために、彼女はどのコマンドを実行する必要がありますか

ls -F
analyzed/   raw/
ls analyzed
fructose.dat    sucrose.dat