Linux基础知识整理

本篇博客内容主要来自我大二时选修的Linux应用编程课的课程PPT,我对其中主要内容整理了一下,内容比较少,需要再参考相关阅读内容。

关于Linux的发展历史以及其发行版本,网上都有很多介绍,这里不再讲述了。

Linux 基础知识与shell命令

这部分内容将Linux常用命令与Linux系统的部分特点一起总结,可能显得稍微有点乱,更多常用命令可以参考linux常用命令(详解)

Linux的shell命令主要有一下特点:

  • 所有命令都有其固定的命令结构。
  • 不同命令有不同的功能。
  • 同一命令的不同参数具有不同功能。
  • 每条命令有固定的选项集合。
  • 可以通过3种方式查看命令的帮助信息,了解参数的功能

                          1)man 命令名

                          2)命令名 --help

                          3)info 命令名

echo

1)命令格式:

2)功能:显示变量、字符串

3)选项 -e可以处理转义字符,如 \a \c \n \t

uname

1)命令格式:

2)功能:显示操作系统信息

3)常用选项:

who

1)命令格式:

2)功能:查看当前登录用户信息

3)常用选项:

data

1)命令格式:

2)功能:显示系统日期

3)常用选项:

Linux文件系统

1)在Linux中,一切都是文件

  • 内核、shell都是文件

2)文件分类

  • 普通文件:仅包含字符流的数据文件(文本文件、二进制文件)
  • 目录文件:文件夹和子目录的详细信息(文件名和inode号)
  • 设备文件:代表设备,完成对设备的读取和写入操作

3)文件命名规则

  • 字母和数字
  • 符号:. , - , _ 
  • 可以有扩展名,也可以没有
  • 区分大小写

4)Linux文件系统结构层次 

 

  • /: 根目录(之后的/都是目录分隔符)
  • /home:用户目录
  • /bin: Unix常用命令,如bash, date, cat, tar等
  • /sbin: 管理员命令,如fdisk, mkfs等
  • /etc: 系统配置文件目录,如passwd, shadow(登录名和密码)等
  • /dev: 设备文件目录,如硬盘等
  • /lib: 库文件目录
  • /var: 可变文件目录,如打印和邮件等
  • /tmp: 临时文件目录

5)路径

  • 绝对路径名:从根目录开始
  • 相对路径名:从当前目录开始
  • 根目录: /
  • 当前用户主目录: ~或者环境变量$HOME
  • 当前目录:.
  • 父目录:..

6)文件系统相关命令:

ls(list)

1)命令功能:列出目录下的文件

2)命令格式:

3)常用选项:

  •   -a 显示以.开头的文件
  •   -F 用*标记可执行文件,用/标记目录,用@标记符号链接
  •   -l  以列表形式显示文件属性
  •   -t  按最后修改时间排序(降序)
  •   -u 按最后访问时间排序
  •   -r  逆序排序
  •   -R 递推显示子目录和文件

cd(change directiory)

1)命令功能:改变当前工作目录

2)命令格式:cd [dir]

mkdir(make directory)

1)命令功能:创建目录(文件夹)

2)命令格式:

rmdir (remove directory)

1)命令功能:删除空目录

2)命令格式:

3)常用选项: -p 删除空目录树

cp(copy)

1)命令功能:复制文件

2)命令格式:

3)常用选项:

  •   -b 为已存在目标文件创建备份
  •   -n 不覆盖已有目标文件
  •   -i  覆盖时询问
  •   -R 递推复制子目录和文件

mv(move)

1)命令功能:移动文件,重命名文件

2)命令格式:

3)常用选项:

  •   -b 为已存在目标文件创建备份
  •   -n 不覆盖已有目标文件
  •   -i  覆盖时询问

rm(remove)

1)命令功能:删除文件

2)命令格式:

3)常用选项:

  •   -f 强制删除
  •   -i 删除时询问
  •   -R 递推删除子目录和文件

cat (concatenation)

1)命令功能:在shell中显示文件内容

2)命令格式:

tar(tape archiver)

1)命令功能:存档管理

2)命令格式:

3)常用选项:

  •   -c 创建存档
  •   -x 提取存档
  •   -t  显示存档中的文件
  •   -f  指定存档名称
  •   -v 显示执行过程
  •   -z 同时使用gzip压缩文档

常用     tar -cvf filename file1 file2... 来压缩; tar -xvf filename 来解压缩

gzip

1)命令功能:压缩文件,解压缩文件

2)命令格式:

3)常用选项:

  •   -d 解压缩
  •   -k 保留原文件
  •   -l  显示压缩文件内容
  •   -r  递推压缩子目录和文件

7)文件属性

在命令行输入 ls -l 可以看到当前目录下文件的各种属性

 文件权限属性:

  • 权限——r 可读,w 可写,x 可执行,- 无权限
  • 权限字符串:9位字符串,前三位表示所有者权限,中三位表示用户组权限,后三位表示其他用户权限

文件所有权:

  • 所有权和用户组所有权
  • 文件所有者可以修改文件权限
  • 文件所有者对文件的操作权限显示在权限字符串的前三位
  • 用户组所有者对文件的操作权限显示在权限字符串的中三位

文件大小:

  • 文件的字符数,与实际占用空间不同
  • 目录的大小取决于所包含的文件名,显示的是预期值

文件最后修改时间:

  • 文件最后修改的时间戳

chmod

1)命令功能:改变文件权限

2)命令格式:

3)常用选项:-R 递推改变所有子目录和文件权限

4)mode:

 

类别

操作

权限

用户

+ 增加权限

读权限

用户组

删除权限

w 写权限

其他用户

指定绝对权限

执行权限

全部

 

 

 

5)八进制权限表示

权限

二进制

八进制

---

000

0

--x

001

1

-w-

010

2

-wx

011

3

r--

100

4

r-x

101

5

rw-

110

6

rwx

111

7

6)绝对权限指定:

  • 读权限:4 100
  • 写权限:2 010
  • 执行权限:1 001

7)默认普通文件权限: 666  rw-rw-rw-

目录权限:

  • r 读权限:是否可以访问文件名列表
  • w 写权限:是否可以创建或删除文件
  • x 执行权限:是否可以在路径中使用
  • 默认目录权限:777  rwxrwxrwx

umask

1)命令功能:设定默认权限

2)命令格式:umask [八进制权限掩码]

3)作用:最终权限 = 默认权限码-权限掩码

4)示例:

chown (change owner)

1)命令功能:改变文件所有者

2)命令格式:

3)需要superuser权限才能执行

chgrp (change group)

1)命令功能:改变文件用户组所有权

2)命令格式:

3)需要superuser权限才能执行

8)文件与inode

  • Linux支持多个文件系统
  • 每个文件都使用inode编号与一个inode表格相关联
  • inode表格包含了文件的属性:

                            类型,权限,链接数,所有者,用户组,文件大小,修改时间

                            一个指向文件存储磁盘区块的指针数组

  • 文件在一个文件系统中有唯一的inode编号
  • 使用 ls –i 命令查看文件inode编号

9)文件链接

一个文件可以有多个文件名,称为一个文件有多个链接,可以通过任意一个链接访问该文件

ln

1)命令功能:创建一个链接

  • 硬链接(hard link):创建一个具有相同inode编号的文件名
  • 符号链接(symbolic link):创建一个拥有独立inode的文件指向链接的文件

2)命令格式:

3)常用选项:

  •   -s 创建符号链接
  •   -f 强制创建链接(当链接名已被使用时)

文件链接分为硬链接和符号链接。

其中硬链接有如下作用:

  • 可以使文件实际位置发生变化时使用链接访问文件
  • 假设程序中引用了如下位置的文件:file/data.txt
  • 之后该文件被移动到了新目录:newfile/data.txt
  • 为了避免修改程序,可以在file目录中创建一个newfile/data.txt的硬链接
  • 可以防止意外删除:使用rm命令只是删除了一个链接

符号链接的作用:

  •  符号链接类似于windows系统中的快捷方式
  • 创建一个指向该文件的指针文件
  • 支持跨文件系统建立链接 

关于这部分内容可以查看Linux ln命令

stat

1)命令功能:查看文件属性

2)命令格式:

3)常用选项:-f  查看文件系统属性

touch

1)命令功能:修改文件时间戳,创建空文件

2)命令格式:

3)常用选项:

  •   -a 只改变访问时间
  •   -c 不创建文件
  •   -m 只改变修改时间
  •   -t   使用YYMMDDhhmm更新时间

wc (word count)

1)命令功能:计算行数、字数和字符数

2)命令格式:

3)常用选项:

  •   -c 计算字符数
  •   -l  计算行数
  •   -w 计算字数

find

1)命令功能:查找文件

2)命令格式:find [path] [–option] [expression]

3)常用选项:

  •   -name 按文件名查找
  •   -perm  XXX 按权限查找
  •   -type   f, d, l 按类型查找
  •   -user   按所有者查找
  •   -group 按用户组所有者查找
  •   -ctime  -x +x 按创建时间查找

Shell编程入门

Shell的工作原理

1)当用户登录到系统时,有一个shell进程随之启动,并在用户注销时终止

2)用户输入的命令是shell的输入

3)shell处理命令的步骤:

  • 查找命令中的元字符
  • 把这些元字符替换成对应的实际操作参数
  • 将重新生成的指令传给内核执行
  • 等待命令完成,提示符重新出现,等待下一条命令

Shell种类:

1)Bourne系列:

  • Bourne Shell  (/bin/sh
  • Korn Shell  (/bin/ksh
  • Bash  (/bin/bash)

2)C Shell系列:

  • C Shell  (/bin/csh)
  • Tcsh  (/bin/tcsh)

3)可以用命令 echo $SHELL 查看当前使用的shell种类

Shell命令元字符

Shell命令元字符包括:通配符、转义符、命令替换、重定向

通配符

用来表示文件名的某种模式,在解释时被替换成其他字符

通配符

匹配内容

*

任意数量的任意字符

单个任意字符

[abc]

a, b, c中的任一个字符

[a-z]

ASCII码值在az中间的任一个字符

[!a-z]

不在a-z范围内的任一个字符

!(fname)

fname之外的所有文件名

!(f1|f2)

f1f2之外的所有文件名

转义符

1)在处理文件名中出现通配符的文件时,常常需要用转义符来防止通配符起作用

2)在通配符前使用一个\

  • \*
  • \?
  • \[ \]
  • \[Enter] 换行继续输入

3)使用引号

  • 双引号:禁止通配符替换
  • 单引号:禁止通配符、变量名和命令替换

命令替换

1)反引号 `命令`:使用命令的结果来替换命令

  • echo –e “The user list is \n `who`”
  • echo The current time is `date`

2)$(命令):整个替换成括号中命令的结果

  • echo The current time is $(date)

重定向

详见后面的Shell输入输出流

Shell程序变量

1)环境变量:shell已经定义的变量,如HOME,SHELL,PATH

2)用户自定义变量:

  • 变量名:必须以字母开头,其他可以是数字和_,区分大小写
  • 变量类型:shell变量都是字符串类型
  • 变量不需要提前声明
  • 变量赋值:variable=value
  • 变量引用:$var_name (可使用转义符 \ 和单引号来避免替换)

3)示例:

环境变量

1)设置环境变量:export 变量名=变量值

2)引用环境变量:$变量名

3)查看环境变量:env命令

4)常用环境变量:

  • HOME  用户目录
  • PATH    命令执行路径,用冒号分隔,Shell会按PATH中给出的顺序搜索目录
  • PWD     当前工作目录的绝对路径名
  • UID        当前用户的识别号
  • RANDOM   一个随机数

5)设置和修改环境变量的方法

  • 在shell中直接修改,在shell中生效
  • 在启动配置文件中修改,在每次登录后生效

                               系统配置文件:/etc/profile

                               用户配置文件:~/.profile,~/.bashrc

  • 例如设置路径变量PATH:

                               export PATH=“$PATH:newpath”

用户自定义变量的引用和赋值

变量引用

变量替换

$变量名

变量值

${变量名}

变量值

${#变量名}

变量值长度

变量赋值

赋值语义

y=${x-value}

x有值,则y=x,否则y=value

y=${x=value}

x没有值,则y=x=value,否则y=x

y=${x+value}

x有值,则y=value,否则不操作

y=${x?value}

x有值,则y=x,否则在标准错误输出value

Shell脚本

  • 将一组命令保存在文件中,然后逐条执行,类似于Windows的批处理文件
  • 可以使用各种文件编辑软件来编写shell脚本
  • 创建文件后使用chmod命令使其具有执行权限
  • 执行该文件

运算符

1)数值运算

  • let 命令(shell内部命令)  
  • $(( 表达式 ))  shell扩展命令)
  • expr 命令
  • bc 浮点数计算器

2)示例:

bc

1)一个支持浮点数运算的计算器

2)通常采用管道的方式接受输入并返回计算结果

3)常用参数

  • scale=n  保留小数点后n位
  • ibase=k  指定输入为k进制
  • obase=k  指定输出为k进制

4)常用运算符:+, -, *, /, ^, %

5)示例:

数组

1)数组的声明

  • declare –a 数组变量名

2)数组赋值

  • array[0]=value0
  • array=(0 1 2 3)
  • array=(0 [3]=1 2)
  • 使用循环语句赋值

3)数组引用

  • ${array[i]}  访问数组array的第i个元素
  • ${array[*]}或${array[@]}  访问数组array的所有元素
  • ${#array[*]}或${#array[@]}  数组array的元素个数

4)数组销毁

  • unset array   销毁数组array
  • unset array[i]  销毁数组array中的第i个元素

Shell程序语句

解释器行

  • #!/bin/bash
  • 在shell脚本的第一行
  • 用来指定运行该脚本的shell种类

命令行位置参数

1)运行脚本时给定的用户输入参数

2)可以通过特定的形式在脚本中引用这些参数

位置参数

说明

$0

所执行命令的名字

$1--$9

命令行参数19的名字

$*

所有命令行参数组合成的字符串

$#

命令行参数的个数

$$

当前shell的进程ID

$?

最近一次命令的退出状态(正常0

$!

最近一次后台进程的ID

3)超过9个参数时,可使用shift命令将参数移位

读取用户输入

1)read  变量表

2)从标准输入读取用户的输入,存入变量表中的变量

  • -p  提示字符串
  • -n  指定数量读取
  • -t   指定时间读取
  • -s   隐藏显示输入字符

3)示例:

  • read –n 2 –t 10 –p “Input your name and age: ” name age

命令退出状态

1)所有命令和程序都会返回一个退出状态值

2)可以通过exit命令显示指定脚本的退出状态值

  • 正常退出 exit 0
  • 出错退出 exit 1

3)使用exit命令是一种好的编程习惯

4)可以使用参数$?查看上一条命令的退出状态

5)示例:

Shell控制结构语句

1)顺序执行:在同一行内使用;分隔命令

2)条件执行:使用逻辑运算符&&和||分隔命令

  • cmd1 && cmd2   若cmd1成功,则执行cmd2
  • cmd1 || cmd2      若cmd1失败,则执行cmd2

3)命令的成功与否取决于命令的退出状态值

4)示例:

条件选择语句 if

1)格式1:

if 条件测试命令
    then
        条件为真时的命令串
else
        条件为假时的命令串
fi

2)格式2:

if 条件测试命令
    then
        条件为真时的命令串
    elif 条件测试命令
        then
            条件为真时的命令串
        else
            条件为假时的命令串
fi

3)条件测试命令

test命令 (缩写[ ])

  • 比较两个数值
  • 比较两个字符串,或与null进行比较
  • 查看文件特性

test没有任何输入,只记录退出状态值$?

数值比较运算符

意义

-eq

等于

-ne

不等于

-gt

大于

-ge

大于等于

-lt

小于

-le

小于等于

字符串比较运算符

意义

=

等于

!=

不等于

-n str

str不为空

-z str

str为空

str

str被赋值且不为空

示例:

4)复合条件

可以在if中使用复合条件运算符

  • && 和 || 
  • if [ “$0”=“cmd” ] || [ “$0”=“./cmd” ]
  • -a 和 –o
  • if [ “$0”=“cmd” –o “$0”=“./cmd” ]

case语句

1)格式:

case 表达式 in
  模式1) 命令串1 ;
  模式2) 命令串2 ;
  …
  模式 *) 命令串n;
esac

2)按照从上到下的顺序匹配表达式的值,如匹配成功则执行相应的命令串

3)最后一个模式匹配任何未与之前匹配的表达式

4)case语句也支持通配符

循环语句 for

格式:

for 变量 in 列表
      do 
     命令串
done

每次迭代中列表中的值被依次赋给变量,并执行循环体

当列表结束时,循环结束

循环语句while

格式:

while 条件测试命令
  do
     命令串
done

当条件测试命令返回真时,执行循环体

当条件测试命令返回假时,循环结束

循环语句until

格式:

until 条件测试命令
  do
     命令串
done

当条件测试命令返回假时,执行循环体

当条件测试命令返回真时,循环结束

break和continue

  • break语句:跳出循环体,执行done之后的语句
  • continue语句:跳到done的位置,重新执行循环

shell函数

1)函数声明:

function() {
  statements
  return value
}

2)函数调用:使用函数名进行调用,并可在名称后面给出命令行参数

3)函数支持对命令行位置参数的引用

4)函数的退出状态由return返回

5)函数可通过标准输出向调用者返回输出字符串

文件特性检查

test命令检查文件特性

命令

意义

[ -e file ]

file存在

[ -f file ]

file存在并是一个常规文件

[ -d file ]

file存在并是一个目录

[ -L file ]

file存在并是一个符号链接

[ -rwx file ]

file存在且可读可写可执行

[ -s file ]

file存在且大小大于0

[ f1 –nt f2 ]

f1f2更新

[ f1 –ot f2 ]

f1f2更旧

[ f1 –ef f2 ]

f1被链接到f2

 

Shell输入输出流

1)输入和输出终端

  • 键盘、显示器

2)命令的输入和输出字符流

  • 标准输入流:连接到键盘的输入
  • 标准输出流:连接到显示器的输出
  • 标准错误流:连接到显示器的错误消息输出

3)三种标准输入输出源

  • 终端
  • 文件
  • 管道

输入输出重定向到文件

1)-  标准输入

  • cat - foo

2)> 输出重定向

  • echo content > file

3)>> 追加输出重定向

  • echo content >> file

4)< 输入重定向

  • wc < file

5)2> 标准错误输出重定向

  • cat foo 2> errorfile

6)相互重定向

  • 1>&2
  • 2>&1

​​​​​​​

文件描述符

含义

0

标准输入

1

标准输出

2

标准错误

3…

其他文件

过滤器

1)同时用到输入和输出流的命令

2)对于过滤器来说,输入输出流的顺序是不重要的

  • wc < infile > outfile
  • wc > outfile < infile
  • >outfile < infile wc

3)示例:

  • cat – f2 < f1 > f3 2> f4 ​​​​​​​

​​​​​​​命令组合

1)使用圆括号( )和花括号{ }将多个命令组合起来

3)组合命令由一个子shell执行,共享输入和输出源

4)组合命令能够共享同一个重定向符号

5)示例:

  • ( ls –l *.txt; wc *.txt ) > all

​​​​​​​管道

1)将一条命令的输出作为另一条命令的输入

2)格式:命令1 | 命令2

3)| 左边的命令使用标准输出,| 右边的命令使用标准输入

4)示例:

  •  who –a | cat > userlist
  • (cat f1; echo var2) | wc –l
  • ls | cat – file | wc

5)优点:

  • 处理速度快
  • 不产生中间文件结果​​​​​​​
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值