将近日学习Linux基础编程,系统编程,网络编程的word笔记搬运过来,图片无法直接粘贴,就丢失掉了。
日后工作学习中使用与扩充维护还是word笔记。
基础编程day01
内容简介:
Linux简介
shell基本操作
自动补全,历史记录,光标移动,删除字符ctrl+h d u k
Linux目录结构
/,usr,usr/local
绝对路径/,相对路径,., .., cd -
文件目录相关命令
tree,ls,三种人的rwx权限,cp,rm,mv,mkdir(-p)
查看文件内容
cat,more等
软硬链接
Inode,ln(-s)
修改文件权限
chmod,~umask设置默认文件权限
查找
find(-name,-type, -size, -atime),grep
压缩包的管理
tar,rar,zip,unzip
Linux介绍
是类unix的操作系统
Linux操作系统的内核的名字也是Linux
Ubuntu主版本号副版本号,副版本号:4月是稳定版本,10月是beta版本,主版本号:双数是长期支持版本,单数是短期支持版本
不同颜色代表不同类型文件
白色普通文件
绿色可执行文件
红色压缩文件
蓝色目录
青色链接文件 快捷方式
黄色设备文件 block块,char字符,fifo管道
灰色其他文件
带-还是- - 还是不带任何
命令参数前是否带- System V风格的,带-;BSD风格的参数前不带-
单词前--,两个-
字母前-,一个-
Shell是什么
窗口的名字叫虚拟终端,和用户进行交互
Shell是在后台运行的应用程序,输入命令后回车shell开始工作
Shell会解析输入的命令,搜索环境变量
环境变量:路径,比如安装了Qt,就把它的路径配置到环境变量中,当QT加载DLL的时候,需要将DLL的路径设置到环境变量中
找到了输入的命令,运行这个程序,在终端下会有对应的输出
Shell-unix
Bash-linux
命令解析器的作用:
解释用户输入的命令,执行对应的操作
去指定路径搜索用户输入的命令
环境变量—路径
1 命令或目录补齐
快捷键:tab
2. 遍历历史记录
History
Crtl+p;ctrl+n;向上;向下
3. 光标移动
左ctrl+b;右ctrl+f;头部+a;尾部+e;(backward,forward,ahead,end)
4. 删除字符
ctrl+h删除光标之前的字符,ctrl+d删除光标之后的字符
光标盖住的字符就是光标后面的字符
ctrl+u删除前面所有;ctrl+k删除后面所有
Linux的目录结构
树,根目录‘/’表示,没有磁盘符
不同的子目录有不同的功能
根目录下常见目录:
1 /bin:binary:可执行程序,shell命令,内建命令不会显示如cd
.在linux中表示当前目录
./ls
2 /dev:设备目录,在linux下一切皆文件
3 /lib:linux运行时需要加载的一些动态库
4 /mnt:手动的挂载目录
5 /media:自动的挂载目录
6 /root:linux的超级用户的家目录,超级用户运行时需要的文件存放在此
7 /usr:unix system resourceunix操作系统的资源目录
头文件:stdio.hstdlib.h
游戏:
用户安装的程序 /usr/local
8 /etc:存放配置文件(包括操作系统和第三方)
/etc/passwrd:存放当前linux操作系统下用户的信息
/etc/group
man5 passwrd 5是章节号
9 /opt:安装第三方的应用程序
10 /home:是linux操作系统中所有用户的家目录(宿主目录)
/home/ye
11 /tmp:存放临时文件 重新启动电脑时,该目录清空
12 /boot:存放的是开机启动项,修改可能导致无法开机
绝对路径与相对路径 . / ..
1 绝对路径:windows下是用盘符来表示的,linux是从根目录/开始表示的
~代表用户的家目录,宿主目录
/home/ye/zoo/animal/food
2 相对路径:从当前的目录开始表示。 ./zoo/animal/food ./可加可不加
3 .和..目录
.当前目录 ./当前目录下的东西
..当前目录的上一级目录cd.进入上一级目录中
cd– 切换目录
4
Ye:当前登录的用户
@:在
Ye-virtual-machine:主机名
~:用户的家目录
$:当前用户是普通用户
#:当前用户是超级用户
文件目录相关命令:
1 tree
查看目录的内容
tree查看当前的目录
treedir查看指定目录
需要安装:sudo apt-getinstall tree
2 ls
功能:查看文件或目录
参数:
-a显示所有文件
隐藏文件:文件或目录名前有‘.’
-l(list)显示详细信息
-F如果是目录的话,在后面加一个/
rwx文件所有者权限:读,写,执行
r-x文件所属组用户:读,执行
r-x其他人:读,执行
1:硬链接计数
第一个root:文件所有者是谁
第二个root:文件所属组的名字
70952:文件大小 如果文件是目录,大小是4K
日期
文件名
Linux下文件的类型:
7种,第一个字符表示文件的类型
普通文件:-
.txt压缩包 可执行文件
目录:d
符号链接,软连接:l (link)
管道:p (pipe)
套接字:s (socket)
字符设备:c (char计数)
鼠标,键盘
块设备:b
U盘,硬盘
Linux下三种类型的用户
文件所有者:user
文件所属组用户:group
其他人:other
3 cd 切换目录
cd目录
如何进入家目录
cd绝对路径(/home/ye)
cd~
cd 不加东西就是进入当前用户的家目录
在临近的(最后两个相邻的)两个目录之间切换
cd– 适用于目录很长的情况
4 pwd
显示当前目录 print work directory
5 mkdir
mkdir文件名
-p 一次性地创建多级目录(删除是-r)
mkdiraa/bb/cc –p
6 touch
创建空文件
touch文件名 如果文件不存在 则创建文件
文件存在:更新文件的时间
7 rmdir
删除空目录
rmdir空目录的名字
8 rm 删除
删除目录是递归的方式 -r
目录:
rmfile -r
rm目录名 –r
-r递归的方式处理
注意问题:
删除之后,很难恢复
删除提示 –i
rmfile -ri
文件:
rm文件名 –i 删除时会添加提示信息
9 cp 拷贝
cp要拷贝的文件(file1) file(不存在)
创建file,将file1的内容拷贝到file中
cpfile1 file(存在)
file1会覆盖file
cpfile dir(存在)文件和目录拷贝
把file拷贝到dir中
cpdir(存在) dir1(存在)-r目录和目录拷贝
目录是树状的,拷贝时需要递归地拷贝 -r
将dir的内容(不包括dir)拷贝到dir1中
cpdir(存在) dir1(不存在)-r目录和目录拷贝
拷贝时需要递归地拷贝-r
将dir中的内容(不包括dir)拷贝到dir1中
10 mv 改名或者移动文件
mvfile1 file2
改名:
mvfile(存在) file1(不存在)--file为文件
mvdir(存在) dir1(不存在)
移动:
mvfile(文件) dir(存在的目录)
fileàdir中
mvdir(存在) dir1(存在)
把dir移动到dir1中
mvfile(存在) file1(存在)
file文件覆盖file1文件,file文件被删除
查看文件内容
11 cat 显示文件内容到终端
catfilename 把文件的内容打印到终端
终端能显示的字符是有上限的
12 more
morefilename
q退出,回车向下浏览一行,空格是翻页
没有回头路
13 less
lessfilename
ctrl+p向上浏览一行,ctrl+n或者回车向下浏览一行
空格或者page down向下翻页
Pageup向上翻页
14 head
从文件头部开始 显示指定的行数
head-5 stdio.h 显示5行
默认是显示10行
15 tail
同head
软硬链接 ln
软连接—快捷方式
ln–s 文件名 快捷方式的名字
路径的字节数就是mystdio.h文件的大小:7
文件名使用绝对路径,那么软连接移动到其他目录也可使用
目录也可以创建软连接
硬链接
创建硬链接和引用很像
ln文件名 硬链接的名字
磁盘à数据块à索引节点号inode定位文件 文件名是给用户看的,访问文件其实是访问inode索引节点号。
创建的硬链接指向的inode索引节点号和文件名是一样的,所以创建硬链接并不会占用额外的磁盘空间。
作用: 创建新文件,硬链接计数1
每增加一个硬链接,硬链接计数加1
若硬链接计数为0,那么数据块就是被废弃的数据块,操作系统不会保护这个数据块,使得它里面的内容可以被覆盖掉
格式化磁盘会使得文件的引用计数变为0,但是文件不会被删除
使用场景:
磁盘上有一个文件/home/ye/hello
在其他多个目录中也能管理hello,并且实时同步,就创建硬链接
修改文件或目录权限-chmod
文字设定法
chmod who[+-=] mode 文件名
who:
u-user文件所有者
g-group文件所属组
o-other其他人
+
-
=覆盖
mod:
r:读
w:写
x:执行
-:没有任何权限
题目:rwxrwxrwx – file
文件所有者和其他人减去读写权限
所有者u
其他人 o
读r
写w
减去-
chmod u+r,g-x file.c 用逗号做间隔
a all(默认的)所有三类人
数字设定法
chmod [+-=] mod 文件名
=是覆盖,默认是不写的
mode:八进制的数 0777
r:4
w:2
x:1
-:0
权限加满:4+2+1 = 7
题目:
所有者和同组用户设置为-wx
wx:3
其他人只有执行权限:1
chmod 0331 file; 0是八进制 第一个3是文件所有者 第二个是用户所属组 最后一位是other
chmod默认的保护机制 chmod –w file other的w权限不会被设置,需要显式地aw
0331会和~umask相与,得到的结果作为最终设置的值
chown修改文件地所有者或所属组
chown新的所有者 文件名
chown新的所有者:新的组文件名
chgrp 修改文件所属用户组
chgrp新的组 文件名
目录一定要有执行权限,否则就打不开了
文件的查找和检索
根据文件属性查找find
文件名:
find查找的目录 –name “查找的文件名”
不加””时,使用通配符可能会产生解析错误
通配符*可以匹配字符串或字符 ?只能匹配一个字符
文件类型
find查找目录 –type 文件类型
普通文件:f
目录:d
符号链接:l
管道:p
套接字:s
字符设备:c
块设备:b
文件大小
find查找的目录 –size+10k
+大于: +10k
-小于: -10k
等于: 10k
单位
k-小写
M-大写
大于10k,小于100k, 每个参数前面都需要加size
find. –size +10k –size -100k
按日期
创建日期:-ctime –n/+n (create)
-n代表:n天以内的才是
+n代表:n天以前的都是
修改日期:-mtime –n/+n (modify)
访问日期:-atime –n/+n (access)
深度:最深搜索到第几层/搜索n层以上的目录
-maxdepthn(层数) 搜索n层之内的
findtest –maxdepth 1
-mindepthn(层数) 搜索n层以上的
高级查找
例:查找指定目录,并列出目录的详细信息 –exec和-ok的区别
find./ -type d –exec ls –l {} \;
find ./ -type d –exec shell命令 {} \;
find./ -type d –ok shell命令{} \;
ok比较安全,会有选择提示,一个y会ls –l一个目录
find./ -type d | xargs ls –l
|是管道,find的内容默认显示到终端,加管道会将内容放到管道
管道分为两端, write端和read端,管道里的数据会使用ls–l这个命令
管道可以看作一个缓存区,是内核分配的
搜索总结:find 搜索路径参数(按照什么搜索) 搜索的内容
grep 根据文件内容查找
grep–r(有目录递归地搜索)“查找的内容” 搜索的路径
搜索家目录中带hello world的字符串的文件
grep–r “hello world” ~
查找到后,想进入文件查看这一行 -n
grep–r -n “hello world” ~
总结:
find 搜索路径参数搜索内容
grep 搜索内容参数搜索路径
压缩包的管理
1 linux下常见压缩格式
.gz– gzip
-k保留源文件默认是不保留的
无法对目录进行压缩
gzipfile1 file2 会压出来两个压缩文件
.bz2– bzip2 缺点同上
2 常用压缩命令
1 tar – 打包
参数:
c– 创建压缩文件
x– 释放压缩文件
v– 打印提示信息
f– 指定压缩包的名字
z– 使用gzip压缩文件 --- XXX.tar.gz
j– 使用bzip2的方式压缩文件 --- XXX.tar.bz2
压缩:
tar参数 压缩包的名字 原材料
tarzcvf test.tar.gz file dir
解压缩
tarzxvf test.tar.gz
tarzxvf test.tar.gz –C dir解压到指定目录
总结:
压缩
tar参数 压缩包名 原材料
解压缩
tar参数 压缩包名 参数(-C) 解压路径
2 rar
rar需要安装
sudoapt-get install rar
压缩:
(缺少参数a)
rara 压缩包名(不需要指定后缀)原材料 –r(用递归的方式,子目录也压入)
压缩参数加-r,将目录中的子目录也压缩
如果不加-r,那么只会压入文件
解压缩:
rarx 压缩包名 解压目录(默认是当前目录)
总结:
压缩:
tar/rar/zip 参数 压缩包名 原材料
解压缩:
tar/rar 参数 压缩包名 参数 解压路径
rar解压缩到指定目录不需要参数(-C)
3 zip/unzip
压缩
zip 参数 压缩包名 原材料(bk hello)
如果有目录 –r 才会把子目录都压入 不加的话默认是不压缩目录的
解压缩
unzip压缩包的名字 –d 解压目录
总结:
zip 参数 压缩包名 原材料(bk hello) (-r)
unzip 不加参数 压缩包的名字 –d解压目录