linux基础
1. 基础命令
连接用户:ssh [用户名]@[IP地址]
1. 关机
- poweroff
- shudown -h now
2. 重启
-
reboot
-
shudown -r now
3. ls命令
- ls 查看当前位置有哪些文件
- ls -l 查看当前位置文件的详细信息 (可以缩写为 ll)
- (文件类型与权限 硬链接数 所有者 所有者所属组 所占空间 时间戳 文件名)
- ls -a 可以把系统隐藏的文件显示出来
- -d 查看目录属性
- ls --help 帮助命令
4. cd — 切换目录
- cd ./public 切换到以当前目录为相对路径的public目录中
- cd … 切换到上一级目录里
- cd ~ 切换到当前用户的家目录
- cd - 退回到刚才的目录
5. pwd — 打印当前工作目录的绝对路径
6. touch — 新建一个文件
- touch 文件名
7. mkdir — 创建目录(文件夹)
- mkdir 目录名称
8. cp — 将一个或多个源文件复制到指定目录
- cp [选项] 源文件或目录 目标目录
- -r 递归处理,将指定目录下的文件及子目录一并处理
- -p 拷贝的同时不修改文件属性,包括所用这、所属组、权限和时间
- -f 强行复制文件或目录,不管文件或目录是否存在
9. mv
- 移动文件或目录 mv 源文件或目录 目标目录
- 重命名 mv 源文件名称 新文件名称
- 可以移动与重命名一起用 mv 源文件名称 目标目录/新文件名称
10. rm
- rm -f 强制删除文件或目录
- rm -rf 选项-r与-f结合,强制删除文件夹及里面的所有文件
- rm -r 删除文件夹及里面的子文件
11. rmdir — 删除一个空目录
12. 文件查看目录
- cat 文件名 — 浏览文本内容
- more 文件名 — 分页显示文本内容
- head -n 文件名 — 显示前 n 行内容
- tail -n 文件名 — 显示文件的最后 n 行 内容
13. 权限管理命令
- chmod — 修改权限(读r、写w、执行x)必须是root用户
- a 表示 all,u 表示 user,g 表示 group,o表示other
- 例如:chmod a-r 123.c 去掉所有人对123.c文件的读权限
- 例如:chmod u+r 123.c 让拥有者有读的权限
- 读r的权限是4,写w的权限是2,执行x的权限是1
- 例如:777 表示 -rwxrwxrwx 666 表示 -rw-rw-rw 644 表示 -rw-r–r--
- 例如:chmod 640 123.c 将123.c文件的权限修改为 -rw-r-----
- chown — 修改文件的所有者 必须是root用户
- chown 修改后的所有者 文件名
- chgrp — 修改文件所在的工作组
- chgrp 修改后的工作组 文件名
对于 -rwx-xr-x文件
rwx r-x r-x
拥有者的权限 所在工作组的权限 其他人的权限
14. 文件搜索命令
- which
- which 命令 — 查看命令所在路径
- alias 表示 别名,外号 alias kk=‘which touch’ — 用kk表示which touch
- find 借助搜索关键字查找文件或目录 — find 搜索路径 [选项] 搜索关键字
- -name 根据文件名查找
- -size 根据文件大小查找
- -user 根据文件所有者查找
- locate 速度大于find
- find搜索整个硬盘,locate搜索数据库,即便文件存在,数据库中没有记录,locate便搜索不到
- updatedb 更新数据库,这两个命令连在一起使用
- grep 检索字符串的匹配
15. 网络管理与通信命令
- ifconfig
- netstat 打印linux系统中网络系统的状态信息
- netstat [选项]
- -a 显示所有端口
- -at 列出所有tcp端口
- -au 列出所有udp端口
- netstat [选项]
- ping 测试主机之间网络的连通性
- write 使当前用户向另一个用户发送信息
- write 用户名
- wall 使当前用户向所有用户发送消息
- 命令格式:wall
16. 压缩解压命令
gzip/gunzip、zip/unzip、bzip2/bunzip2、tar
- gzip 获得gz格式的压缩包,压缩后不保存源文件,若同时列出多个文件,则每个文件会被单独压缩
- gzip [选项] 文件
- gunzip [选项] 压缩包包名
- bzip2 获得.bz2后缀名的源文件 使用选项 -k 时保留源文件
- bunzip2 压缩包报名
- zip 获得zip格式的压缩包,压缩后保留源文件
- zip [-r] [压缩后文件名称] 文件或目录 -r 表示递归压缩
- unzip [选项] 压缩包包名
- 打包命令 tar
- 功能:打包多个目录或文件,通常与压缩命令一起使用
- 格式:tar [选项] 目录 -zcvf(压缩) -zxvf(解压)
- -c 产生tar打包文件
- -v 打包时显示详细信息
- -f 指定压缩后的文件名
- -z 同时通过gzip指令压缩备份文件,压缩后格式为 tar.gz
- -x 从打包文件中还原文件 (解压)
- tar -zcvf 压缩后文件名 压缩前文件名
- tar -zxvf 压缩包
17. 帮助命令 (命令 --help)
- man 获取linux系统的帮助文档 manpage中的帮助信息
- 命令格式:man [选项] 命令/配置文件
- -a 在所有的man帮助手册中搜索
- -p 指定内容时,使用分页程序
- -M 指定man手册搜索的路径
- info 用于调用Linux下的帮助文档,获取帮助信息。
- whatis 用于查询命令的功能,并将查询结果打印到终端。
- whatis [命令名称]
- whoami 用于打印当前有效的用户名称 (没啥用。。。。。)
2. Linux常用工具
1. vi编辑器
Linux系统下最基本的编辑器,工作在字符模式下,工作模式分为命令模式、插入模式和行底模式
- 行底模式
- :set nu 设置行号
- :set nonu 取消行号
- 编辑模式进入插入模式:a / i / o 插入的位置不一样
- 插入模式进编辑模式:ESC
- 编辑模式进入最后一行模式: “:”
- 最有一行模式下的命令:
- :w 保存文件
- :wq 保存文件并退出vi
- :x 保存文件并退出vi
- :q! 不保存文件,强制退出vi
- :w 名称 另存为…
- 编辑模式下的操作:
- u 撤销前面多次修改
- ctrl + r 反撤销
- [ n ] x 删除光标后n个字符
- [ n ] X 删除光标前n个字符
- [ n ] dd 删除从当前开始的n行
- [ n ] yy 复制从当前开始的n行
- p 把粘贴板上的内容插入到当前行
- . 执行上一次操作
- shift + zz 保存退出当前文件
- 编辑模式下移动光标
- [ n ] G 将光标定位到第n行开始处
- G 将光标定位到文件结束出
- gg 将光标定位到文件开始处
- 编辑模式下的查找
- /字符串 从光标开始向文件尾查找字符串
- n: 同一方向重复上一次查找命令
- N: 反方向重复上一次查找命令
- :nohls 取消高亮
- :sethls 设置高亮
2. GCC编译器
可编译C语言、java、OC等多种编程语言
- gcc [文件名] -o [编译后的文件名]
- 预处理 -E
- 编译 -S
- 汇编 -O
- 链接
- 多文件编译
- 执行文件 ./[文件名] *.out
- 编译 c 程序:gcc hello.c -o hello
- 运行 c 程序:/hello
3. GDB调试工具
Linux系统中使用的一种非常强大的调试工具
- 在代码中加入调试信息,并调试信息
- gcc [文件名] -o [编译后的文件名] -g
- (gdb) gdb app
- 列出程序代码,并设置断点
- list 行号
- b 行号
- b 22 if i = 5 在22行设定待条件的断点
- info b 查看断点
- disable NUM 取消断电
- 查看变量值
- p 变量名
- 继续执行
- s 单步执行
- n 单步执行并跳过标准函数库
3. 用户与用户组管理
用户管理即对用户账号进行的管理,包括账号的添加、密码设置、修改和删除;
用户组的管理包括用户组的添加,更改和删除操作、用户组切换等。
1. 添加用户
useradd [选项] 用户名
-
-d 指定用户登入时的目录
-
-c 指定账户的备注文字
-
-e 指定账号的有效期限
-
-f 缓冲天数,密码过期时在指定天数后关闭该账号
-
-g 指定用户所属组
-
-G 指定用户所属的附加用户组
-
-m 自动建立用户的登入目录
-
-r 创建系统账号
-
-s 指定用户的登录shell
-
-u 指定用户的ID。若添加 -o 选项,则用户ID可与其他用户重复
-
说明:
-
1~1000为系统用户ID,用户ID从1001开始
-
可通过查看 /etc/passwd 文件,查看已存在的用户
-
创建账号的用户需要有创建账号的权限
-
2. 设置用户密码
passwd [用户名称]
- 说明
- root用户可随意修改密码,即便出现警告,也可成功保存
- 普通用户设置密码是应尽量复杂,避免与用户名相同
- 修改当前登陆账户的密码时,可缺省用户名
- 用户密码保存在 /etc/shadow 文件中 使用 tail 命令查看
3. 删除用户
userdel [选项] 用户名
- -f 强制删除用户
- -r 递归删除(一次性删除目录下的所有)
4. 修改用户
usermod
- 修改用户的ID:usermod -u [修改后的ID值] [用户名]
5. 用户组管理
每个用户都有一个用户组,若再创建账户时未指定,那么系统会议用户名作为该新用户的用户组,这个组就是基本组,若在某个用户的目录中创建文件,文件的所属组就是用户的基本组;另外可以为用户指定附加组,初级本组之外,用户所在的组都是附加组,为用户指定附加组,可以使用户拥有对应的权限。
/etc/group 可以查看组的信息
- 新建用户组 groupadd [选项] 组名
- groupmod 更改群组识别码或名称。 groupmod -n [新群组名称] [旧群组名称]
- 切换用户组的命令 newgrp 用户组名 (不知道切换成功的话,新建一个文件,查看它的属性即可)
- 修改用户组密码 gpasswd 组名
- 把某个用户设为管理员:gpasswd -A [用户名] [组名]
- 把某个用户拉进组: gpasswd -M [用户名] [组名]
6. 用户切换
-
su - [用户名]
- -c 执行完指定的命令后,切回原来的用户
- -l 切换用户的同时,切换到对应的工作目录,环境变量也会改变
- -p 切换用户时,不改变环境变量
- -m 指定执行的shell
- 特点:完全切换
-
sudo [选项] -u 用户 [命令] 临时切换
-
-b 在后台执行命令
-
-h 显示帮助
-
-H 将HOME环境变量设置为新身份的HOME环境变量
-
-k 结束密码的有效期限
-
-l 列出目前用户可执行与无法执行的命令
-
-p 改变询问密码的提示符号
-
-s 执行指定的shell
-
-u 以指定的用户作为新的身份,及切换到指定用户。默认切换到root用户
sudo命令可以视为受限的su,可以使用visudo命令打开 /etc/sudoers 文件并进行编辑,使用该命令打开sudoers文件进行编辑时可以防止其他用户同时修改该文件,且在保存退出时,系统会对于法进行检查。
-
4. shell编程
包裹在内核之外,位于内核和用户之间
shell的种类:BSh、CSh、KSh、bash
查看shell ll /bin/*sh
shell功能 命令解释器,linux中的所有可执行文件都可以在shell中执行,可执行程序分为五类
- linux命令
- 内置命令
- 实用程序
- 用户程序:由用户编写的,经过编译后可执行的文件
- Shell脚本:使用shell语言编写的批处理文件
1.shell的应用技巧: 重定向、管道、命令连接符、文本提取器
-
输入/输出重定向
-
从终端输入的数据称为标准输入,将打印数据到终端称为标准输出,并设置了3个标准文件,分别是关联标准输入,标准输出以及标准错误输出信息。标准输入文件的编号为0,默认设备是键盘,标准输出文件的编号为1,默认设备是显示器;标准错误文件的编号为2,默认设备也是显示器。
-
Shell默认终端接受用户命令,并将命令执行过程中产生的错误与命令的执行结果打印到终端,但并非任何时候用户都希望使用默认设置,这种情况下,可使用重定向。重定向分为3种。
-
输入重定向
- 命令<文件1 命令把文件1的内容作为标准输入设备
比如:cat<123.txt 将123.txt作为输入设备,并将内容显示到控制台。
- 命令<<标识符 命令从标准输入中读入内容,直到遇到“标识符”为止。
比如:cat<<food 将food之前的内容作为输入传递给cat。碰到food自动结束输入,并将输入的内容显示出来。
- 命令<文件1>文件2 同时使用输入输出重定向,命令把文件1的内容作为标准输入,把文件2作为标准输出。
-
输出重定向
命令>文件名 输出的信息以覆盖的方式打印到文件中,
cat test.c > 111.c 将 test.c 文件的内容打印到 111.c 中 左侧的内容会将右侧的内容覆盖
cat test.c >> 111.c 将 test.c 文件的内容 追加 到 111.c 文件中
-
错误重定向
命令 2>文件名
-
-
管道命令
类似于生产线, " | "用于连接两个命令,前面命令执行的结果交给后面处理
ls -l /etc | grep ini 含义:查找 etc 下文件 含有 ini 的文件名
-
命令连接符
Shell中提供了一些用于连接符号的符号,包括
- “;” 会按照先后次序依次执行
- “&&” 只有该连接符号之前的命令执行成功后,它后面的命令才被执行
- “||” 只有前面的命令执行失败后,才会执行后面的命令。
-
文本提取器
- shell中常用awk提取文档或标准输出中的文本信息,实际上是一个强大的文本分析工具,有点类似于grep
2. 第一个shell程序
\c表示不换行
- 第一行:#!/bin/sh 指定脚本程序
- " # " 表示注释
- 变量不需要声明
- 行尾不需要分号
- echo 表示输出
- 再输出变量之前要加一个" $ ",表示输出的是变量的内容
- 最后一行:exit 0
- 运行方法
- 加上 x 权限,然后运行程序:./test.sh
- 使用命令:sh test.sh
3. 变量的定义
-
shell的变量在使用之前无需定义,可以在使用的同时创建。
-
shell中的变量没有明确的分类,一般情况下,一个变量保存一个串
-
shell中的变量若需要进行计算,需使用工具进行转换。
-
Shell变量的变量名由字母、数字和下划线组成,开头只能是字母或下划线。
-
若shell变量中出现其他字符,则表示变量名到此前为止。
-
给变量赋值时,等号两端不能有空格,其格式为 “变量名=值”,若要给变量赋空值,缺省格式中“值”的部分,跟上换行符即可。
-
若变量中含有空格,必须使用通过引号将变量括起。
-
注意:Shell中可以使用关键字 “readonly” 将变量设置为只读变量。此后若想重新赋值,则会报错。
4. 变量的引用
5. 变量的输入
- Shell脚本中通过echo关键字打印变量,通过read关键字读取变量
- 定义:read 变量名
6. 变量的分类
-
环境变量
- 环境变量又称永久变量,此类变量不仅可以作用于单个脚本,还可用于创建该变量的Shell以及从该Shell派生的子Shell或进程中。为了区别于局部变量,环境变量中的字母全部为大写。
- 定义:export 变量名
-
位置变量 ----------把外部的数据想方设法引入内部。
- 位置变量执行脚本时传入脚本中对应脚本位置的变量。类似函数的参数,饮用方法为$符号加上参数的位置。
- $# 统计未知变量的个数
- $0 显示当前shell脚本的文件名称
- $n 表示第n个未知变量
- 每在程序中增加一个 shift 关键字,会按照顺序左移一位,即第1个变量被移除,第2个变量被移到第1个位置。
- 使用:sh test.sh AA BB CC "AA"表示第1个位置变量,“BB”表示第2个位置变量,“CC”表示第3个位置变量。这些参数可以参与程序的运算。
-
标准变量
- 标准变量也是环境变量,在bash环境建立时生成,该变量自动解析。
- 可以使用env命令查看系统中的环境变量,包括环境变量和标准命令。
-
特殊变量
- “#” 传递到脚本或函数的参数数量
- “?” 前一个命令执行情况,0表示成功,其他值表示失败。
- “$” 运行当前脚本的当前进程id号
- “!” 运行脚本最后一个命令
- “*” 传递给脚本或函数的全部参数。
-
局部变量
定义一个局部变量:local 变量名
7. 变量的运算
-
Shell中变量没有明确的类型,变量值都以字符串的形式存储。若想进行算术运算,可以通过let或expr命令实现。
-
let 可以进行算术运算和数值表达式测试 let 表达式
-
let命令也可以用双括号代替
比如:i=1 ((i+=3))
-
expr 用于对整型变量进行运算。使用要求:
-
若表达式中是遍历,使用’"$"引用即可
-
运算符与变量或数据之间需要有一个空格。
-
若要在脚本中使用expr命令,需要使用符号” ` “(该按键位于TAB上)
比如:a=10 b=20 value=
expr $a + $b
-
8. 条件语句
-
判断语句通常分为3类:字符串比较,算术比较和针对文件的条件测试
- 字符串比较
- str1=str2 若两个字符串相等,则结果为真
- str1!=str2 若两个字符串不相等,则结果为真
- -n str 若字符串str不为空,则结果为真
- -z str 若字符串str为空,则结果为真
- 算术比较
- expr1 -eq expr2 若两个表达式返回值相同,则结果为真
- expr1 -ne expr2 若两个表达式返回值不同,则结果为真
- expr1 -gt expr2 若expr1的返回值大于expr2的返回值,则结果为真
- expr1 -ge expr2 若expr1的返回值大于等于expr2的返回值,则结果为真
- expr1 -lt expr2 若expr1的返回值小于expr2的返回值,则结果为真
- expr1 -le expr2 若expr1的返回值小于等于expr2的返回值,则结果为真
- !expr 若表达式的结果为假,则结果为真
- 针对文件的条件测试
- -d file 若文件file是目录,则结果为真
- -f file 若文件file是普通文件,则结果为真
- -r file 若文件file可读,则结果为真
- -w file 若文件file可写,则结果为真
- -x file 若文件file可执行,则结果为真
- -s file 若文件file大小写不为0,则结果为真
- -a file 若文件file存在,则结果为真
- 字符串比较
-
if
-
使用 test 命令 或 “[” 命令对条件进行判断,其判断的条件可以是命令或脚本
-
比如:判断文件是否存在
-
if test -f file then ... fi
-
-
#单分支if语句(方括号前后都要有空格) if [ 条件语句 ]; then ... fi
-
#双分支if语句(方括号前后都要有空格) if [ 条件判断语句 ] ; then ... else ... fi
-
#多分支if语句(方括号前后都要有空格) if [ 条件判断语句 ] ; then ... elif [ 条件判断语句 ] ; then ... else ... fi
-
-
select
-
可以将选项列表做出类似目录的形式,以交互的形式选择列表中的数据。
-
#select语法格式 select 变量 in 列表 do ... break done
-
-
case
-
可以将一个变量的内容与多个选项进行匹配,若匹配成功,则执行该条件下对应的语句。
-
#case语法格式 #匹配项可以用引号(单引号/双引号)括起来,也可以直接列出 case var in 选项1)...;; '选项2')...;; "选项3")...;; ... *)... esac
-
9. 循环语句
-
for循环
for 变量 in 变量列表 do ... done
-
while循环
# 中括号前后要加 空格 while [ 表达式 ] do ... done #示例:完成1~100的累加
-
until循环
# util循环与while格式基本相同,不同的是,当until循环的条件为假时,才能继续执行循环中的命令。until [ 表达式 ]do...done
10. Shell脚本调试
-
Shell中提供了一些选项,用于shell脚本的调试过程。常用的选项有以下几个:
-
-n 不执行脚本,进检查脚本中的语法问题
比如:sh -n test.sh
-
-v 再执行脚本的过程中,将执行过的脚本命令打印到屏幕
-
-x 将用到的脚本内容打印到屏幕上
-
11.Shell中的函数
-
说明:
- function关键字可省略
- 函数名后的 () 可以省略,若省略,函数名与 { 之间要有一个空格
- Shell脚本中的函数不带任何参数
- Shell脚本函数中可以使用return返回一个值,也可以不返回,若不设置返回值,则该函数返回最后一条命令的执行过程
-
#格式如下[function] 函数名[()]{ 代码段 [return]}
-
函数的调用
shell中没有main函数,想调用函数时,直接写函数名即可
-
函数中的变量
#!/bin/sh# shell中没有局部变量一说,若想定义局部变量,需要使用关键字 localfunction fun(){ a=10 echo "fun:a="$a}a=5echo "main:="$afunecho "main:a="$aexit 0# 输出结果:# main:a=5# fun:a=10# main:a=10function fun(){ local a=10 echo "fun:a="$a}a=5echo "main:="$afunecho "main:a="$aexit 0# 输出结果:# main:a=5# fun:a=10# main:a=5
5. 进程管理
1. 挂载
- monut 将某个分区挂载到目录
- 格式:mount [选项] [参数] 设备 挂载点.
- 常用选项:" -t " 指定待挂载设备的文件系统类型(可省略)
- 常用选项:" -o " 描述设备的挂载方式
- umount
- 含义:当挂载的设备是移动存储时,要进行的工作是在该设备与主机之间进行文件传输,那么在文件传输完毕之后,需要卸下该分区,umount可实现该操作。
- 格式:umount [选项] [参数]
2. linux有5钟状态: 初始态、就绪态、运行态、睡眠态和终止态
3. 进程管理命令
- ps (Process Status) 查看当前系统中正在运行的进程
- ctrl + z 可以最小化程序——扔到后台
- top 可以实时观察系统的整体运行情况,默认时间间隔为3秒----------类似于任务管理器
- 可以使用 s 修改时间间隔,按 q 退出
- pstree 以树状图的形式显示系统中的进程,可以直接观察到进程间的派生关系
- pgrep 根据进程名从进程队列中查找进程,查找成功后默认显示进程的pid
- pgrep [选项] [参数]
- nice 用于设置Linux系统中进程的优先级,常用选项有 “-n”,n表示优先级,是一个整数
- nice [选项] [参数]
- bg和fg 使进程在前台和后台之间进行切换
- bg 将进程放入后台执行,使前台可以执行其他任务。格式: bg [参数]
- fg 将后台的进程调往前台。格式: fg [作业号] ----------- 使用jobs可查看作业号
- jobs 查看Linux系统中的作业列表及作业状态。格式:jobs [选项] [参数]
- kill(特别关键) 用于终止正在运行的进程,工作原理是发送某个信号到指定进程,以终止该进程。
- 格式:kill -9 [pid]
6. 其他(data, bc, echo, last, history, sort, comm, diff, wc, ln)
-
data
- 可以显示日期,只输入date则以默认格式显示显示当前时间若需要以指定格式显示时间,可以使用"+"开头的字符串指定具体格式。
- 比如:data “+现在的时间是:%Y-%m-%d %H:%M:%S”
-
bc
- 可以使用bc命令在命令行模式下进行一些简单的加减乘除计算,退出时输入quit
- 若需要输出小数时,需要执行 scale=number,number指的是小数点后面的位数。
-
echo 用于字符串的输出,可以使用转义字符 “\n”,显示换行等
-
last
- 显示近期用户或终端的登陆情况。
- -R 表示省略hostname的栏位。-num,展示前num个,username,展示username的登入信息
-
history
- 用于显示历史记录和执行过的指令命令,后面加n,表示显示最近的n条记录
- !n 表示执行历史记录中第n条命令,"!!" 表示执行上一条命令。
-
sort
- 默认是将文件的每一行作为一个单位,相互比较,比较原则是从首字母向后,依次按ASCLL值进行比较,最后将它们按照升序输出。
- -u表示去除重复行,-r表示降序,-n表示以数值来排序。
-
comm
- 会一列列比较两个已排序文件的差异,并将结果显示出来,第1列是仅在第1个文件中出现过的列,第2列是仅在第2个文件中出现过的列,第3列是仅在第3个文件中出现过的列,若给予的文件名为"-",则会从标准输入设备读取数据
-
diff
- 以逐行的方式,比较文本文件的异同处,若要指定比较目录,则diff会比较目录中相同文件名的文件,但不会比较其中子目录。"-w" 表示忽略空格,"-y"表示以并列的方式显示文件的异同之处。
- "|“表示前后两个文件内容不同,”<“表示前面文件比后面文件多了一行内容,”>表示后面文件比前面文件多了一行内容。
-
wc
- 计算文件的Byte数、字数、或是行数等,若指定文件名为"-",则从标准输入设备读取数据。计算出来的3列数据分别是行数、单词数、字节数。
-
ln
- 当我们需要在不同的位置使用同一个文件时,可以使用该命令为某文件在另一个位置建立一个不同的链接,有点类似于windows下的快捷方式。ln命令会保持每一处链接文件的同步性,不论改动哪一处,其他文件都会发生相同的变化。
- ln的链接分为软链接和硬链接,软链接有参数"-s",只会在选定位置上生成一个文件的镜像,不会占用磁盘空间,硬链接会在选定位置上生成一个和源文件大小相同的文件。