从这里开始,我们展开对Linux/c 高级的学习,首先介绍的是在Linux/c高级中,Linux的部分
目录
[2.2 dpkg工具](#2.2 dpkg工具)
[2.3 apt工具](#2.3 apt工具)
[2.3.1 apt-get](#2.3.1 apt-get)
[2.3.2 ubuntu网络配置](#2.3.2 ubuntu网络配置)
[2.3.3 apt-cache](#2.3.3 apt-cache)
[3. shell](#3. shell)
[3.1 shell的基础知识](#3.1 shell的基础知识)
[3.1.3 shell分类](#3.1.3 shell分类)
[3.1.4 shell命令格式](#3.1.4 shell命令格式)
[3.4.2管道 |](#3.4.2管道 |)
[3.4.5 echo命令](#3.4.5 echo命令)
[4.1.1 man](#4.1.1 man)
[4.1.2 su](#4.1.2 su)
[4.1.3 sudo](#4.1.3 sudo)
[4.1.5 mount 挂载命令](#4.1.5 mount 挂载命令)
[4.3.1 ps](#4.3.1 ps)
[4.3.2 top](#4.3.2 top)
[4.3.4 grep命令](#4.3.4 grep命令)
[4.3.5 find命令](#4.3.5 find命令)
1.Linux简介
1.1Linux起源
可以看一下这个网站,Linux的诞生非常有趣 寻·科普|第二期:聊聊Linux的前世今生 (qq.com)
1.2查看系统版本命令
1.查看ubuntu 版本:
sudo lsb_release -a
cat /etc/issue
2.查看内核版本:
uname -r
cat /proc/version
1.3分层结构
应用层:程序、命令
内核层:五大功能:进程管理、设备管理、内存管理、网络管理、文件系统管理驱动:字符设备驱动、块设备驱动、网络设备驱动
硬件:鼠标、键盘(字符设备驱动)、硬盘、U盘(块设备驱动)等
1.4系统关机重启命令
sudo shutdown -h now: 立即关机
sodo shutdown -r now:立即重启sudo reboot now: 立即重启
sudo shutdown -h 时间 "提示语句":定义关机
sudo shutdown -r 时间 "提示语句":定义重启
通过shutdown -c: 可以取消定时操作
2.Linux安装工具
2.1软件包安装
2.1.1软件包的管理机制
debian: deb软件包管理机制
redhat: rpm软件包管理机制(Red Hat Package Manager)
2.1.2软件包分类
二进制软件包:xx.deb
源码包: xx.dsc
2.1.3软件管理工具
在Debian的linux发行版本下,采用dpkg和apt两种包管理工具。
dpkg与apt工具的区别:dpkg:离线安装,安装本地包,不能检查软件包的依赖关系,不关系仓库内的软件。
apt:在线安装,通过仓库获取软件包资源,解决依赖关系,不能安装本地包。A -> B
2.2 dpkg工具
dpkg -i 软件包全称
例如:安装sl_3.03-17build2_amd64.deb
将sl_3.03-17build2_amd64.deb 拖动到虚拟机中的方式:1)直接拖文件到终端去掉单引号,末尾加空格. 开头加mv移动到目标路径下
2)打开虚拟机文件夹,直接复制粘贴;
3)设置共享文件夹
步骤:
sudo dpkg -i 软件包的全称:安装软件
sudo dpkg -s 软件包名:显示软件的安装状态sudo dpkg -L 软件包名:显示软件的安装路径
sudo dpkg -r 软件包名:卸载软件
sudo dpkg -P 软件包名:完全卸载软件,重新下载不会保留上一次配置。
2.3 apt工具
用的比较多的是apt-get
其他可以挖掘一下:apt-cache apt-config
apt-ftparchive apt-key
2.3.1 apt-get
sudo apt-get install 软件包名: 安装
可以在/etc/apt/sources.list源头默认下载的包存放路径:/var/cache/apt/archives/
练习下载:xcowsay、 oneko
sudo apt-get install 软件包名:软件下载并安装
sudo apt-get remove 软件包名:卸载软件
sudo apt-get --purge remove:完全卸载软件包
sudo apt-get autoremove 软件包名:卸载软件
sudo apt-get update :下载更新软件包列表信息
sudo apt-get upgrade : 将系统中所有软件包升级到最新的版本
sudo apt-get upgrade 软件包名:将系统中指定的软件包升级到最新的版本
sudo apt-get clean:清空安装包的存放路径
2.3.2 ubuntu网络配置
1.桥接模式:
1)桥接模式:编辑->虚拟网络编辑器->更改设置->选择vmnet0->桥接模式->桥接的网络适配器(根据主机的网络连接进行选择,当然选择自动也可以)->确定。
如果自动不行也可以找到对应的网络适配器。
2)虚拟机->设置->网络适配器->选择桥接模式
3)点击图标选择有线设置 -> 点击+号 -> ipv4 -> 添加
如果是手动设置ip,需要点击Method里manual,手动设置ip地址
2.nat模式
1)编辑->虚拟网络编辑器->更改设置->选择vmnet8->nat模式->确定。
2)虚拟机->设置->网络适配器->选择nat模式
如果还不行就试试关闭虚拟机然后还原默认设置如果网用着用着有问题可以用一下命令:
sudo nmcli network off
sudo nmcli network on
2.3.3 apt-cache
sudo apt-cache show 软件包名:获取二进制软件包的详细描述信息
sudo apt-cache policy 软件包名:获取软件包当前的安装状态sudo apt-cache depends 软件包名:获取该软件包的依赖信息
sudo apt-cache rdepends 软件包名:获取所有依赖于该软件包的软件包
3. shell
3.1 shell的基础知识
3.1.1概念
shell: 命令行解释器
shell是贝壳的意思,起到保护作用。那linux的shell可以保护内核。
作用:负责把应用程序的输入命令信息解释给操作系统, 将操作系统指令处理后的结果解释给应用程序。
3.1.2命令执行的过程
用户在命令行下命令,开始与Shell进行交互。接着,Shell将用户的命令或按键转化成内核所能够理解的指令控制操作系统做出响应,直到控制相关硬件设备。然后,Shell将输出结果提交给用户。
3.1.3 shell分类
(1)Bourne Shell(简称sh):Bourne Shell由AT&T贝尔实验室的S.R.Bourne开发,也因开发者的姓名而得名。它是Unix的第一个Shell程序,早已成为工业标准。目前几乎所有的Linux系统都支持它。不过Bourne Shell的作业控制功能薄弱,且不支持别名与历史记录等功能。目前大多操作系统是将其作为应急Shell使用。
(2)C Shell(简称csh):C Shell由加利福尼亚大学伯克利分校开发。最初开发的目的是改进Bourne Shell的一些缺点,并使Shell脚本的编程风格类似于C语言,因而受到广大C程序员的拥护。不过C Shell的健壮性不如Bourne Shell。(3)Korn Shell(简称ksh):Korn Shell由David Korn开发,解决了Bourne Shell的用户交互问题,并克服了C Shell的脚本编程怪癖的缺点。Korn Shell的缺点是需要许可证,这导致它应用范围不如Bourne Shell广泛。
(4)Bourne Again Shell(简称bash):Bourne Again Shell由AT&T贝尔实验室开发,是Bourne Shell的增强版。随着几年的不断完善,已经成为最流行的Shell。它包括了早期的Bourne Shell和Korn Shell的原始功能,以及某些C Shell脚本语言的特性。此外,它还具有以下特点:能够提供环境变量以配置用户Shell环境,支持历史记录,内置算术功能,支持通配符表达式,将常用命令内置简化。
3.1.4 shell命令格式
命令名称 选项 参数
命令名称:必须得有选项和参数:可有可无,选项前有-符号
3.2历史记录命令
history: :查看历史命令,默认显示的命令行数根据HISTSIZE来定
history n:显示n行历史记录echo $HISTSIZE: 将变量的值打印到终端,echo命令作用是打印内容到终端
HISTSIZE=10: 临时修改变量的值
在家目录下的隐藏文件,通过vi打开:
.bash_history:默认存放2000条历史记录命令的文件
.bashrc :定义HISTSIZE(使用history时默认显示的记录个数)和HISTFILESIZE(.bash_history文件可以存放命令的个数)变量的脚本文件
修改.bashrc文件中HISTSIZE的值,将终端退出:可以永久修改
3.3起别名命令
alias: 查看系统中起别名的命令 alias 新名='原来的命令': 别名
unalias 新名:取消别名
3.4Linux特殊字符
3.4.1通配符
*: 匹配所有字符
?:匹配一个字符[...]:匹配[]中指定的任意一个字符
[-]: 匹配指定的一个字符范围
[^]: 除了其中指定的一个字符,均可匹配
3.4.2管道 |
格式: 命令1 | 命令2
将前一个命令的输出作为下一个命令的输入
例如:
wc -l 文件名: 显示文件行数
wc -w 文件名:显示文件单词个数
wc -c 文件: 显示文件字符个数(Byte数)
ls | wc -w : 通过ls加管道连用wc显示当前路径下单词数
例如:
ls | xcowsay: 将ls的输出通过管道传递给xcowsay
3.4.3输入输出重定向
>文件名:输出重定向,新建模式
>>文件名:输出重定向,追加模式
2> 或者&>文件名: 将有命令产生的错误信息输出到文件中
<文件名:输入重定向
输出重定向例子:
输入重定向例子:
3.4.4命令置换符
esc键下的` (不是单引号)
命令1 `命令2`
将一个命令的输出作为另一个命令的参数
例如:
3.4.5 echo命令
向终端输出指定内容
echo 字符串: 向终端输出指定内容
-n: 不换行输出
echo "字符串":原样输出
例如:
4.Linux命令
4.1系统维护命令
4.1.1 man
man man: 查看man手册
1 Executable programs or shell commands 可执行程序或shell命令
2 System calls (functions provided by the kernel) 系统调用
3 Library calls (functions within program libraries) 库函数
4.1.2 su
su root: 切换到超级用户
sudo su 用户名:切换用户退出:exit (或者ctrl d快捷键)
4.1.3 sudo
临时管理员权限,需要输入密码。
4.1.4查看磁盘使用情况
df -Th: 查看磁盘使用情况
文件系统 文件类型 大小 已使用 可用 使用比例 挂载点
Filesystem Type Size Used Avail Use% Mounted on
/dev/sda1 ext4 19G 6.6G 12G 38% /
4.1.5 mount 挂载命令
作用:文件系统的挂载
挂载设备:sudo mount -t 设备类型 设备名称 挂载点
卸载命令: sudo umount 挂载点
注意:卸载时不要在挂载点卸载
4.2用户管理命令
sudo adduser 用户名: 添加用户
sudo deluser --remove-home 用户名:删除用户的同时删除工作目录
注意:不要进入用户删除当前用户
4.3进程管理命令
什么是进程? 就是程序的一次执行过程,是动态的。
4.3.1 ps
ps -aux: 显示当前系统中运行的进程
ps -ef: 显示当前系统中运行的进程,包含PPID(父进程号)
|---------|-----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------|
| 表头 | 含义 |
| USER | 该进程是由哪个用户产生的。 |
| PID | 进程的 ID。 |
| %CPU | 该进程占用 CPU 资源的百分比,占用的百分比越高,进程越耗费资源。 |
| %MEM | 该进程占用物理内存的百分比,占用的百分比越高,进程越耗费资源。 |
| VSZ | 该进程占用虚拟内存的大小,单位为 KB。 |
| RSS | 该进程占用实际物理内存的大小,单位为 KB。 |
| TTY | 该进程是在哪个终端运行的。其中,tty1 ~ tty7 代表本地控制台终端(可以通过 Alt+F1 ~ F7 快捷键切换不同的终端),tty1~tty6 是本地的字符界面终端,tty7 是图形终端。pts/0 ~ 255 代表虚拟终端,一般是远程连接的终端,第一个远程连接占用 pts/0,第二个远程连接占用 pts/1,依次増长。?是守护进程,也就是一开始启动时系统在后台运行的进程。(后面IO会讲) |
| STAT | 1. D uninterruptible sleep (usually IO) 不可中断的睡眠态 2. R running or runnable (on run queue) 运行态 3. S interruptible sleep (waiting for an event to complete) 可中断的睡眠态 4. T stopped by job control signal 暂停态 5. t stopped by debugger during the tracing 因为调试而暂停 6. X dead (should never be seen) 死亡态 7. Z defunct ("zombie") process, terminated but not reaped by its parent 僵尸态 8. < high-priority (not nice to other users) 高优先级 9. N low-priority (nice to other users) 低优先级 10. L has pages locked into memory (for real-time and custom IO) 锁在内存中 11. s is a session leader 会话组组长 12. l is multi-threaded (using CLONE_THREAD, like NPTL pthreads do)多线程 13. + is in the foreground process group 前台进程 14. 没有+时,默认是后台进程 15. I 空闲状态进程 |
| START | 该进程的启动时间。 |
| TIME | 该进程占用 CPU 的运算时间,注意不是系统时间。 |
| COMMAND | 产生此进程的命令名。 |
4.3.2 top
动态查看系统中运行的进程
shift >: 向下翻页
shift <: 向上翻页
q: 退出
4.3.3修改优先级
PR = NI + 20
NI值的范围: -20~19, NI值越小优先级越高
sudo renice NI值 PID: 改变正在运行进程的优先级
sudo nice -n NI值 启动进程的命令:以指定的优先级运行进程
4.3.4 grep命令
从文件中查找字符串
grep "要查找的字符串" 文件名
grep "\<要查找的字符串\>" 文件名:精确查找
结合ps以及管道:
ps -ef | grep a.out: 从进程信息中查找带a.out的字符串
4.3.5 find命令
find 路径 -name 文件名: 查找路径下的文件
查找多个文件可以加""
4.3.6给进程发送信号命令------kill
从本质上讲,kill 命令只是用来向进程发送一个信号,至于这个信号是什么,是用户指定的。
kill -l:查看系统中定义的信号2:SIGINT 快捷方式:ctrl+c 结束进程
3:SIGQUIT 快捷方式:ctrl+\ 结束进程
9:SIGKILL 杀死进程
15:SIGTERM 结束进程 kill发信号时不加编号,默认信号为15号
18: SIGCONT 让暂停进程继续
20:SIGTSTP 暂停信号 快捷方式:ctrl+z 暂停信号
kill -num PID:
num:信号编号
PID:通过ps或top命令查看到的进程号
kill -num PID :
num:信号编号
PID:通过ps或top命令查看到的进程号
4.3.7前后台进程切换
步骤:先运行进程
ctrl z: 将进程暂停
bg 编号: 切换到后台
jobs:在当前终端查看后台进程
fg 编号:将后台进程切换到前台
4.4网络管理
4.4.1命令
ifconfig:查看linux的ip地址
ipconfig:查看windows的ip地址
win+r打开运行窗口,输入cmd打开命令窗口,输ipconfig
ping 域名/ip地址:检查网络的连通性(是否能通信)
4.5文件系统管理
用于组织和管理计算机存储设备上的大量文件,并提供用户交互接口
4.5.1文件系统分类
磁盘文件系统 :指本地主机中实际可以访问到的文件系统,包括硬盘、CD-ROM、DVD、USB存储器、磁盘阵列等。常见文件系统格式有:Ext2、Ext3、Ext4、VFAT等
网络文件系统 :是可以远程访问的文件系统,这种文件系统在服务器端仍是本地的磁盘文件系统,客户机通过网络远程访问数据。常见文件系统格式有:NFS(Network File System,网络文件系统)、Samba(SMB/CIFS)等专有/虚拟文件系统 :不驻留在磁盘上的文件系统。常见格式有:TMPFS(临时文件系统)、PROCFS(Process File System,进程文件系统)和LOOPBACKFS(Loopback File System,回送文件系统)。
4.5.2根文件系统结构
需要了解常见的目录含义:
/bin:存放系统中最常用的可执行文件(二进制)/sbin : 存放更多的可执行文件(二进制),包括系统管理、目录查询等关键命令文件
/boot:存放Linux内核和系统启动文件,包括Grub、lilo启动器程序
/opt: 与系统无关的安装程序
/etc: 放的一些配置文件。Linux开机自启动脚本存放在/etc/rc.d或/etc/init.d目录下。这些目录是Linux系统中用于存放启动脚本的标准目录
/dev : 存放所有设备文件,包括硬盘、分区、键盘、鼠标、USB、tty等
/lib : 存放共享的库文件,包含许多被/bin和/sbin中程序使用的库文件
/mnt : 该目录通常用于作为被挂载的文件系统的挂载点
/proc : 存放所有标志为文件的进程,它们是通过进程号或其他的系统动态信息进行标识,例如cpuinfo文件存放CPU当前工作状态的数据
/usr : 用于存放与系统用户直接有关的文件和目录,例如应用程序及支持它们的库文件。以下罗列了/usr中部分重要的目录。
/usr/lib: 库文件,系统默认搜索的库路径
/usr/include: 头文件,系统默认搜索的头文件路径
Linux开机自启动脚本存放在/etc/rc.d或/etc/init.d目录下。这些目录是Linux系统中用于存放启动脚本的标准目录
4.5.3显示文件内容
cat 文件名:显示文件全部内容
head:head -n 文件名:显示前n行
head 后面不加数字,默认显示前10行
tail:
tail -n 文件名:显示后n行
tail 后面不加数字,默认显示后10行
4.5.4链接文件
1.文件类型:7种,b c d - l s p
硬链接:是利用Linux中为每个文件分配的物理编号------inode号建立链接。 因此,硬链接不能跨越文件系统。软链接(符号链接):是利用文件的路径名建立链接。通常建立软链接使用绝对路径而不是相对路径,以最大限度增加可移植性;类似windows下的快捷方式
2.命令:
硬链接:ln 源文件 链接文件名软链接: ln -s 源文件 链接文件名
3.注意:
硬链接:删除或移动目标文件链接依然有效只能操作普通文件
软链接:删除或移动目标文件链接失效,但是在此创建时链接依然有效
建立软链接使用绝对路径而不是相对路径,以最大限度增加可移植性
4.5.5文件压缩解压
1.zip 命令用于将一个文件或多个文件压缩成单一的压缩文件
unzip命令用于将zip压缩文件进行解压
注意:
1)具有归档功能,并进行压缩
2)可以压缩文件夹,后缀为.zip
3)压缩或者解压后源文件依然存在
格式:
zip 压缩文件名.zip 要压缩文件列表
unzip 压缩文件名.zip
2.gzip命令用于将一个文件继续压缩
gunzip命令用于将gzip压缩的文件进行解压
注意:
1)只能对一个文件进行压缩,并自动后缀为.gz
2)没有归档功能
3)压缩或解压后源文件不存在
格式:
gzip 要压缩的文件名
gunzip 压缩文件名
3.bzip2: 功能、特点与gzip相同,只是后缀为.bz2
bunzip2: 解压
4.tar:-x : 释放归档文件,解压
-c : 创建一个新的归档文件,压缩
-v : 显示归档和释放的过程信息
-f : 用户指定归档文件的文件名,否则使用默认名称
-j : 由tar生成归档,然后由bzip2压缩 .tar.bz2
-z : 由tar生成归档,然后由gzip压缩 .tar.gz
注意:
1)具有归档功能,并通过选项可以进行压缩或解压
2)压缩或解压后源文件存在
3)需要写全压缩或解压的文件名格式:
格式:
tar 选项 压缩(解压)文件名 [要压缩的文件列表]
组合:
-cjf :以bz2的格式压缩文件
-czf :以gz的格式压缩文件
-xvf : 解压一个压缩包;解压后压缩包依然存在