linux学习笔记
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
1、Linux
* Linux的诞生时间 :1991年10月5日
* Linux产生的几个条件 :GNU计划 自由软件基金会
POSIX 轻量级操作系统标准
* GUN / LINUX 指的是使用Linux作为内核的操作系统 :
﹡软硬件间的通信平台
﹡文件管理
﹡内存管理
﹡进程管理
* 版本号 :2 . 4 . 22
\_________ 修订版本号
\_________ 从版本号:奇数代表是测试版,偶数代表是稳定版
\_________ 主版本号
* 特殊目录
﹡boot 引导程序(boot loader)
内核
对应一个分区,大小为100M
﹡sbin 管理员(超级用户root)可以执行的命令
﹡bin 普通用户可以执行的命令
﹡etc 配置文件的路径
﹡dev 设备文件的目录
﹡root 管理员专属目录
﹡home 普通用户专属目录
﹡lib C语言函数库
﹡usr 用户应用程序
﹡tmp 临时文件目录
﹡var 小文件,访问频繁的文件
﹡proc 内核镜像
﹡swap 交换分区(相当于虚拟内存)
2、Linux操作系统的使用手册页的组成部分
目录 内容
/usr/man/man1 命令─在s h e l l中执行的命令
/usr/man/man2 系统调用─关于核心函数的文档
/usr/man/man3 库调用─l i b c函数的使用手册页
/usr/man/man4 特殊文件─关于/ d e v目录中的文件的信息
/usr/man/man5 文件格式─/ e t c / p a s s w d和其他文件的详细格式
/usr/man/man6 游戏
/usr/man/man7 宏命令包─对L i n u x文件系统、使用手册页等的说明
/usr/man/man8 系统管理─根操作员操作的使用手册页
/usr/man/man9 核心例程─关于L i n u x操作系统内核源例程或者内核模块技术指标的文档
3、 常用规则表达式
表达式 匹配
* 任意字符
?或者. 一个字符
{ x } 前导字符x个
{ x , y } 前导字符至少x个,但是不超过y个
{ x , } 前导字符至少x个
( xxx ) | ( XXX ) 字符串x x x或者X X X
[ xxx ]或者[ x-x ] 在方括号中的字符范围内中的某个字符
[ XYZ ]+ X、Y\Z至少一次
\ x ? 或\等符号字符
^ pattern 一行开头的字符排列形式
$ pattern 一行结尾的字符排列形式
4、* 命令(桌面右键→打开终端)
﹡[root@localhost root]#
\_________超级用户ROOT的提示符
\____当前目录
\____主机名
\____当前登陆用户
﹡ntsysn↙ 选 network nfs vsftpd xfs (敲击空格,就表示选中,在敲击一下,就不选了)
﹡kwrite/etc/X11/XF86Config↙ 在第21行前加#号,保存退出
﹡改变目录 cd_目录名
﹡查看文件或目录 ls_参数_文件或目录名
★-a 显示所有文件,包括隐藏文件
"." 表示当前目录
".." 表示上一级目录
★-l 以长格式显示("ll"相当于"ls_-l",下面是显示的内容的解释,分6大块)
文 r w x r w x r w x 硬 所 所 文 时
件 读 写 执行 读 写 执行 读 写 执行 链 有 属 件
类 4 2 1 4 2 1 4 2 1 接 者 组 大
型 所有者 所属组 其他人 小 间
下面是解释开头字母代表的不同的东西
▲ d direc 目录
▲ - 普通文件
▲ l 软链接文件
▲ c 字符设备文件
▲ b 块设备文件
▲ p 管道文件
▲ s 套接字文件
文字不同颜色代表的东西
◆ 黑色 普通文件
◆ 蓝色 目录
◆ 绿色 可执行文件
◆ 浅蓝色 软链接文件
◆ 黄色 设备文件
◆ 红色 压缩文件
★-h 以适当单位显示文件大小(必须配合-l使用,如-hl)
﹡ 新建目录 mkdir_目录名
﹡ 删除目录 rmdir_目录名
﹡ 新建文件 touch_文件名
﹡ 删除文件或目录 rm_参数_文件名或目录名
★-f 强制删除(不提示用户)
★-r 删除目录
快捷键 Ctrl+C 终止命令执行
﹡ 文件复制 cp_参数_ 源_目的地
★-f 强制覆盖
★-r 复制目录
★-a 保持文件的原有权限和所属者
﹡ 文件的移动与重命名 mv_参数_ 源_目的地
★-f 强制覆盖
创建链接
▲
软链接(相当于快捷方式)
▲ 硬链接(一个文件拥有多个文件名)
ln_参数_ 源_目的地
★-f 强制覆盖
★-s 软链接
﹡ 清理命令内容 clear
﹡ 更改文件权限 chmod_8进制权限_文件名
★-R 递归修改
﹡ 更改文件或目录的所属组 chgrp_组名_文件或目录的名
﹡ 更改文件或目录的所有者 chown_所有者_文件或目录的名
﹡ 更改文件或目录的所属组和所有者 chown_所有者.(或者:)所属组_文件或目录名
﹡ /etc/passwd : Linux用户配置文件
/etc/group : Linux 组配置文件
﹡ 显示文件内容 cat_文件名_参数
★-n 显示行号
tail_-数值_文件的地址
-2 就是显示后2行
不写 就是显示后10行
shift+pageup : 向上翻页
shift+pagedown : 向下翻页
﹡ 文件查找 find_起始目录_查找条件_动作
which_可执行文件名 : 在环境变量.PATH指定的目录中查找可执行文件
locate_文件名称 : 根据预先生成好的数据库进行快速检索
locate_-u(updatedb) : 创建快速检索数据库
注:在执行周期较长的命令后加"&",表示让当前的命令在后台运行
按文件内容查找("?"、"*"是通配符)
grep_要查找的字符串_文件名_参数
★-n 显示行号
★-i 忽略大小写
★-r 递归查找
﹡ 改变运行级别 init_数值
★0 关机
★1 单用户(系统恢复)
★2 多用户无网络(不用)
★3 多用户文本(网络服务,软件开发)
★4 自定义
★5 多用户图形
★6 重启
﹡ Linux下的压缩(打包)和解压(解包)
无压缩 体积大 速度快 .tar 文件较小的
gzip压缩 中 中 .tar.gz \ .tgz 文件较大的数据包,网络的
bzip2压缩 小 慢 .tar.bz2 大型数据,30M以上的
压缩解压命令 tar_
参数_压缩包文件名_-C(大写的)_路径 解包时使用,指定解包到指定路径
_文件名/目录名 打包时使用,指定被打包的目录或文件
★c 打包
★x 解包 (和上面的任选其一)
★v 显示过程信息 (可选)
★f 指定压缩/解压包文件 (必选)
★z 使用gzip压缩
★j 使用bzip2压缩
﹡ 用户管理命令
(组名和用户名都用小写字母,由数字、字母构成,必须以字母开头)
添加系统用户 useradd_参数_用户名
★-c 用户简单描述,用""扩起来
★-d 目径,指定用户家的目录
★-g 组名,将此用户加入指定组
删除系统用户 userdel_参数_用户名
★-r 删除用户时删除用户家的目录
添加组 groupadd_组名
删除组 groupdel_组名 (没有用户时才能删除)
为用户设置密码 passwd_用户名
省略用户名时,表示为当前用户设置密码
﹡ 查看工作目录 pwd
﹡ 切换工作目录 cd_目录名
cd_- 返回上一工作目录
cd_ 回到当前目录
cd_~/_目录名 切换到家目录中的某一位置
cd_~_用户名 指定用户换到家目录
﹡ 帮助 man_数值_命令名称
★1 系统命令
★2 系统调用函数
★3 程序员手册 (以上是常用的)
★4 设备手册
★5 配置文件手册
★6 游戏帮助
★7 协议帮助
★8 网络服务
﹡ 查看当前用户名 whoami
﹡ 查看登录用户 who
﹡ 查看内存使用情况 free
﹡ 查看进程 ps_aux
﹡ 给指定进程发送信号 kill_-数值_进程ID
Kill_-l 查看数值
5、* vi编辑器
★工作模式 编辑模式:所有输入都成为文件内容(Esc键进入命令模式,反过来就是进入编辑模式)
命令模式:功能性操作(默认)
末行模式:辅助操作(以:开始)
★进入vi vi_[文件名]_[+数字]
★退出vi :q 退出
:q! 不保存退出
:wq 保存退出
:x 保存退出
:w_文件名 另存为
★编辑命令 a A 追加模式 a 追加到当前光标后 A 追加到行尾
i I 插入模式 i 插入到当前光标前 I 插入到行首
o O 新行模式 o 当前行下一行新建一行 O 当前行上一行新建一行
s S 替换模式 s 替换当前光标字符 S 替换当前行
★复制命令 [n]yy 省略n值,表示复制一行
★粘贴命令 p 粘贴到当前行后或当前光标后
★撤销命令 u 取消上一次操作,一般来说不限制次数
★剪切命令 [n]dd 剪切n行,省略n值,表示剪切一行
★恢复命令 :redo 恢复上一次操作前的状态
★光标移动命令
h 左
j 下
k 上
l 右
移到文件首 gg
移到文件尾 G
移到任意行 :行号
显示行号 :set_nu
移到下一单词尾 e
移到下一字符串尾 E
移到下一单词首 w
移到下一字符串首 W
★查找命令
完全匹配: 命令 #
n 上一次
N 下一次
不完全匹配: 命令 /字符串
n 下一次
N 上一次
取消查找(去掉黑色框框) :nonl
★替换 :%s/原字符串/目标字符串/g
★可视操作
1.:v
2.移动光标
3.y 复制
4.p 粘贴
★分屏操作
:vs 文件名 垂直分割,将当前的编辑窗口分割成2部分,分别用于编辑原来的文件或指定文件
:split 文件名 水平分割 (同上)
★切换窗口操作
★另存为 :w_文件名
★编辑完一个.c文件,保存后退出(:wq),命令 gcc_文件名.c_-o_要改的名字(就是.out的文件,默认的是a.out,可以改名),然后ls,然后执行.out 文件(./文件名.out)
★v
i配置脚本 vi_~/.vimrc
内容:set nu 显示行号
set ts=4 Tab键,向后4个字符
★组装虚拟机,最后的装完是黑屏的操作界面,变成桌面形式的命令 vi_/etc/X11/XF86Config(用Tab键操作简单),回车,修改3处,2处是16改为24, 还有一个是在Fontpath前加#号,然后保存退出(wq),再startx,再回车就行了
6、* shell编程
﹡ Shell是内核与用户间进行通信的一个应用程序
﹡ 以“#”开始至行尾之间的内容为注释
特例:#!/bin/sh 或者 #!/bin/bash 默认的shell程序,指定解释此脚本shell程序,常放在第一行。(不是注释)
﹡ $字符串 变量的意思
$PWD 显示当前目录
$? 上一条命令执行结果,显示非0(失败)0(成功)
﹡ 屏幕 标准输出 stdout 1
键盘、鼠标 标准输入 stdin 0
出错 标准出错 stderr 2
﹡ 测试 test_参数_测试条件 或 [_参数_测试条件_]
★-d 字符串 是否为目录
★–f 字符串 是否为普通文件
★–L 字符串 是否为软链接
★–r 字符串 是否可读
★–w 字符串 是否可写
★–x 字符串 是否可执行
★-s 字符串 是否非空
﹡ -a 逻辑与
-o 逻辑或
! 非
﹡ 字符串测试
★ = 两个字符串相等
★ != 两个字符串不等
★ –z 空串
★ –n 非空串
﹡ 数值测试
★ a_-eq_b 相等
★ a_-ne_b 不等
★ a_-lt_b 小于
★ a_-le_b 小于等于
★ a_-gt_b 大于
★ a_-ge_b 大于等于
﹡ 算数运算(不支持实数)
★ expr_a_+_b 加法
★ expr_a_-_b 减法
★ expr_a_\*_b 乘法
★ expr_a_/_b 除法
★ expr_a_%_b 求余
﹡ shell脚本的扩展名是 ?sh
﹡ shell脚本执行方法
★ sh_脚本
★ ?_脚
本
★ source_脚本
★ 赋予可执行权限,直接执行,./脚本
﹡ 赋值 变量名=值
﹡ 声明变量 read_变量名(大小写字母)
﹡ 引用 $变量名
﹡ 反引号(Tab上面那个键位)括起来一条shelle命令,当shell执行到这一行时,用这条命令的执行结果取代反引号处的内容
﹡ if语句
if [_$变量="模式"_]
then
命令
else
命令
fi
﹡ case语句(模式里可以是判断条件,如[1-9]是1至9的意思,再如[a-zA-Z]是a到z或者A到Z的意思)
case $变量 in
模式)
命令
;;
模式)
命令
;;
esac
﹡ shell脚本举例
删除目录和文件
if语句
#!/bin/bash
echo_"del /temp/* yes or no ?"
read_abc
if_[_$abc="yes"_]
then
rm_-rf_/temp/*
else
echo_"no!"
fi
case语句
#!/bin/bash
echo_"del /temp/* yes or no ?"
read_abc
case_$abc_in
yes)
rm_ -rf_/temp/*
;;
no)
echo_"no!"
;;
esac
﹡ < ← 新建一个或删除原来的内容 → >
<< ← 追加到文件尾部 → >>
↙ ↘
输入重向符 输出重向符
将一个文件内容作为前面命令的标准输入 将前面命令的标准输出作为后面文件的内容
常用于输出菜单 cat<
﹡ | 管道符,将前面命令的标准输出作为后面的标准输入
﹡ exit 0 退出,返回0,成功
exit 1 退出,返回1,失败
﹡ $1 ~ $9 shell脚本执行时的命令行参数
﹡ 循环
for循环
for_变量名_in_值列表
do
使用变量(变量值每次循环,取列表中的一项)
done
while循环
while_[条件测试,“:”表示死循环]
do
命令(`expr`,表示计算)
done
until循环,和while循环一样
,不过和它正相反,当条件为假的时候才循环,为真时退出
﹡ unset_变量 释放变量,减少内存占用
﹡ service_服务名_状态
服务:httpd 网站服务,apache
vsftpd 文件传输服务
ssh 远程安全shell
smb 网上邻居,samba
状态:start 启动
stop 停止
restart 重启
﹡ ifconfig_eth0_ip地址(一般是198.168.1.2) 给linux设置ip地址
﹡ shell脚本举例
用户选择要启动的服务
#!/etc/bin/sh
cat << MENU
*****************
1.httpd
2.vsftpd
3.ssh
4.smb
*****************
MENU
echo "please input 1~4"
read A
while :
do
case $A in
1)
service httpd start
break
;;
2)
service vsftpd start
break
;;
3)
service ssh start
break
;;
4)
service smb start
break
;;
*)
echo "please input 1~4"
break
;;
esac
done
unset A
﹡ shell脚本里,"=" 两边无空格,"+、-、\*、/" 两边有空格
7、********命令*********************************************
cd 目录名:进入目录命令。
ls:列出当前目录下文件或目录。 -a显示所有文件(包括隐藏文件),
rmdir 目录名:删除目录。(只能删除空目录)。
rm 参数 文件或目录名:删除文件或目录,-f强制删除,-r删除目录。
cp 参数 源文件 目标文件:复制命令,-f强制复制,-r递归方式复
chmod 参数 权限(数值方式)文件或目录名 :更改文件权限,-R递归方式更改。
chown 参数 所有者.所属组 文件或目录名:更改文件所有者或所属组。-R递归更改。
grep 参数 查找的内容 文件名:内容过滤,-n显示行号,-i忽略大小写,-r递归方式查找。
init
数值:更改系统运行级别,0关机,1单用户,2多用户无网络,3多用户文本命令行,4自定义,5多用户图形,6重启。
pwd:查看当前工作目录。
man 数值 需要帮助的内容(命令):数值1~8,1系统命令的帮助,2系统调用函数的帮助,3C语言程序员手册,4设备文件手册,5配置文件手册,6游戏帮助,7协议的帮助,8内核手册(网络帮助)。
who:查看当前系统已登录的用户。
********VI*********************************************
vi的三种工作模式:
1编辑模式:所有输入都将成为文件的内容。
2命令模式:功能性的操作(默认工作模式)。
3末行模式:辅助性的操作。
:split 文件名 :水平分屏。
:vs 文件名 :垂直分屏。
完全匹配查找:在需要查找的内容处按#。
切换查找内容:n:上一处内容,N:下一处内容。
不完全匹配查找:/字符串。注意:直接打/,不是在末行模式下打/。
切换查找内容:n:下一处内容,N:上一处内容。
********Shell脚本***************************************
shell脚本的执行方法:
1、. 脚本名。2、sh 脚本名。 3、source 脚本名。以上这三种方法执行的shell脚本名一定要有.sh扩展名。否则无法执行。
4、./脚本名。这种方法的脚本名可以是任意,但要有可执行权限。
********************************************************
#!/bin/bash
SUM=0
NUM=1
while [ $NUM -le 100 ]
do
SUM=`expr $SUM + $NUM`
NUM=`expr $NUM + 1`
done
echo "1+2+...+100=$SUM"
unset SUM
unset NUM
********************************************************
#!/bin/bash
echo "please input a number:"
read A
if [ $A -ge 100 -a $A -le 200 ]
then
echo "YES"
else
echo "NO"
fi
unset A
********************************************************
#!/bin/bash
DUM=0
FUM=0
for A in `ls`
do
if [ -d $A ]
then
DUM=`expr $DUM + 1`
elif [ -f $A ]
then
FUM=`expr $FUM + 1`
fi
done
echo "DUM=$DUM"
echo "FUM=$FUM"
unset DUM
unset FUM
********Makefile文件*************************************
A : a.o b.o main.o
testmake : $(A)
gcc $(A) -o testmake
a.o : a.c a.h
b.o : b.c b.h
main.o : main.c a.h b.h
.PHONY : clean
clean :
rm -f $(A)
********函数*******************************************
#include
int open(char *pathfile, int flag, mod_t mode)
int close(int fd)
int write(int fd, char *buf, int size)
int read(int fd, char *buf, int size)
********************************************************
#include
#include
#include
#include
#include
#include
int main()
{
int fd, i, j, set;
unsigned char buf[7]; // 定义一个无类型的字符数组
fd=open("/dev/random",O_RDONLY);
if(fd==-1)// 打开失败后的处理
{
printf("open wrong!");
return EXIT_FAILURE;
}
for(i=0;i<7;i++)
{
set=read(fd,&buf[i],sizeof(buf[i]));
if(set==-1) // 读取失败后的处理
{
printf("read wrong!");
close(fd);
return EXIT_FAILURE;
}
buf[i] %=35; // 去除大于35的
buf[i]+=1;
for(j=0;j{
if(buf[i]==buf[j])
i--;
}
}
for(i=0;i<7;i++) // 依次打印到屏幕上
{
printf("%d\n",buf[i]);
}
return EXIT_SUCCESS;
}
********************************************************
僵尸进程:子进程已经运行结束,而父进程仍未运行结束,此时子进程将等待父进程运行结束,此时的子进程就是僵尸进程。
守护进程:父进程已经运行结束,而子进程仍未运行结束,此时子进程的父进程编号将变为1(init)这个进程,这种子进程叫守护进程。
#include
#include
#include
#include
int main()
{
pid_t pid ;
pid = fork() ;
switch(pid)
{
case -1 :
printf("fork is error!") ;
break ;
case 0 :
for(i = 0 ; i <= 100 ; i++)
{sleep(1) ;
printf("我是子进程!PPID=%d\n",getppid()) ;
}
break ;
default :
for(i = 0 ; i <= 50 ; i++)
{sleep(1) ;
printf("我是父进程!PID=%d\n",getpid()) ;
}
break ;
}
return EXIT_SUCCESS ;
}