跳至主要內容

Linux常用知识

yyshino大约 9 分钟

Linux常用知识

Linux操作系统的创始人和主要设计者是 Linus Torvalds

林纳斯·本纳第克特·托瓦兹

——图片来自百度百科

LInux内核遵循 GPL 许可条例。

Linux联机帮助命令 man

你可以使用 man [命令] 来查看各个命令的使用文档,如 :man cp。

一行内运行多个命令

在Linux中,有三种方法可以在一行中运行多个命令:

示例含义
;Command 1;Command 2首先运行Command1,然后运行Command2
&&Command 1 && Command 2当Command1运行成功并结束,然后运行Command2
``

shell中的几种标准输出重定向方式

命令说明
command > file将输出重定向到 file。注意任何file内的已经存在的内容将被新内容替代。如果要将新内容添加在文件末尾,请使用>>操作符。
command < file将输入重定向到 file。
command >> file将输出以追加的方式重定向到 file。
n > file将文件描述符为 n 的文件重定向到 file。
n >> file将文件描述符为 n 的文件以追加的方式重定向到 file。
n >& m将输出文件 m 和 n 合并。
n <& m将输入文件 m 和 n 合并。
<< tag将开始标记 tag 和结束标记 tag 之间的内容作为输入。

重定向管道的输出到标准输出和指定的文件中

使用tee命令

如果您只关心标准输出

# 如果想同时打印到屏幕和文件里,可以这么写:
ls -l | tee -a lsls.log
# 如果想把错误输出也同时打印到屏幕和文件,可以这么写:
ls -l not_find_runoob 2>&1 | tee -a lsls.log
# 其中,2>&1 意思就是把标准报错也作为标准输出。写 crontab job 的时候常用。

文件的访问权限

在 Linux 中第一个字符代表这个文件是目录、文件或链接文件等等。

  • 当为 d 则是目录
  • 当为 - 则是文件;
  • 若是 l 则表示为链接文档(link file);
  • 若是 b 则表示为装置文件里面的可供储存的接口设备(可随机存取装置);
  • 若是 c 则表示为装置文件里面的串行端口设备,例如键盘、鼠标(一次性读取装置)。

接下来的字符中,以三个为一组,且均为 rwx 的三个参数的组合。其中, r 代表可读(read)、 w 代表可写(write)、 x 代表可执行(execute)。 要注意的是,这三个权限的位置不会改变,如果没有权限,就会出现减号 - 而已。

img
img

十位权限表示

常见的权限表示形式有:

每个文件的属性由左边第一部分的 10 个字符来确定(如下图)。

363003_1227493859FdXT
363003_1227493859FdXT

从左至右用 0-9 这些数字来表示。

0 位确定文件类型

1-3 位确定属主(该文件的所有者)拥有该文件的权限。

4-6位确定属组(所有者的同组用户)拥有该文件的权限,

7-9位确定其他用户拥有该文件的权限。

其中,第 1、4、7 位表示读权限,如果用 r 字符表示,则有读权限,如果用 - 字符表示,则没有读权限;第 2、5、8 位表示写权限,如果用 w 字符表示,则有写权限,如果用 - 字符表示没有写权限;第 3、6、9 位表示可执行权限,如果用 x 字符表示,则有执行权限,如果用 - 字符表示,则没有执行权限。

示例:
-rw------- (600)    只有拥有者有读写权限。
-rw-r--r-- (644)    只有拥有者有读写权限;而属组用户和其他用户只有读权限。
-rwx------ (700)    只有拥有者有读、写、执行权限。
-rwxr-xr-x (755)    拥有者有读、写、执行权限;而属组用户和其他用户只有读、执行权限。
-rwx--x--x (711)    拥有者有读、写、执行权限;而属组用户和其他用户只有执行权限。
-rw-rw-rw- (666)    所有用户都有文件读、写权限。
-rwxrwxrwx (777)    所有用户都有读、写、执行权限。

新建文件的默认权限

当新建一个文件或目录时,系统会为其设置最初的权限。文件的初始权限由文件创建掩码(creation mask)决定。掩码是一个9位二进制数字,通常用八进制数字表示,如022。掩码中的位与权限字符串相对应,掩码中为1的位限制对应的权限位的权限。例如,掩码022 表示组用户和其他人没有 w 权限,对其他权限不做限制。 文件创建时的默认权限有以下几种情况:

  • 可执行文件:通过编译程序生成的可执行文件,它的默认权限是 777-掩码。例如,若掩码为 022,则新文件的权限就是 755。
  • 非可执行文件:对于非可执行文件(如文本文件、数据文件等),在创建时默认是没有x权限的,对这类文件的x权限需要显式地赋予,即通过 chmod 命令将其改为可执行文件。因此新建文件的权限是(777-掩码)&666。这里的是“按位与”运算,即先用777-掩码求出权限,再滤掉所有 x 位。例如,若掩码为 022,则新文件的权限就是 (777-022)& 666 = 644。若掩码为 003,则新文件的权限就是(777-003)&666=664
  • 目录:同可执行文件一样,新建目录的默认权限是 777-掩码。若掩码为 022,则新目录的权限就是 755。

用户登录时,系统自动地为其设置了掩码,通常是 022。用户可以用命令修改掩码从而改变新建文件的默认权限,使之具有合适的安全性限制。

文件的其他属性

除了文件名、文件类型、归属关系和存取权限外,文件还有其他一些属性,包括

  1. 文件的时间标签,用于记录文件的时间属性,分为:
    • 修改时间(modify time):文件内容被修改的最后时间
    • 访问时间(access time):文件最近一次被访问的时间
    • 变更时间(change time):文件属性变更的最近时间。
  2. 文件的大小,即文件所占用的字节数。
  3. 文件的连接数,即此文件硬链接的数目。

vi的工作模式

vi的工作模式 vi 是一个多模式的软件,它有3 种基本工作模式。在不同的工作模式下,它对输人的内容有不同的解释。的基本工作模式如下:

  1. 命令模式

    命令模式(normal mode)用于完成各种文本编辑工作。在命令模式下,输人的任何字符都作为命令来解释执行,屏幕上不显示输入内容。

  2. 输人模式

    输人模式(insert mode)用于完成文本录人工作。在输入模式下,输人的任何字符都将作为文件的内容被保存,并显示在屏幕上。

  3. 末行模式

    末行模式(last line mode)也称为 ex模式。在末行模式下,光标停留在屏幕的最未行,在此接收输人的命令并执行。末行模式用于执行一些全局性操作,如文件操作、参数设置、查找替换、拷贝粘贴、执行 Shell 命令等

grep命令

Linux grep (global regular expression) 命令用于查找文件里符合条件的字符串或正则表达式。

grep 指令用于查找内容包含指定的范本样式的文件,如果发现某文件的内容符合所指定的范本样式,预设 grep 指令会把含有范本样式的那一列显示出来。若不指定任何文件名称,或是所给予的文件名为 -,则 grep 指令会从标准输入设备读取数据。

grep [options] pattern [files]grep [-abcEFGhHilLnqrsvVwxy][-A<显示行数>][-B<显示列数>][-C<显示列数>][-d<进行动作>][-e<范本样式>][-f<范本文件>][--help][范本样式][文件或目录...]

简述虚拟存储器的特征

  • 离散性:每进程的地址空间是离散的存在于内存中的。
  • 多次性:每进程分为多个段,分多次调入内存的。
  • 对换性:内存里的数据可与磁盘上的数据调换运行。
  • 虚拟性:使得逻辑上可利用的内存空间大大超过了实际的物理内存空间。

fock()函数的特点是什么

  • 一次调用,两次返回
  • fork()系统调用,创建一个新的子进程

GCC

Linux下GCC的使用

gcc

-o:指定生成文件的名称

-E:激活预处理。生成预处理文件( .i 文件)

-S:激活预处理、编译。生成汇编代码( .s 文件)

-c:激活预处理、编译、汇编。生成目标文件( .o 文件)

-I:指定头文件目录

image-20230513160005625
image-20230513160005625

预编译

gcc -E hello.c -o hello.i

编译

gcc -S hello.i -o hello.s

汇编

gcc -c hello.s -o hello.o

链接

gcc hello.o -o hello.out

执行

./hello.out

一次性完成

gcc hello.c -o hello.out

执行

./hello

多个文件的一起编译

gcc print.c main.c -o main print

分别编译各个源文件,再对编译后输出的目标文件(.o)

gcc -c print.c -o print.o

gcc -c main.c -o main.o

gcc print.o main.o -o main print

如果头文件和源文件不在一同目录中,如何解决

主要是要加 -I 指定头文件目录:

gcc print.c main.c -o main print -I myInclude

makefile(Makefile)

#main是需要生成的目标文件名,它依赖main.o print.o
main:main.o print.o
#gcc命令,生成main,语句前面要用TAB
	gcc main.o input.o cal.o -o main
#main.o是目标文件,依赖main.c文件,通过gcc -c main.c生成main.o文件
main.o:main.c
	gcc -c main.c
print.o:print.c
	gcc -c print.c

Shell脚本

参考

https://zhuanlan.zhihu.com/p/421284544
https://www.runoob.com/linux/linux-command-manual.html