【Linux】9. 演習①

2022-09-17_Linux 環境とバージョン

1. コマンド拡張(理解)

LinuxでCPU使用率を確認するコマンドは何ですか?
A.top
B.netstat
C.free
D.df

【解答分析】A
ここに画像の説明を挿入

2022-09-24_Linux 環境とバージョン

2. コマンド拡張(理解)

Linux カーネルのバージョン情報を出力するコマンドは次のどれですか:
A.uname -r
B.vmstat
C.sar
D.stat

【解答分析】A
ここに画像の説明を挿入

3. カーネルファイルシステム (理解)

Linux 2.6.* カーネルでサポートされるデフォルトのファイル システムは何ですか? [複数選択]
A.ext3
B.ext2
C.ext4
D.xfs
E.ufs

[回答分析] ABCD
ext は Linux 拡張ファイル システムの完全名、extfs、つまり Linux 拡張ファイル システム、ext2 は
高性能ログ ファイル システムである D XFSの第 2 世代です
。2000 年 5 月、シリコン グラフィックスこのシステムのソース コードは、後に Linux カーネルに移植されました。
XFS は、スムーズなデータ転送を提供しながら大きなファイルの処理に特に優れています。E
UFS は、UNIX ファイル システムの略語です。4.3Tahoe リリースで提供されている BSD Fat Fast File System (FFS) システムから派生し、進化したものです。 FFSのバージョン。

4. grepコマンド

Linux システムでは、文字 a で始まる行を含むファイル try_grep の内容を検索するには、次のコマンドを使用できます?
A.grep -E #$ try_grep
B.grep -E #a try_grep
C.grep -E ^$ try_grep
D.grep -E ^a try_grep

【解答分析】D

    //grep选项中,-E选项可以用来扩展选项为正则表达式;
    //$表示匹配文件末尾,字符需要在$之前表示以字符结尾  a$表示以a结尾
    //^表示匹配文件起始,字符需要在^之后表示以字符起始  ^a表示以a起始

5. ファイルの一括削除

現在のディレクトリにあるサフィックス .c を持つファイルをバッチで削除する方法。ac、bc() など
A. rm *.c
B. find . -name "*.c" -maxdepth 1 | xargs rm
C. find . -name "*.c" | xargs rm
D. 上記のどれも正しくありません

【解答分析】AB

xargs是一个强有力的命令,它能够捕获一个命令的输出,然后传递给另外一个命令,用于很多不支持|管道来传递参数的命令,相当于将前边命令的执行结果,也就是查找到的文件名,传递给后边的rm指令进行删除
/*
A	rm *.c *通配符,表示匹配任意字符任意次
B	find . -name "*.c" -maxdepth 1 | xargs rm  
    find . -name "*.c" -maxdepth 1 找到当前目录下.*结尾的文件,目录深度为1
C	find . -name "*.c" | xargs rm 没有进行深度控制,删除的不仅是当前目录下的文件,会将子目录下的文件也删除
D	以上都不正确
*/

2022-10-16_スティッキービット

6. yumコマンドの共通オプション

次の説明は正しいです。
A. Centos では、yum install コマンドを使用してパッケージをインストールできます。
B. Centos では、yum uninstall コマンドを使用してパッケージをアンインストールできます。 C.
Centos では、yum list を使用してすべてを表示できます。インストール可能なパッケージ
D. Centos の場合、yum show を使用して、インストール可能なすべてのパッケージを表示できます。

[回答分析]
AC yum ツールの一般的なオプションは次のとおりです。
install ソフトウェア パッケージをインストールする手段
list インストールに使用可能なすべてのソフトウェア パッケージをリストし
ます search 指定されたキーワードを含むソフトウェア パッケージを検索します delete共通の条件に従って、
指定されたソフトウェア パッケージをアンインストールします
操作オプションは除外できます B と D が間違っています。Yum にはこれら 2 つの操作オプションがありません

7. yumコマンドの拡張(理解)

次のコマンドは正しいです:
A. yum makecache コマンドの機能は、サーバーのソフトウェア パッケージ情報をローカルにキャッシュすることです
B. yum search コマンドは、指定されたキーワードを含むパッケージをすべてのソフトウェア パッケージから検索できます C.
yum clean all コマンドはキャッシュ内の古いヘッダー ファイルとパッケージをクリアできます。
D.yum upgrade コマンドはすべての rpm パッケージを更新できます。

[回答分析] ABC
yum ツールは、指定されたパッケージがインストールされるたびに、ソース サーバー上のパッケージ情報を検出します。
便宜上、パッケージ情報を毎回検索する必要がないため、yum makecache を使用してパッケージ情報をローカルにキャッシュし、yum clean all を使用して古いキャッシュ情報をクリーンアップします。
したがって、A と C が正しいです。yum
検索は、指定されたキーワードを含むパッケージを検索するために使用されます。B も正しいです。D
オプション:
yum -y update: すべてのパッケージをアップグレードし、ソフトウェアとシステム カーネルもアップグレードします。yum
-y upgrade : すべてのパッケージのみをアップグレードし、ソフトウェアとシステム カーネルはアップグレードせず、ソフトウェアとカーネルをそのまま保持します。したがって、オプション D は完全かつ厳密ではありません

2022-10-22_vimの使用

8. 置換操作

Vi エディターで、すべての文字 AAA を yyy に置き換えるにはどうすればよいですか?
Ap/AAA/yyy/
Bs/AAA/yyy/g
Ci/AAA/yyy/
Dp/AAA/yyy/h

【解答分析】

/*
在vim的底行模式中,
:s 表示substitute,也就是替换, 格式为以下
:[range]s[ubstitute]/{pattern}/{string}/[flags] [count]
range 表示区间 % 用于表示全文,  2,3 表示从第2行开始到第3行
{pattern} 表示字符串匹配规则,要匹配什么样的字符串 , 比如^a 表示以a字符起始的字符串
{string} 表示要将匹配到的字符串替换为的新的string字符串
[flags]  s_flags中,g比较常用,通常使用g表示全部替换,默认如果不给的话,表示只替换一次
[count]  表示在一行中匹配多少次,很少会用到....
如果想要将文件中所有 nihao 替换为 hello 则命令为:  %s/nihao/hello/g 
:p 用于打印指定区间的行
:[range]p[rint] [flags]
:i 在指定行上方添加文本
:{range}i[nsert][!]
根据这些选项能够确定B选项正确,其他错误。
*/

9. 保存操作

コマンド "vi/etc/inittab" を使用してファイルの内容を表示し、一部の内容を誤って変更してしまいました。システムの誤動作を防ぐため、変更した内容は保存したくないのですが。 ? A. 最終行モードで
、「wq」と入力します。
B. 最終行モードで、「q!」
と入力します。 C. 最終行モードで、「x!」と入力します
。 D. 編集モードで、「ESC」キーを入力して終了します。 vi を直接

[回答分析] B
A 最後の行モードで、「wq」と入力して保存して編集を終了します。変更がなくても書き込みが行われ、ファイルの時間属性が変更されます
(変更時間と変更時間の両方が変更されます) )

B 最終行モードで、「q!」と入力すると、編集を強制的に終了しますが、現在の変更は保存されません。
C 最終行モードでは、「x!」と入力して、保存して編集を終了します。ファイルが保存されている場合にのみ保存されます。 D編集モード
で「ESC」キーを押しても、vi 編集を直接終了するのではなく、通常モードに戻るために使用されます。
質問の意味からすると、終了したいのですが編集していますが、変更を保存したくないので、オプション B を選択します。

10. プリコンパイル/コンパイル/アセンブル/リンク

実行可能プログラムを生成せずに test.c ファイルをコンパイルするコマンドは何ですか?
A.gcc -S test.c
B.gcc -E test.c
C.gcc -c test.c
D.gcc test.c


[回答分析] C gccの共通オプション:
-c コンパイル後に停止、リンクしない
-E 前処理後に停止、コンパイルしない
-S コンパイル後に停止、コンパイルしない
-o 対象ファイルの名前を指定するために使用します
-gデバッグプログラムを生成します。プログラムにデバッグ シンボル情報を追加します。
タイトルでは、実行可能プログラムを生成せずに、プログラムがアセンブリの終了までのみ実行されることが必要であるため、C オプションを選択します。

11. 解析木(理解する)

コンパイルプロセスのどの段階で解析ツリーを生成するプロセスですか?
A. 構文解析
B. 意味解析段階
C. 字句解析
D. オブジェクトコード生成段階

[回答分析] A のコンパイル プロセスは
、スキャナー -> 構文分析 -> 意味分析 -> ソース コードの最適化 -> コード ジェネレーター -> オブジェクト コードの最適化であり、スキャナーは左から右、上から下にスキャンして字句解析を実行します
。プログラムの文字をソースし、各単語を識別し、単語の種類を決定します。 構文解析は、文法規則に従って入力文から解析ツリーまたは構文ツリーを構築することです。これは、回答の分析
で言及されている解析ツリーまたは構文ツリー構文ツリーのセマンティクスです。
関数の戻り値の型がこの意味検出に該当するかどうかを文脈に応じて解析するのが文法解析であり、文の主語と目的語がルールに適合しているかどうかを記述することが文法解析であり、意味論は文の意味が正しいかどうかを検出します。ターゲット コード生成とは
、特定のマシン上で中間コードを低水準言語コードに変換することを指します。
上記の段階を理解すると、正しい選択肢は選択肢 A であると分析できます。

12. Makefile (理解)

Makefile に関する次の説明のうち、正しいものはどれですか? [複数選択]
A.makefile はコンパイラとリンカーのパラメータ オプションを保存します
B. これには主に 5 つのものが含まれます: 明示的なルール、暗黙的なルール、変数定義、ファイルの命令とコメント C.
デフォルトでは、make コマンドはファイルを検索します現在のディレクトリに「GNUmakefile」、「makefile」、「Makefile」という名前を順に配置し、このファイルの説明を見つけます
D. Makefile では、include キーワードを使用して他の Makefile をインクルードすることはできません。

【解答分析】
ABC Makefile ファイルには、コンパイラやリンカのパラメータオプションが保存され、すべてのソースファイル間の関係が記述されます。
make プログラムは、makefile 内のデータを読み取り、規則に従ってコンパイラ、アセンブラ、およびリンカを呼び出して、最終出力を生成します。
Makefile の機能の理解によると、オプション A が正しいです。Makefile には
主に 5 つのものが含まれています: 明示的なルール、暗黙的なルール、変数定義、ファイル命令、およびコメントです。オプション B が正しいです。明示的なルールは、メイク
ファイルの生成方法を説明しています。複数のオブジェクト ファイル。
Make には自動導出機能があるので、
ソースファイルとターゲットファイルの時間関係を判断するなど、あいまいなルールで大まかに簡潔にメイクファイルを書くことができます。メイクファイルには変数を定義することができます
。すべての変数は対応する参照位置に展開されます。通常、変数ファイル命令を参照するには $(var) を使用します。
C 言語の include と同様に、makefile に include して別の makefile を参照する;この項目によると、D オプションが間違っていると推測できます。コメント、#は、行の先頭にある行コメントを示すために makefile で使用できます。デフォルトでは、make コマンドは現在のディレクトリ内で「GNUmakefile」、「makefile」、「Makefile」という名前のファイルを順番に検索します

C オプションも正しいです。

13. コンパイルの最適化

プログラムの完全なコンパイル プロセスは、前処理、コンパイル、アセンブリなどに分かれています。コンパイル段階でのコンパイルの最適化に関する次の記述は誤りです。A. デッド コードの削除とは、コンパイル プロセス中にコメントされたコードを直接破棄することを指します
。 B.
関数のインライン化により、関数呼び出しでのプッシュとアンスタックのオーバーヘッドを回避できます
C. for ループのループ制御変数は、通常、レジスタ アクセスへのディスパッチに適しています
D. 強度の弱体化とは、実行時間が短い命令が同等に置き換えられることを意味します実行時間の長い命令

【回答分析】
デッドコード削除とは、コンパイル最適化技術の一つで、コメントされたコードを削除するのではなく、全く実行できないコードやプログラムの実行結果に影響を与えないコードを削除することを指します。オプション A は間違っています
。インライン関数は、コンパイル時拡張関数とも呼ばれ、関数呼び出しによって発生するコストを節約するために、コンパイラーがインライン関数本体を挿入し、関数が呼び出されるすべての場所を置き換えるという提案を指します。使用方法はマクロに似ていますが、マクロとは異なります。
違いは、インライン関数にはパラメーターの型の検証とデバッグ情報が含まれるのに対し、マクロは単なるテキストの置換であるという点です。したがって、
CPU が頻繁にアクセスする for ループのループ制御変数は、選択肢 B が正解です。そのため、レジスタにアクセスされるようにスケジュールされている場合は、毎回メモリからデータをフェッチする必要はありません。アクセス効率を向上させることができるため、オプション C の正しい強度が弱まります これは実行時間を指し
ます 短い命令は、 num & 127 と比較した num % 128 のように、実行時間の長い命令を置き換えることに相当します。 &127 の方が軽いので、D も正しいです

2022-10-29_gdbの使用

14. フォン・ノイマン要素

ノイマン型アーキテクチャの一部ではない必要なコンポーネントは次のとおりです。
A.CPU
B.Cache
C.RAM
D.ROM

[解答分析] B
ここに画像の説明を挿入
A CPU 演算器およびコントローラ
B キャッシュ キャッシュ (テクノロジ)
C RAM メモリ (ストレージ)
D ROM ディスク (入出力デバイス)

15. システムコールの概念

以下のシステム コールの説明では、エラーは () です。
A. システム コールは、アプリケーション プログラムの要求をシステム カーネルに転送して実行します。
B. システム コール関数の実行プロセスはユーザー モードである必要があります
。 C.システム コールは、オペレーティング システムを取得するために使用できます。さまざまなサービス
D. オペレーティング システムがプログラマに提供するインターフェイスです。
E. システム コールは、デバイス アクセスの詳細からユーザーを保護します。
F. システム コールは、一部の機能を保護します。カーネルモードでのみ実行できる操作命令

[回答分析] B
システムコールは、カーネルの特定の機能にアクセスするためにオペレーティングシステムが上位層に提供するインターフェイスです。
A は正解です。アプリケーションは、完了する必要がある関数をシステム コールを通じてカーネルに渡し、実行が完了します。B は
不正解です。システム コールの実行プロセスはカーネル状態で完了し、オペレーティング システムは実行されません。ユーザーがカーネルに直接アクセスできるようにします。つまり、ユーザーの実行状態はカーネルにアクセスする権限を満たしていません
C は正解です。システム コールは、特定のカーネル サービスまたは機能を完了するために上位層に提供されます。
D は正解、
E は正解です。ユーザーはシステム コール インターフェイスを通じてリクエストとデータをカーネルに渡すだけで済みます。対応するデバイス アクセス プロセスはカーネル内で完了し、最終的な戻り結果は正しいです。F は正解です。システムは、カーネルにアクセスするためのシステム コール インターフェイスを上位層に提供します。
このサービスまたは機能の大きな理由は、カーネルの安定した動作を最大限に保護できるためでもあります。

2022-11-05_プロセスの理解

16. プロセス | プログラム | ジョブ

プロセスに関する次の記述のうち、間違っているものはどれですか? [複数選択]
A. プロセスとプログラムの間には 1
対 1 の対応関係があります B. プロセスとジョブの間には 1 対 1 の対応関係があります
C.プロセスは静的です
D. プロセスは動的プロセスです

[回答分析] ABC
プログラムはプログラム ファイルに格納された静的な命令セットであり、
プロセスは 1 回の実行中のプログラムの記述です。
ジョブとは、ユーザーがコンピュータに実行させる必要がある特定のタスクであり、コンピュータに実行させる必要がある作業の集合です。
上記の概念によると:
A オプションは間違っています。プログラムは同時に複数回実行でき、複数のプロセスが存在します
。 B オプションは間違っています。ジョブ タスクの完了は複数のプロセスで構成される可能性があり、複数のプロセスで構成される必要があるためです。少なくとも 1 つのプロセスの
C オプション エラー。プログラムは静的ですが、プロセスは動的であるためです。
D オプションは正しいです

17. PCB プロセス制御ブロックの概念

システムがプロセスを認識している唯一のエンティティは、
A. プロセス ID
B. プロセス制御ブロック
C. プロセス マネージャー
D. プロセス名です。

[回答分析] B
プロセスは、プログラムの実行プロセスに関するオペレーティング システムの記述であり、この記述はプロセス制御ブロック PCB と呼ばれ、オペレーティング システムの動作を管理およびスケジュールする唯一のエンティティです。
プロセスの理解と分析によると、
A オプションは間違っています。プロセス ID はプロセスの識別子にすぎず、システムは特定のプロセスの ID を見つけることができるためです。C オプションは間違っています。プロセス マネージャーは単なるプロセスです
。多数の PCB を管理するためのプログラム
D オプションが間違っている、プロセス 本質的には名前がありません 実行がスケジュールされているプログラムの名前があります その識別子はプロセス ID であることが理解できますプロセス ID はその名前であるため、選択肢 B のみが正しいです。システムの観点から見ると、プロセスはプログラムを実行するためのものです
。説明は PCB プロセス制御ブロックです。

18. プロセスのプリエンプション

プリエンプティブ マルチタスクでは、プロセスがプリエンプトされるときにどのオペレーティング環境を保持する必要がありますか? [複数選択]
A. すべての CPU レジスタの内容
B. グローバル変数
C. ページ テーブル ポインタ
D. プログラム カウンタ

[回答分析] ACD
A すべての CPU レジスタの内容 CPU 上で処理されているデータ
B グローバル変数プログラム内のデータ (必ずしも処理されているとは限りません)
C ページ テーブル ポインタは、ページ テーブルの開始アドレスをレジスタにロードしますプログラムが切り替わるとき
D プログラムカウンタ プログラムの次のステップで実行される命令のアドレス

2022-11-07_ゾンビプロセスの理解

19. デーモンとデーモン

以下に説明するエラーは次のとおりです
。 A. デーモン プロセス: 制御端末から独立してバックグラウンドで実行され、特定のタスクを定期的に実行する特別なプロセス。B. ゾンビプロセス: プロセスが子プロセスをフォークし、子プロセスが終了しますが、親プロセスには/子プロセス
がありません。その後、子プロセスのプロセス記述子がシステムに保存されたままになります。このようなプロセスは、ゾンビプロセスと呼ばれます。ゾンビプロセス。C. 孤立プロセス: 1 つ以上の子プロセスが実行中に親プロセスが終了する場合、これらの子プロセスは孤立プロセスと呼ばれます。(孤立プロセスは init プロセスによって採用され、それらの状態収集作業を完了します) D. Elf プロセス: Elf プロセスが終了すると、ゾンビ プロセスになります。waitwaitpid

[回答分析] D
ゾンビプロセス: 子プロセスが親プロセスより先に終了し、親プロセスが子プロセスの終了を処理しないため、子プロセスは独自の終了情報を保存し、すべてのリソースを解放できずゾンビになるプロセスが発生し、リソース漏洩が発生します。
孤立プロセス: 親プロセスが子プロセスより前に終了し、子プロセスが孤立プロセスとなりバックグラウンドで実行され、親プロセスが第 1 プロセスになります (孤立プロセスの終了は第 1 プロセスによって責任を持って処理されます)プロセス) デーモン
プロセスとエルフ プロセス: これら 2 つは同じプロセスの異なる変換であり、特別な孤立したプロセスです。バックグラウンドで実行されるだけでなく、最も重要なことは中断することです。ターミナルとログイン セッションとのすべての接続から離れている、つまりバックグラウンドで影響を受けずにサイレントに実行する 上記の理解
と分析によると:
D エラー: Elf プロセスは実際にはデーモンと同じですプロセス、翻訳名が異なるだけです。その親プロセスはプロセス No. 1 であり、終了してもゾンビプロセスにはなりません
ここに画像の説明を挿入

おすすめ

転載: blog.csdn.net/weixin_60915103/article/details/130452906