1. linux简介
- linux是一种
多用户、多任务、多层次,应用于服务器领域的操作系统
- 常见的有Debian系列的
乌班图、红帽公司的centos等
- 在Linux系统中,shell是命令行解释器,即用户输入命令,然后shell解释这些命令,根据不同的命令,给用户返回不同的结果
2. linux根目录介绍
| 目录 | 功能 | 其他 |
|---|
bin | 主要存放linux命令和工具 | |
etc | 存放linux的配置文件,如账号、密码、分组数据等 | |
usr | 安装程序的目录 | |
boot | linux入口文件 | |
home | 用户目录 | |
root | 超管用户目录 | |
proc | 系统状态文件 | |
var | 存放变化过程文件 | |
lost-round | 回收站 | |
mnt | 外部设备挂载目录 | |
opt | 第三方软件安装目录 | |
lib | 静态链接库 | |
dev | 设备文件 | |
3. 基础指令
| 指令 | 功能 | 其他 |
|---|
cd ../ | 跳转上一层 | |
cd ./ | 跳转当前层 | |
cd / | 跳转根目录 | |
cd ~ | 跳转家目录 | 每创建一个用户就会创建一个家目录,在/home/里面,用户一进来默认的目录就是家目录 |
cd - | 跳转上一次的目录 | |
pwd | 查看当前目录 | |
sodu su | 获取root权限 | 要输入超管的密码 |
exit | 退出超管权限 | |
init 0 | 关机 | |
init 6 | 重启 | |
clear | 清屏 | ctrl+l 快捷键也是清屏 |
history | 查看历史命令 | 上下翻页可以回显历史命令 |
!历史命令编号 | 执行指定的历史命令 | history指令可以看到历史指令编号 |
"|" | "|" 为管道运算符,可以将一个命令的输出作为另一个命令的输入 | 用多个指令依次执行可以达到更理想的效果 |
3.1 硬链接、软链接(符号链接)
| 指令 | 功能 | 其他 |
|---|
ln 1.txt 1硬链接.txt | 创建硬链接 | Linux 采用索引节点 inode 记录文件信息,每个文件或目录都唯 一地对应 inode 数组中的一个元素。但一个元素可以与多个文件 或目录名对应。文件名与索引节点号的对应称之为连接。可在不同目录通过不同路径访问同一个文件,节省磁盘空 间又便于数据一致性;有一定防止误删除功能,只有同一 个 inode 属于唯一一个连接时,数据才被物理删除,不能链接目录,不能跨越不同文件系统(如分区、驱动器) |
ln -s 1.txt 1软链接.txt | 创建软链接 | 前者的文件数据是指向 后者的路径。即便在源文件不存在的情况下也可建立符号连接,删除被指向的文件,连接文件看似失效,再次写入数据,本文件会被重新创建并且把数据写进去。 |
4. 常用快捷键
| 指令 | 功能 | 其他 |
|---|
ctrl+alt+t | 打开终端窗口 | |
ctrl+shift+w | 关闭终端窗口 | |
ctrl+d | 关闭终端窗口 | |
ctrl+shift+t | 在同一个窗口增加终端tab | |
ctrl+shift+加号 | 等比例放大终端窗口 | |
ctrl+减号 | 等比例缩小终端窗口 | |
5. 文件、文件夹增删改查指令
5.1 新增
| 指令 | 功能 | 其他 |
|---|
touch 1.txt | 创建文件1.txt | |
mkdir demo | 创建demo文件夹 | |
cp 1.txt ./2.txt | 复制1.txt到当前目录并命名为2.txt | |
cat >3.txt | 编辑3.txt并写入内容(编辑完内容后ctrl+c退出),没有3.txt的情况下会创建3.txt | |
cat >>3.txt | 编辑3.txt并追加内容(编辑完内容后ctrl+c退出),没有3.txt的情况下会创建3.txt | |
mv ./demo/4.txt ./ | 移动demo目录下的4.txt到当前目录 | |
5.2 删除
| 指令 | 功能 | 其他 |
|---|
rm -rf 1.txt | 删除1.txt文件 | -r递归删除、-f强制删除不提示、-i提示删除、-v删除后显示已删除xxx文件 |
rmdir | 删除空文件夹 | |
rm -rfv demo | 递归删除demo文件夹并展示删除信息 | |
5.3 修改
| 指令 | 功能 | 其他 |
|---|
cat > 3.txt | 覆盖修改3.txt里面的内容 | > 将标准输出重定向到文件。如果文件已存在,则覆盖它;如果文件不存在,则创建它 |
cat 1.txt 2.txt > 3.txt | 将1.txt和2.txt合并并且覆盖掉3.txt的内容 | -n 显示行号、-s 将连续多行的空格合并为一行 |
cat >> 3.txt | 在3.txt内容的最后面增加内容 | >> 将标准输出追加到文件末尾。如果文件不存在,则创建它。 |
cat 1.txt 2.txt >> 3.txt | 将1.txt和2.txt合并并且追加到3.txt内容的最后面 | |
touch 3.txt | 在3.txt存在的情况下,会修改3.txt的最后更新时间 | |
5.4 查看指令
| 指令 | 功能 | 其他 |
|---|
cat 1.txt | 查看1.txt的内容 | |
head 1.txt -15 | 查看1.txt的前15行内容 | -数字 代表展示的行数 |
tail 1.txt -15 | 查看1.txt的最后15行内容 | -数字 代表展示的行数 |
ls -aliR | 以列表加递归加显示索引查看当前文件夹下所有的目录和文件 | -all 列出所有文件、-l 以列表展示、-R 递归展示、-i 显示索引、-F 在文件名后添加表示文件类型的字符 |
ls | 查看当前目录下的所有内容 | linux终端下,白色普通内容、浅蓝色链接、蓝色文件夹、红色压缩文件或者失效的链接文件,绿色可执行文件 |
dir | 查看当前文件夹下的内容 | |
vdir | 查看当前文件夹下的详细内容 | |
ll | 最常用的查看当前文件夹下详细信息 | 等同于ls -alF |
alias | 查看有简写的指令 | |
pwd | 查看当前目录 | |
more 1.txt | 分页查看文件内容 | 空格键:下翻一屏,b: 前翻一屏,回车键:下翻一行,q: 退出 |
less 1.txt | 分页查看文件内容 | 空格键:下翻一屏,b: 前翻一屏,回车键:下翻一行,q: 退出 |
5.5 通配符
| 指令 | 功能 | 其他 |
|---|
ls *.txt | 查询所有的.txt文件 | *号匹配所有 |
ls ?.txt | 查询名字为一个字符的.txt文件 | ?号匹配一个字符 |
ls [abc].txt | 查询名字叫a或b或c的.txt文件 | []里面有的字符任意一个匹配 |
ls [a-f].txt | 查询名字为a-f的一个字符的.txt文件 | [-]为范围匹配 |
ls [^abc].txt | 查询名字不叫a或b或c的.txt文件 | [^]为取反匹配 |
ls {ab,bb,bc}.txt | 查询名字叫ab或bb或bc的.txt文件 | {}为全匹配,用逗号可以隔开写多个 |
6. 搜索查找指令
| 指令 | 功能 | 其他 | |
|---|
find / -name 1.txt | 从根目录开始递归查询名称为1.txt的文件 | 建议搜索的目录不要写太大,不然速度很慢 | |
grep -r dlb 1.txt | 查找文件内容 | -F 将查找模式看成是单纯的字符串,-i 匹配比较时不区分大小写,-r/-R 以递归方式查询目录下所有子目录中的文件,-n 加上行号 | |
diff 1.txt 2.txt | 比较文件差异 | -b忽略行尾空格 -c展示上下三行上下文 -n显示行号 | |
wc 1.txt | 查看文件行数、字节数、字数、文件名 | | |
file 1txt | 识别文件类型 | | |
uame -a | 显示系统版本相关信息 | | |
diff a b -r | 递归查找两个文件夹内所有文件名的不同 | | |
| `ps -aux | grep demo` | 查找所有包含demo的进程 | |
whereis cd | 查找cd指令所在位置 | | |
whatiis cd | 查找cd指令简易文档 | | |
which cd | 在系统默认的目录中查找cd文件 | | |
7. 文件所有者和所有组修改
| 指令 | 功能 | 其他 |
|---|
find / -name 1.txt | 从根目录开始递归查询名称为1.txt的文件 | 建议搜索的目录不要写太大,不然速度很慢 |
chown root 1.txt | 修改1.txt这个文件的所有者为root | |
chgrp root 1.txt | 修改1.txt这个文件的所有组为root | |
chown root:root 1.txt | 同时修改1.txt这个文件的所有者和所有组 | 所有者:所有组,可以不一样 |
chown root:root demo -R | 同时递归修改demo文件夹的所有者和所有组 | |
| | |
8. 文件各个角色读写执行权限修改
| 指令 | 功能 | 其他 |
|---|
chmod 777 1.txt | 将1.txt文件的所有者、所有组、其他用户三种角色都设置读写执行权限 | 777三个数字,分别代表所有者、所有组、其他用户,7用2进制表示是111,111三个数字分别表示读、写、执行权限 |
chmod ugo+rwx 1.txt | 将1.txt文件的所有者、所有组、其他用户设置读写执行权限 | ugo三个字母,分别代表所有者、所有组、其他用户,也可以直接用a表示all所有角色,+或者-表示是增加或减去权限,rwx三个字母分别表示读、写、执行权限 |
9. 用户管理
root用户:有且只有一个,拥有所有权限
普通用户:多个,部分权限
| 指令 | 功能 | 其他 |
|---|
adduser dlb | 创建用户 | 电话、房间号等可以选填项可以回车默认 |
useradd dlb2 -u 1007 -m dlb2 -g 1007 -G dlb2 | 半自动创建用户 | -u 用户id -m 主目录 -g 组id -G 组名称 |
usermod -u 1008 | 修改用户id | 不能改为已经使用的id |
passwd dlb | 修改用户密码 | root账号修改可以不用输入原密码并且不限制长度,其他角色修改需要输入原密码并且需要长度大于8位 |
cat /etc/password | 查看用户信息 | 用户名:密码令牌:uid用户id:gid组id:解释:主目录:解释器 |
cat /etc/shadow | 查看令牌信息 | 用户名:密码密文 |
vi /etc/sudoers | 编辑有权限sudo的用户 | dlb ALL=(ALL:ALL) ALL |
userdel -r dlb2 | 删除用户dlb2 | |
vi /etc/passwd | 禁用用户dlb2 | 找到对应用户哪一行,在最前面加#号注释掉或者在最后面加:false或者:nologin |
su student | 改变用户身份为student账号,要输入student的密码 | 省却了注销和重新登录过程,在使用 root 身份无法登录的 Telnet 网络登录的情况下更为有用。( su 是替代用户(Substitute user)的意思,但常被理解为 super user) |
sudo su student | 作为student用户 | su后面不写账号默认为root |
id | 查看uid、gid | |
10. 用户组管理
私有组:useradd在创建用户时,默认也创建了一个组,这个组叫用户私有组,可以设置别的账号为这个组的成员,享有这个组的权限
登录组:用户登录进来默认的组,这个组可以修改
| 指令 | 功能 | 其他 |
|---|
groupadd dlb2 | 新增dlb2组 | |
userdel -r dlb2 | 删除dlb2组 | |
usermod -G 1001 dlb | 将dlb加到1001组 | |
usermod -g student dlb | 将dlb用户组修改为student组 | |
vi /etc/group | 删除挂载的组权限,只能手动删 | 用户名:x(令牌):1001:dlb,dlb2,这里挂载的dlb,dlb2需要手动去掉 |
11. 查看设备信息
| 指令 | 功能 | 其他 |
|---|
vi /etc/hostname | 修改主机信息 | |
cat /proc/version | 查看linux版本 | |
cat /proc/cpuinfo | 查看cpu信息 | |
cat /proc/partitions | 查看分区信息 | |
last | 查看登录过的账号和时间 | |
cal | 打印日历 | |
12. 多个用户登录
Linux 提供了六个虚拟终端(TTY1-TTY6)和一个 X-window 图 形终端供不同的或相同的用户名登录,用ctrl+alt+Fn 切换,ctrl+alt+F1 至 ctrl+alt+F6 :TTY1 到 TTY6
ctrl+alt+F7 :X-window 图形终端
13. 软件包管理
在 Linux 下,deb 格式是 Debian 软件包格式。Deb 是 Debian Linux 发行版和基于 Debian 的操作系统所使用的软件包格式。Deb 文件实际上是一个归档文件,其中包含了软件包的二进制文件、库文件、配置文件和其他相关的元数据。
| 指令 | 功能 | 其他 |
|---|
dpkg -i ./linuxQQ.deb | 安装指定目录的qq | |
apt-get -h | 查看安装软件文档 | |
sudo apt-get update | 更新软件库文件 | |
sudo apt-get install + cmatrix | 安装屏保软件 | 运行屏保指令cmatrix |
sudo apt-get remove + cmatrix | 卸载屏保软件 | |
14. 压缩与解压
| 指令 | 功能 | 其他 |
|---|
tar -cvf dist 1.txt 2.txt 3.txt | 将多个文件归档为一个文件 | -c归档 -v查看进度 -f创建或解压文件(必须放在最后一个) |
tar -xvCf dist ./ | 解压归档到当前目录 | |
tar -zvf dist dist | 将归档文件压缩 | -z压缩 |
tar -zxvCf dist ./ | 解压归档到指定目录 | |
tar -zcvf dist.tar dist | 归档压缩dist | |
tar -zxvCf dist.tar ./ | 解压缩dist.tar 到指令目录 | -z压缩 -x解压 -v查看进度 -C指定目录 -f创建或解压文件(必须放在最后一个) |
gzip 1.txt 2.txt | 将两个文件分别压缩 | |
gzip -dv 1.gz | 解压缩1.gz | |
14. 磁盘管理
| 目录 | 功能 | 其他 |
|---|
\ | 根目录 | |
\boot | 引导分区 | 存放启动linux的核心文件 |
\swap | 交换分区 | 用来支持虚拟内存 |
14. u盘挂载卸载
| 指令 | 功能 | 其他 |
|---|
在mnt下创建usb文件夹 | 创建挂载目录 | |
虚拟机可移动设备连接u盘 | | |
虚拟机设置-usb控制器-usb兼容性 | 三种都要试一下 | |
fdisk -l | 查看可以挂载的设备位置 | 一般都在/dev下叫sda1之类的 |
mount -t auto /dev/sda1 /mnt/usb | 挂载usb设备/dev/sda1到/mnt/usb文件夹 | -t 选择文件类型,auto为自动选择 |
umount /dev/sda1 | 卸载usb设备 | |
14. 进程管理
| 指令 | 功能 | 其他 |
|---|
ps -aux | 查看全部进程详细信息 | |
sleep 3 | 暂停进程3s | |
top | 查看动态进程 | |
kill -9 进程号 | 关闭进程 | |
pstree | 查看进程树 | |
14. 网络管理
| 指令 | 功能 | 其他 |
|---|
ifconfig | 查看网络信息 | 首行首单词是网卡名称 |
ifconfig 网卡名 192.168.3.3 | 临时设置网络ip | |
ifconfig 网卡名 down/up | 关闭/启动网卡 | |
nmcli networking off/on | 关闭/打网络服务 | 乌班图图形窗口右上角网络符号会变化 |
service network-manager restart | 重启网络服务 | |
ping 192.168.1.1 | 查看ip是否能通信 | |
14. VIM编辑器
有三个模式,命令模式、编辑模式、底行模式
每个家目录都有一个.vimrc配置文件
| 指令 | 功能 | 其他 |
|---|
vim 1.c | 进入vim编辑器 | 一进来一般是命令模式 |
vim 1.c | 进入vim编辑器 | 一进来一般是命令模式 |
命令模式下单独按下a、i、o按键 | 进入编辑模式 | 按Esc按键退出编辑模式 |
命令模式下输入:进入底行模式 | 进入底行模式 | 按Esc按键退出底行模式,w保存、q退出、!强制执行,可以自由组合 |
gg 跳转首字
G 跳转尾字
dd 删除一行
D 删除一行内容
yy 复制
p 粘贴
5yy 复制5行
Ctrl + v 块选 然后使用 end向下移动
u 撤销
Ctrl + r 重做
14. GCC 编译文件
| 指令 | 功能 | 其他 |
|---|
gcc -E 1.c -o 1.i | 预处理文件,生成.i文件 | -o 设置生成的文件名 |
gcc -S 1.i -o 1.s | 编译文件,生成.s文件 | -o 设置生成的文件名 |
gcc -c 1.s -o 1.o | 汇编文件,生成.o文件 | -o 设置生成的文件名 |
gcc 1.o -o 1.out | 将1.o目标文件链接成1.out二进制可执行文件 | -o 设置生成的文件名 |
./1.out | 执行out二进制可执行文件 | |
gcc 1.c -o 1.out | 一步到位将c文件转化为out二进制可执行文件 | -o设置生成的文件名,不设置默认为a.out |
14. GDB 调试文件
| 步骤 | 指令 | 功能 | 其他 |
|---|
| 1 | gcc -g 1.c -o demo.out | 编译 | -g 生成可调试文件 -o 指定输出目标文件名称(不加默认教a.out) |
| 2 | gdb -q demo.out | 调试文件 | -q 不展示gdb版本等信息 |
| 3 | l | 查看10行 | 再按一下l再往下翻10行 |
| 4 | l 7 | 第七行前后各显示5行 | |
| 5 | l main | main函数名位置前后各显示5行 | |
| 6 | break 10/sum | 给第10行或者sum函数名处设置断点 | break可以简写b |
| 7 | info break | 查看断点 | |
| 8 | delete 1 | 删除断点号处的断点 | |
| 9 | run | 运行代码,会停在断点处 | |
| 10 | next | 单步调试,不进入函数 | 简写n |
| 11 | step | 单步调试,进入函数 | 简写s |
| 12 | ctrl+l | 清空 | |
| 13 | continue | 结束单步调试 | |
| 14 | print c | 打印变量c的值 | 打了断点,使用变量的地方有值了,p变量名就能出来 $n = 1 |
| 13 | display c | 观察模式 | |
14. Makefile 批量构建文件
Makefile是用于c/c++等语言编译过程中管理项目构建过程的工具,

| 步骤 | 指令 | 功能 | 其他 |
|---|
| 1 | touch Makefile | 创建构建文件 | |
| 2 | vim Makefile | 编辑构建文件 | |
| 3 | make | 执行构建文件 | 从上面开始一行一行开始执行,如果没有依赖到后面的行,后面的行不会执行 |
| 4 | make 2.i | 执行构建文件指定行 | 从指定的行开始执行,如果没有依赖到后面的行,后面的行不会执行 |
main.out:1.o 2.o
gcc 1.o 2.o -o main.out
1.i:1.c
gcc -E 1.c -o 1.i
1.s:1.i
gcc -S 1.i -o 1.s
1.o:1.s
gcc -c 1.s -o 1.o
2.i:2.c
gcc -E 2.c -o 2.i
2.s:2.i
gcc -S 2.i -o 2.s
2.o:2.s
gcc -c 2.s -o 2.o
14. sh脚本
#! /bin/bash
echo nihaoshijie
echo '你好shijie'
demo='wangzong'
echo "你好$demo"
echo "nihao{$demo}dejia"
echo `touch 1.txt | ls -l`
echo "\$0=$0,$1,$2,$3..."
echo "请输入登录姓名"
read name
echo "姓名是 $name"
stty -echo
read -p "请输入登录密码:" passwd
if [ $passwd = '1' ]
then
echo "u=$name,p=$passwd"
stty echo
echo "u=$name,p=$passwd"
else
echo "密码不为1"
fi
sum=1+2
echo $sum
echo $[sum]
let a=$1
let b=$2
echo $[a+b]
if [ $1 -lt 10 ]
then
echo "参数一{$1}大于10"
if [ $2 -gt 20 ]
then
echo "参数二{$2}大于20"
else
echo "参数二{$2}小于20"
fi
elif [ $1 -gt 10 ] && [ $1 -lt 20 ]
then
echo "参数一{$1}大于10小于20"
else
echo "参数一{$1}小于10"
fi
echo "what is your grade?"
read grade
case $grade in
"100") echo "your grade is excellent " ;;
"90") echo "your grade is nice" ;;
"80" ) echo "your grade is good" ;;
"70") echo " your grade is not bad";;
*) echo "your grade is low" ;;
esac
for ((i=0;i<10;i++))
do
echo "i---$i `sleep 2 `"
done
while echo "just give me money!!"
do
mkdir cry
cd cry
touch haha.txt
sleep 1s
done