admin管理员组文章数量:1651785
linux介绍
基础命令、vim操作、shell编程
C语言
c基础
for if
数据结构
增、删、查、改
C++
系统编程、网络编程
arm编程
==================================================================
类:
Unix 1965年 AT MIT bell 多用户过进程分时系统、Miut
1970 PDP-7
1972 C语言之父 里奇
1985 Linux
社群 ubantu
商业 redhat
==================================================================
安装工具tool:
调整分辨率 :
系统---管理---显示---分辨率
==================================================================
进入终端:
1.右键--->打开终端
2.左上角--->附件--->终端
3.按ALT +F2--->在运行窗口输入gnome-terninal
新建终端: ctrl + shift +n
新建标签: ctrl + shift + t
标签间切换: alt + 标签序号
例:alt + 2 切换到第二个标签
vim 文件名称---> i(编辑) --->按esc,按wq保存退出,w是保存,q是退出,强制退出是q!
回到桌面 : ctrl + alt + d
窗口最大化 :alt + F10
窗口最小化 : alt +F9
程序间的切换 : alt + tap
注销 (回到登录界面) : ctrl + alt +backspace
放大终端字体 : ctrl + shift + =
缩写终端字体 : ctrl + -
关闭终端 : ctrl + shift + q 或者 输入exit
关闭标签 : ctrl + shift + w
关闭程序/窗口 : alt + F4
shutdown :
shutdown -h -r -s
立刻关机 : shutdown -h now
10分钟后关机 : shutdown -h 10
注释 : shutdow -h + 30 'The system is going DOWN for system halt in 30
minutes!'
立刻重启 : shutd - r now
取消关机指令 (中断程序): ctrl + c
init :
系统启动等级 :
0 - 6 :
0 :关机
1 :单用户
2 :多用户 不联网
3 :多用户
4 :图形界面
5 :安全模式
6 :重启
==================================================================
目录结构 :
/ :根目录,所有的目录都是从根目录开始的
/bin : 存放二进制可执行文件
/sbin :存放管理员(root)可执行的二进制文件
/root :管理员的家目录
/root/install.log :d 安装日志文件,,保存安装历史信息
/boot : 存放引导镜像文件目录
/etc :存放各种配置文件
/etc/rc.d :与开机,运行级别相关的配置文件
/mnt :挂载目录
/dev :存放设备文件
c :字符设备
b :块设备
- :普通文件
d :目录文件
l :链接文件
p :管道文件
s :套接字
/var :存放系统经常发生改变的文件,如:日志、邮件
/usr :程序的安装目录
/usr/src :存放linux源文件
/usr/include :存放头文件
/usr/lib :存放库文件
/proc :虚拟目录,目录系统状态信息
cat /proc/version 查看内核信息
cat /proc/cpuinfi 查看cpu信息
/opt :存放扩展软件包目录
/media :挂载光盘\u盘目录
/selinux :存放系统增强安全的目录
/tmp :临时存放目录
/lost + found :遗失碎片的目录
/srv :存放一些服务启动之后需要提取的数据
/home :用户的主目录
/sys :虚拟目录,相当于模块驱动,开机时加载过来
==================================================================
共享文件夹:
点击虚拟机--->设置--->选项--->共享文件夹,总是启用,添加
查看文件夹文件:cd /mnt--->ls(会显示hgfs)---cd hgfs(会看到共享文件夹)--->ls()可以看到共享文件夹的文件。
==================================================================
命令 :对linux系统进行控制、管理
内部命令 :shell(内核)自带的命令,没有路径,不可被卸载
外部命令 :(计算机)用户自己安装的一些命令,存在路径(以文件形式存在磁盘),可以被卸载。
如何区分:type ;which
格式:type +cmdname which + cmdname
[root@localhost ~]# type cd
cd is a shell builtin ->内部命令
[root@localhost ~]# type tar
tar is /bin/tar ->外部命令
[root@localhost ~]# type ls
ls is aliased to `ls --color=tty' ->别名
[root@localhost ~]# type -a cp
cp is aliased to `cp -i'
cp is /bin/cp
cp is /root/bin/cp ->区分别名的内外命令
[root@localhost ~]# which ls
alias ls='ls --color=tty'
/bin/ls ->外部
[root@localhost ~]# which ch:
/usr/bin/which: no cd in (/usr/kerberos/sbin:/usr/kerberos/bin:/usr/local/sbin: /usr/local/bin:/sbin:/bin:/usr/sbin:/usr/bin:/usr/X11R6/bin:/root/bin:/opt/FriendlyARM/ toolschain/4.5.1/bin/) ->内部
内部命令是在操作系统开机时进行加载,并在后台运行
外部命令很多是一些不常用的命令,只是在执行的时候会进行调用,在使用完后从内存中删除,减少内存占用,减少开机时的加载向,减轻系统的负担。
查看所有的内部命令 :man help bash
==================================================================
man 帮助命令 :
格式 : man + cmdname
退出文档 :按q
手册类型 :
1.Commands 普通的用户命令手册
2.System calls 系统调用函数库手册
3.Library calls 常用的一些函数和c库函数
4.Special files 设备文件的一些说明
5.File formats and conventions 配置的一些文件和其他的格式的文件说明
man 5 passwd
6.Games 游戏相关的说明
7.System management commands 网络协议相关说明
8.System management commands 系统管理员可操作的命令
9.Kernel routines 内核相关的文件
其他帮助命令 :help info
内部命令(help) :help + cmdname
外部命令(help) :cmdname + -- help
info + cmdname
==================================================================
Tab键自动补全 :
对文件补全
对命令补全
当按下后没有补全,再按一次就会出现提示信息(所有匹配的文件)
当2次Tab键查看所有命令
==================================================================
alias 别名 :
格式 : alias + newname = 'cmdname'
临时别名,脱离了当前申请终端标签(窗口),就不能使用
如何永久 :
修改配置文件 : vim ~/.bashrc,按i进行编辑
再添加一行 :alias + newname = 'cmdname'
按esc退出编辑模式, 按(英文) :,输入wq保存退出
初始化 :source ~/.bashrc
==================================================================
ls :查看当前路径下的所有文件和文件夹
格式 : ls [OPTION] 目录
option : touch 创建空文件 mkdir 创建空目录
-l :长格式显示文件
-a :显示所有文件和目录
-A :显示除.和..以外的所有文件和目录
-t :按最后修改的时间排序
-S :按文件大小进行排序
-h :把文件大小转成易读的方式
--full-time :以完整的时间格式进行显示
年 月 日 时 分 秒
-i :显示文件的inode号
[root@localhost learn]# ls -l
97 总计 52
98 -rw-r--r-- 1 root root 2249 03-10 18:03 03-10.txt
第一列第一个字符 :文件类型
c :字符设备
b :块设备
- :普通文件
d :目录
l :链接文件
p :管道文件
s: 套接字
第一列的2~10 : 表示文件的权限位
rwxr--r--
权限位三个一组,共三组
第一组 : 表示属主的个人权限
第二组 :表示属组成员的权限
第三组 :表示其他用户的权限
r :读
w :写
x :执行
- :无权限
第二列 :硬链接数
inode 号 :
inode默认大小是128
Byte,用来记录文件的权限、文件所有者、属组、文件大小、文件状态改变时间、文件按最近一次修改时间、文件数据保存的block编号.每个文件都需要占用inode号。inode等资源是有限的,在磁盘格式化的时候就已经固定了,如果inode资源用完就不能再新建文件。
硬链接 :ln源文件,链接文件
相当于是对文件inode的备份
不可以跨区
不可以对目录进行创建
不会产生新的inode号(不是 创建新文件,相当于给文件起了一个别名)
软链接 : ln -s 源路径 链接路径
相当于快捷方式
可以跨分区
可以对目录进行创建
会产生新的inode号
源文件或目录被删除后,链接文件就不能访问
硬链接和软链接的区别. :
1.原理上,硬链接和源文件的inode节点号相同,两者互为硬链接。软连接和源文件的inode节点号不同,进而指向的block也不同,软链接block中存放了源文件的路径名。实际上,硬链接和源文件是同一份文件,而软连接是独立的文件,类似于快捷方式,存储着源文件的位置信息便于指向。
2.使用限制上,不能对目录创建硬链接,不能对不同系统创建硬链接,不能对不存在的文件创建硬链接;可以对目录创建软链接,可以跨文件系统创建软连接,可以对不存在的文件创建软连接。
第三列 :文件属主
第四列 :文件属组
第五列 :文件大小
第六列 :文件最后修改的时间
第七列 :文件名
==================================================================
cd : 切换当前路径
格式 :cd + 路径
绝对路径 : 从根开始 目录前有/
相对路径 : 从当前目录开始 目录后有或无/、
. :表示当前所在目录
.. : 表示上级目录
[root@localhost ~]# pwd
/root
[root@localhost ~]# cd ..
[root@localhost /]# pwd
/
~ :表示当前登录用户的家目录
[root@localhost learn]# cd ~
[root@localhost ~]# pwd
/root
- :表示上一次所在的目录
[root@localhost block]# cd -
/learn
==================================================================
pwd : 查看当前所在目录的路径(绝对路径)
pwd - P 显示出真实的路径 ,而非链接路径
[root@localhost var]# cd /var/mail/
[root@localhost mail]# pwd
/var/mail
[root@localhost mail]# pwd -P
/var/spool/mail
/var/mail 是一个链接目录,链接着 /var/spool/mail
==================================================================
touch :新建一个空白文件
格式 :touch + filename
touch filea fileb 创建2个文件
touch a{1,2,3}b{1,2} 创建了6个文件,两两组合
touch "a{1,2,3}b{1,2}" 创建了1个文件,以双引号内部字符作为文件名
stat filename 查看文件属性
Access: 2023-03-11 17:21:24.000000000 +0800
Modify: 2023-03-11 17:21:24.000000000 +0800
Change: 2023-03-11 17:21:24.000000000 +0800
Atime : 最后一次访问时间
Mtime :文件修改(内容)时间
Ctime :文件修改(属性)时间
单独修改文件的时间 :
touch一个已经存在的文件,就会更改文件的时间(Mtime),但是内容不会被覆盖。
touch -a : 修改Atime 和Ctime
touch -at 1209151645 filename
touch -c :仅修改文件时间,当文件存在时不会新建文件
touch -d :后面可以根与修改的时间,而不用目前日期,也可以使用--date= "日期或时间",Atime Mtime
touch -d "7 days age" hello.c
touch -m :修改文件的Mtime和Ctime
touch -mt 202209151234 filename
touch -t :修改文件的Atime和Mtime到指定的时间,格式为[[CC]YY]MMDDhhmm[.SS]
touch -t 201209240340 filename
touch -r :参考文件 变更文件 :把指定的文件atime、mtime更改成和参考文件的相同值
==================================================================
rm :删除
rm + fac + filename
rm + -r +dir
-f :掠过交互
-r :递归删除,用于删除目录
* :通配符,也叫匹配符,用来匹配相应条件的文件或目录
rm * -rf :需要注意当前位置,不要在根下
rm /* -rf :相当危险,执行时要确定命令是否有敲错
?:匹配相同个字符的文件名称
rm ???? 删除文件名只有4个字符的文件
aaaa aa.h aa.c a.txt a.out
==================================================================
mkdir :新建目录
mkdir + dirname
-p :递归创建,用来创建多个嵌套的目录
mkdir -p aa/bb/cc/dd
注意区分绝对路径和相对路径
默认创建文件的权限是 644
默认创建目录的权限是 755
umask :
文件 :0666 - 0022 = 644
目录 :0777 - 0022 = 755
临时修改umask :
umask + 2
永久修改 :
vim /etc/bashrc
==================================================================
rmdir :删除空目录(基本不用)
rmdir -p /aa/ee/dd/ff
需要递归删除
tree:以树状结构显示目录和文件
==================================================================
cp :复印文件或者目录
cp + sourcfile + dc
-i : 默认存在的,交互
-r :复制目录
-u :若目标路径没有文件,则进行复制,如果有则对比源文件和目标路径同名文件的版本,若源文件版本比目标要新,则执行复制,否则不执行
cp -r abc/ /tmp 复制abc目录到/tmp下
复制文件 :
[root@MiWiFi-R4A-srv ee]# cp cc /tmp/
[root@MiWiFi-R4A-srv ee]# ll /tmp/
总计 12
-rw-r--r-- 1 root root 0 03-13 10:34 cc
复制文件并改名
[root@MiWiFi-R4A-srv ee]# cp cc /tmp/dd
[root@MiWiFi-R4A-srv ee]# ll /tmp/
总计 12
交互:
[root@MiWiFi-R4A-srv ee]# cp cc /tmp/dd
cp:是否覆盖“/tmp/dd”? y
去掉交互,就需要找到cp的源路径去执行
cp是别名,执行cp也就是执行 cp -i
用whic cp ,查看cp执行文件的路径
直接运行他的源程序文件
==================================================================
mv :移动文件或者目录
mv + sourcfile +dc
-f :略过交互
-u :同上,,对比源和目标信息
mv cc asd/ 移动cc文件到当下的asd目录
mv cc hello 把当下的cc改名成hello
mv abc/ /tmp 移动abc到/tmp
==================================================================
cat :查看文件
cat + file
-n :显示行号
-b :显示行号,但是空号不编号
-E :在行末显示$
-A :显示非打印字符(如tap)
tac :倒着查看文件,一行一行
==================================================================
more :分屏显示
只能通过回车向下查看
less :通过上下方向键查看
head :从文件头开始显示,默认显示十行
head -n 15 file
tail :从文件末开始显示,默认显示十行
tail -n 15 file
==================================================================
wc :计算命令
wc + filename
[root@MiWiFi-R4A-srv learn]# wc hello.c
36 36 99 hello.c //hello.c文件的行数为36 单词数为36 字节数为99
-w:计算单词数、字数
-c:计算文件字节数
-l:计算行数
==================================================================
grep :查找相匹配的内容(文件内容或文件系统)
grep + 查找内容 + 文件名
以行显示查找匹配内容
--color :把匹配的内容用颜色标注出来
-w :仅匹配单词
-i :忽略大小写显示
-n :显示匹配到的内容所在的行号
-c :统计匹配到的内容所在的行号
-o :只显示匹配到的内容
-v :取反显示,显示匹配到的内容及以下的东西
-A<num> :显示匹配到的内容及以上的num行
grep -A2 bbbBBB abc
-B<num> :显示匹配到的内容及以上的num行
grep -B4 bbbBBB abc
-C<num> :显示匹配到的内容及上下的num行
==================================================================
find :文件查找
find + path +option + findname
-name :按名字名查找
-perm :按权限查找
-user :按属主查找
-group :按属组查找
-type :按类型查找
f :指代-,普通文件
d c b l
-size :按文件大小查找
+n :大于N
-n :小于N
n :等于N
g M k b > block,c
一个block = 512字节,如果时查找小于1个块的文件,相当于查找空文件
find [path] -size -lb
-exec :找到文件后,针对其执行指定命令
find -size -lb -exec rm {} \;
{} : 表示find找到的内容
\ :禁止转义
; :本行结束的指示 \n
没有结束指示,则会提示 :
find :遗漏 “-exec”的参数
-mtime :按文件修改(内容)时间查找
-ctime :按文件修改(属性)时间查找
find /etc/ -perm 755 -type d
find /etc -uid 0
find /etc -gid 0
==================================================================
tar :打包压缩工具
解压缩
tar -xvf tarfile
打包
tar -cvf tarfile.tar [path]
压缩
tar -cvf tarfile.tar.gz [path]
tar -cjvf tarfile.tar.bz [path]
查看
tar -tf tarfile
解压到指定路径
tar -xvf nul.tar -C /learn/tar/
-c :打包
-r :添加到包里
-v :显示过程
-f :存在文件夹
-j :调用bzip2进行压缩或者解压缩
-z :调用gzip进行压缩或者解压缩
-x :解包
-C :解压到指定路径
-t :查看
==================================================================
l :管道
用于将多个管道链接起来,前一个命令的输出作为后一个命令的输入
ls -l /etc/ | grep '^d' | wc -l
find /user zhangsan | wc -l
==================================================================
重定向 :
改变输入输出的方向
标准输入 键盘 鼠标
标准输出 屏幕 打印机
输入输出代码:
stdio 0 标准输入 键盘
stdio 1 标准输出 屏幕
stdio 2 错误输出 屏幕
输出 :
> :输出重定向,默认是标准输出
2> :表示错误输出重定向
ls -l /dddd 2> aa
&> :表示标准&错误输出重定向
ls -l / /dddd &> aa
>> :表示追加,不会覆盖文件原有内容
输入 :
< :输入重定向
passwd < gg.txt
<< :表示函数结尾
==================================================================
用户 :
useradd :添加用户
useradd u_name
userdel :删除用户
userdel -r u_name 完全删除用户
groupadd:
groupdel:
切换用户 :
su : su u_name
su - : su - u_name 完全切换
exit 退出 :也可以用ctrl + d
文档 :
用户账号文档
/etc/passwd
用:进行分割,共七列
第一列 : 用户名
第二列 :密码
第三列 :uid
第四列 : gid
第五列 :描述信息
第六列 :用户家目录
第七列 :用户登录的shell,nologin表示不允许登录,在特殊进程中进行认证
用户密码文档
/etc/shadow
第一列 : 用户名
第二列 :密码,用MD5加密,为空则无
第三列 :上一次密码修改的时间,天数,从1900年1月1日开始
第四列 :密码修改最少间隔时间,0则表示随时可修改
第五列 :密码有效期,99999为永久有效
第六列 :口令过期提示,7为提前7天提示
第七列 :密码过期多少天后不能再使用,空则一直有效
第八列 :密码过期时间,1900年1月1日开始算,空则长期有效
组用户文档
/etc/group
第一列 :用户名
第二列 :密码
第三列 :GID
第四列 :组成员
组密码文档
/etc/gshadow
chmod :文件、目录权限修改
r w x - 7 7 7
r - -
1 0 0 > 4
三组权限 :属主 属组 其他用户
u g o
chmod u-w lisi
chmod u+w lisi
chmod o-x lisi
+ > 增加权限
- > 减少权限
chmod a = rw lisi
u g o都变成r w 的权限
chown :改变文件属主、属组
需要高级权限
chown lisi f_name 把属主改成lisi
chown :wangwu f_name 把属组改成wangwu
chown root:lisi f_name 把属主改成root,属组改成lisi
属主和属组不能是不存在的用户
==================================================================
nfs :
虚拟机设置--->网络适配器 :
桥接模式 :VMware虚拟机的操作系统就相当于所局域网里面的一台独立主机,可以访问局域网内部的任何一台主机
NAT :仅主机模式 :把真事环境和虚拟环境隔离开
NAT :让虚拟机通过网络地址转换器,通过主机网络访问互联网
查看主机网络IP地址 :
win + r -> 运行窗口 -> 输入cmd,回车 -> ipconfig
查看rehat ip地址 :
ifconfig
服务 :
1.安装yum install nfs * ->ubantu apt
自行安装 -> 网络上找.rpm的安装包
源码安装 -> VMware-tools -> ./xxxxx.p1
2.配置服务
服务器
vim /etc/exports
/nfs *(ro)
/cmf *(rw)
/nfs :共享目录
* :能ping通当前电脑的ip都能访问
192.168.31.* :只有31这个网段的ip能访问
(ro):权限,read only
(rw):read and write尽量不要给别人写的权限
重启nfs服务 :service nfs restaer
[root@MiWiFi-R4A-srv C]# service nfs
用法:nfs {start|stop|status|restart|reload|condrestart}
客户端 :
1、ping 192.168.31.222 -c 3 查看与服务器的连接是否正常
2.showmount -3 192.168.31.222 查看当前服务器上的共享目录
3.mount 192.168.31.222:/nfs / mnt 挂载共享目录到本机
4.df -h 查看文件系统,也就是查看是否挂载成功
5.cp /mnt/* /tmp 复制文件
6.umount /mnt 解挂
ctrl + c 终止当前命令
==================================================================
vim编辑器 程序开发器
vim的三种模式 :
一般模式 :从终端进入的默认模式,从编辑模式下按ESC退回到一般模式
从底行模式按下ESC退回到一般模式
编辑模式 :在左下角有“插入”字样的模式,从一般模式进入,按i、I、a、A、o、O
底行模式 :在屏幕最后一行可以输入命令的模式,按:进入(英文底下:)
w wq q q!
一般模式操作 :
yy :复制一行
nyy :复制n行
dd :剪切一行
ndd :剪切n行
p :粘贴,从缓冲区进行粘贴,要和系统的剪切板区分开
x :删除单个字符
nx :删除n个子符
dw :从 当前位置删除一个单词
ndw :从当前位置删除n个单词
d^ :从当前位置删除到行首,不包括当前光标位
d$ :从当前位置删除到行末,包括当前光标位
dgg :从当前行删除到文件头
dG :从当前行删除到文件末尾
ddp :交换两行位置 - > p 粘贴是在当前光标位置的下一行进行粘贴
cc :删除一整行,并进入编辑状态
D :相当于 d$
C :相当于d$,并在删除后进入插入状态
S :相当于cc
daw :对光标所在的位置的整个单词删除
xp :交换两个字符 - > p 粘贴是在当前光标位置的下一位进行粘贴
J :合并两行,并用空格隔开
u :撤销
ctrl + r :取消撤销
光标位置 :
h :向左,等同于左方向键
j :向下,等同于下方向键
k :向上,等同于上方向键
l :向右,等同于上方向键
^ :光标移动到行首,第一位有效字符
0 :数字0,光标移动到行首
$ :光标移动到行末
H :光标移动到顶端的行首,第一位有效字符
M :光标移动到屏幕中间的行首,第一位有效字符
L :光标移动到屏幕底端的行首,第一位有效字符
gg :光标移动到文件头,第一位有效字符 - > 双击 [
ngg :光标移动到文件第N行,第一位有效字符
G :光标移动到文件末尾的行首,第一位有效字符
50% :光标移动到文件的50%的行,第一位有效字符 - > 30% 70%
w :将光标移动到下一个单词,光标在单词头
b :将光标移动到上一个单词,光标在单词头
e :将光标移动到下一个单词,光标在单词尾
ge :将光标移动到上一个单词,光标字单词尾
ctrl + u :将窗口向上移动到半个屏幕
ctrl + d :将窗口向下移动半个屏幕
ctrl + f :
ctrl + b :
可视操作 :
v : 可视 = 多选
shift + v :可视行
ctrl + v :可视块
移动操作 :
ctrl + shift + > :右移
ctrl + shift + < :左移
编辑模式 :
i I a A o O s S
i :在当前光标位置编辑
I :在行首第一位有效字符进行编辑
a :在当前光标位置后编辑
A :在当前光标所在行行尾编辑
o :在当前光标所在行的下一行编辑
O :在当前逛遍所在行的上一行编辑
s :删除当前光标所在位置的字符,进行编辑
S :把光标所在行清空,进行编辑,等同于cc
底行模式 :
:w :保存
:wq :保存退出
:q :退出
:q! :强制退出,已编辑但未保存的内容会消失
:w! :强制保存,针对只读文件,只能由文件属主或者root用户才能进行强制保存
~/.vimrc :
:set nu :显示行号,number
:set nonu :不显示行号
:set mouse=a :鼠标光标跟随
:set ts=4 :制表符位设置为4,默认为8
:set shiftwidth=4 :搭配自动对齐
:set ai :自动对齐,缩进
:set hlearch :设置搜索结果高亮显示
:nnoremap <silent> \h :nohlsearch <CR>
nmap ,d i #include <stdio.h><CR>#include <stdlib.h><CR>#include <string.h><CR><CR>int main(int argc,char **argv[])<CR>{<CR><CR><Tab>return 0;<CR>}<esc>==kkko<Tab>
格式 :
nmap :定义快捷键
,d :自定义的快捷按钮
i :进入编辑模式
<CR> :回车换行
<Tab> :输入制表符
<esc> :退出编辑模式,回到一般模式
=kkko :光标移动
:r :/etc/passwd :从其他文件读取(复制)内容到当前
:sp filename :分屏显示,竖屏
:vsp filename :分屏显示,横屏
在终端操作,vim -o file1 file2 ... 分屏显示,竖屏
vim -o file1 file2... 分屏显示,横屏
可以单个退出,也可以一起退出 :qall qa wqa
:num :去到对应行
查找 :/ ? + 查找内容
/ :从上往下查找
? :从下往上查找
n :跳转到下一个查找内容
N :跳转到下一个查找内容
/< :开头 /\>
/> :结尾 /\<
替换 :
:范围s/原内容/替换内容/ [option]
1 :第一行
$ :最后一行
% :全文
1,$ :从第一行到最后一行
没有指定范围则默认只替换一个
1,$s/for/if/ 把第一行到最后一行的for替换成if
8,12s/for/if/ 把第8行到12行的for替换成if
%s/for/if 全文中的for替换成if
%s/\$/r 把全文的$替换成r
[option] 参数不带空格
g :全局替换,可以修改到一行里面的多个替换内容
:默认情况下每行只可以替换一个内容
c :替换时需要手动确认
i :不区分大小写
==================================================================
vim 文档加密 :
vim -x filename
输入密码两次
给空密码则不加密
==================================================================
网络相关 :
桥接
NAT only
NAT
windows 下查看IP地址 :ipconfig
linux 下查看IP地址 :ifconfig
eth0 Link encap:Ethernet HWaddr 00:0C:29:82:AF:F8
inet addr:192.168.17.131 Bcast:192.168.17.255 Mask:255.255.255.0
inet6 addr: fe80::20c:29ff:fe82:aff8/64 Scope:Link
lo Link encap:Local Loopback
inet addr:127.0.0.1 Mask:255.0.0.0
inet6 addr: ::1/128 Scope:Host
lo: 用作本地回环测试
IP地址 :
点分十进制,一共32bit,192.168.17.131,分割成4个8bit二进制数,0~255,最大是255,0和255一般是不使用,255是广播,广播是专门用来同时给当前网段用户发送信息的地址。
网络配置 :
无法查看网卡信息,可以重启网卡
service network restart
重启后还无法查看,则需要检查网络驱动
网络设置图形界面
system-config-network
网络设置的配置文件
/etc/sysconfig/network-scripts/ifcfd-eth0
# Advanced Micro Devices [AMD] 79c970 [PCnet32 LANCE]
DEVICE=eth0
设备名称
BOOTPROTO=dhcp
设置动态获取IP地址
HWADDR=00:0C:29:82:AF:F8
MAC码,前三组厂商号,后三组序列号
ONBOOT=yes
是否启用当前网卡
-----------以上为动态获取情形-----------
DEVICE=eth0
设备名称
BOOTPROTO=static
设置静态获取IP地址
HWADDR=00:0C:29:82:AF:F8
MAC码,前三组厂商号,后三组序列号
ONBOOT=yes
否启用当前网卡
IPADDR=192.168.0.155
静态IP地址
NATMASK=255.255.255.0
子网掩码
GATEWAY=192.168.0.1
网关
TYPE=Ethernet
网络协议
------------以上为静态设置内容------------
临时指定IP地址
ifconfig eth0 192.168.0.12
eth0 : 取决于需要修改的网卡,eth0 eth1 eth2.....
192.168.1.2 : 临时指定的IP地址
==================================================================
Linux系统开机流程 :(以reh1为例)
BIOS -- > MBR -- > kennel -- > Init
1.电脑从按下电源键开始,就会进入到BIOS进行硬件检测
2.检测完成,进入MBR,也就是Boot Loader
MBR占据硬盘的第一个扇区,大小为512字节
3.载入到kennel,载入电脑设备的驱动程序
4.启动Init程序,Init进程号为1,是所有进程的祖先
-------------------------------------------------------------------
从进入到Boot Loader,到kennel,Init,这些过程由Grub这个多重开程序进行指引
/boot/grub/grub.conf
# initrd /initrd-version.img
#boot=/dec/sda
default=0
默认操作系统选项,指预设第一组title的系统开机,如果有多个title,多重启动,如果需要从第二个title启动,该值需要设置为1
timeout=5
指在进入grub界面的时候,会有5秒的等待时间让使用者选择开机的系统
splashimage=(hd0,0)/grub/sp1ash.xpm.gz
开机的grub界面的背景图,解压需要使用gunzip去执行
图片查看 :eog iconame
hiddenmenu -- > 开机菜单
title Red Hat Enterprise Linux Server (2.6.18-194.e15) root (hd0,0)
Red Hat... 系统名称,会在grub界面显示 r.. - > boot
title windows 10 -- > 要默认启动这个剧需要改成default=1
kernel /vmlinuz-2.6.18-194.e15 ro root=LABEL=/ rhgb quiet
/vmlinuz-2.6.18-194.e15 -- > 镜像的名称
ro -- > 只读
root -- > 设定root的位置在根目录
rhgb -- >图形界面开机
quiet -- > 静默,在开机过程中不显示错误信息
initrd /initrd-2.6.18-194.e15.img
把指定的文件放入到内存中,这个文件就是存放一些驱动程序
-------------------------------------------------------------------
Init 读取/etc/inittab配置文件
Init会根据运行级别来运行程序
/etc/rc.d/rc.sysinit
/etc/rc.d/rc
/etc/rc?.d/rc
/etc/rc.local
# Default runlevel. The runlevels used by RHS are:
# 0 - halt (Do NOT set initdefault to this)
# 1 - Single user mode
# 2 - Multiuser, without NFS (The same as 3, if you do not have networking)
# 3 - Full multiuser mode
# 4 - unused
# 5 - X11
# 6 - reboot (Do NOT set initdefault to this)
0:关机,注意不要把启动级别设置为 0 ,否则系统无法正常启动
1:单用户模式,在root用户下对系统进行维护
2:多用户模式,把一些网络服务关闭了,如NFS
3:完全的多用户模式
4:未使用
5:图形界面
6:重启,不要把启动级别设置为6,系统无法正常启动
#选择启动级别
id:5:initdefault:
# System initialization.
#init会执行的初始作业系统程序
si::sysinit:/etc/rc.d/rc.sysinit
#init会根据运行级别执行对应目录里面的程序
#选择5,则会把5参数传递给/etc/rc.d
l0:0:wait:/etc/rc.d/rc 0
l1:1:wait:/etc/rc.d/rc 1
l2:2:wait:/etc/rc.d/rc 2
l3:3:wait:/etc/rc.d/rc 3
l4:4:wait:/etc/rc.d/rc 4
l5:5:wait:/etc/rc.d/rc 5
l6:6:wait:/etc/rc.d/rc 6
# Trap CTRL-ALT-DELETE
#设置组合键,按下ctrl+alt+del三秒就会重启系统
ca::ctrlaltdel:/sbin/shutdown -t3 -r now
# When our UPS tells us power has failed, assume we have a few minutes
# of power left. Schedule a shutdown for 2 minutes from now.
# This does, of course, assume you have powerd installed and your
# UPS connected and working correctly.
#定义UPS不间断电源当电源断电后会执行哪些程序
pf::powerfail:/sbin/shutdown -f -h +2 "Power Failure; System Shutting Down"
# If power was restored before the shutdown kicked in, cancel it.
pr:12345:powerokwait:/sbin/shutdown -c "Power Restored; Shutdown Cancelled"
#产生6个虚拟终端
# Run gettys in standard runlevels
1:2345:respawn:/sbin/mingetty tty1
2:2345:respawn:/sbin/mingetty tty2
3:2345:respawn:/sbin/mingetty tty3
4:2345:respawn:/sbin/mingetty tty4
5:2345:respawn:/sbin/mingetty tty5
6:2345:respawn:/sbin/mingetty tty6
#启动级别为5时,初始化工作会启动X11
# Run xdm in runlevel 5
x:5:respawn:/etc/X11/prefdm -nodaemon
==================================================================
利用单用户模式进行密码破解 :
前提条件 :grub 不加密
在系统开机时出现的grub界面中,在读秒结束前,按下字母e,进入grub选项目录,再按一次e,进入grub具体目录,按上下方向键去选择相应的引导项,回车进入到引导项后,在出现命令行后输入空格,single或者1,回车,回退到grub引导项,按b重启进入单用户模式,进入系统后,通过passwd修改用户密码,达到修改密码的目的,修改密码后重启,回到正常图形界面。
grub加密
修改 /boot/grub/grub.conf
timeout=5
splashimage=(hd0,0)/grub/splash.xpm.gz
hiddenmenu --- >开机菜单
在hiddenmenu后添加一行
password=123456
titple Red Hat Enterprise Linux Server (2.6.18-194.el5) root(hd0,0)
不建议添加密码,后续出现密码丢失,就不能进行操作
密码加密 :
grub-md5-crypt 算法,直接在命令行输入,回车
[root@MiWiFi-R4A-srv learn]# grub-md5-crypt
Password:
Retype password:
$1$J2JDR$Cu4yk6Yg7ATEmzTDpbVMV0
grub-md5-crypt >> grub.conf
==================================================================
进程管理 :
pstree :查看进程 -- > 进程树
pstree | less
-p :查看进程号
top :
表格方式查看
h :help 帮助
P :按CPU占用排序
M :按内存占用排序
shift + < or > :向下翻页或向右翻页
q :退出
ps :
平铺方式查看
-a :显示控制台进程
-u :显示带用户名的进程
-l :显示详细信息
-x :显示所有进程
ps -ef | ps -aux 显示所有信息
==================================================================
kill :杀死进程
kill -l PID :查看发送进程的所有信号
kill -9 PID :直接杀死进程
kill PID :终止进程
kill -19 PID :暂停进程
kill -18 PID :继续进程
killall sshd :杀死所有ssha的进程
skill -9 pts/2 :杀死2号控制台所有的进程
==================================================================
cut :显示文本中的某一段
格式 :
cut + option + file
-d :指定一个分隔符
-f :取字段,定义显示的段落序号
-c :取字符,定义显示的字符区域1-10
cut -d :-f1 /etc/passwd
只显示passwd里面的用户名
cut -c 1-10 /etc/passwd
显示passwd里面每一行的投哦1-10个字符
sort :排序
默认从低到高 升序排序 ascii
-n :数字排序
-t :指定分隔符
-k :指定排列的段落序号
-r :降序排列
sort -n -t : -k3 /etc/passwd
用 :把文件每一列分割出来,然后按第三列的UID进行升序排序
uniq :去除文件中的重复行
-c :统计每一行连续重复的次数
-u :去掉连续重复的行(不显示连续重复的行)
-d :只显示连续重复的行
-i :忽略大小写,并且连续重复的行只显示一次
11:22:33
22:33:11
11:22:33 - > a.txt
sort -t a.txt | uniq
统计/etc/passwd 有几种shell
cut -d : -f7 /etc/passwd | sort | uniq | wc -l
先提取文件内第七列,然后排序,把连续重复行去掉,统计剩下的行
tr :
字符替换
head -n 5 :-f7 /etc/passwd | sort | uniq | wc -l
把passwd的头五列的小写字符转换 成大写字符
把passwd的前五行用大写的方式显示出来
用来做简单加密
abcdefg
^^^^^^^
efghijk
[root@MiWiFi-R4A-srv learn]# echo passwd | tr 'abcdefghijklmnopqrstuvwxyz'
'hijklmnopqrstuvwxyzabcdefg'
whzzdk
[root@MiWiFi-R4A-srv learn]# echo whzzdk | tr 'hijklmnopqrstuvwxyzabcdefg'
'abcdefghijklmnopqrstuvwxyz'
passwd
==================================================================
shell :
是一门语言,用作脚本维护
主要是用来监(侦)听用户输入的指令,接收到指令后就执行相应操作。
查看系统使用的shell -- > echo $SHELL \
查看系统支持的shell -- > echo /bin/*sh
编写shell 语言流程
1.创建一个脚本
touch filename.sh
2.实现shell语言
#!/bin/bash
3.指定执行权限 chmod 755 file.sh
4.执行 ./file.sh(相对路径下) /learn/myshell/01_hello.sh(绝对路径)
变量 :
varname=5
局部变量 :只有当前的bash才能读取这个参数
全局变量 :目前所在的bash和种子bash能读取
export varname = 999
echo $a
echo ${a}
echo "$a"
符号 :
$ :取值
' ' :单引号,会屏蔽特殊字符的特殊意义,当做 普通字符输出
" " :双引号,不会屏蔽特殊字符
{ } :花括号,不会屏蔽特殊字符
` ` :反引号,把内部当做命令执行
[ ] :方括号,运算符$[$a+$b] $[a+b]
运算符 : + - * / %
==================================================================
shell的输入输出
echo :输出
-n :不换行
-e :转义 与 printf 有同样的功能
echo "hello" --- > echo 默认自带换行
echo -n "hello" --- > 不带换行
echo -e "hello\tworld" --- > 把特殊符号的功能体现出来
\n 换行 \t tab标志 \c 不换行
printf "hello4\n" 输出语句,默认不带换行,会识别特殊字符
printf "\033[32mThis id a test !\033[0m\n" 全红色
printf "\033[31mThis \033[32mis \033[33ma \033[34test!\033[0m\n" 五颜六色
printf "033[31;42mThis \033[32mis \033[33ma \033[34mtest!\033[0m\n"
加了底色 --- > \033[31;42m
31 -- > 前景色
42 -- > 背景色
前景色 :30 - 37
背景色 :40 -47
read :输入
格式 :read [option] [var_name]
read varname 没有提示,会让用户感觉莫名其妙
-p :开头输入提示
-s :关闭回显,不显示输入内容,常用于输入密码
read -s -p "input paassword:" varname
-n n : 指定输入长度n,超出长度的字符不被识别,输入达到设定长度会自动结束,输入回车结束输入
-t n :输入等待,n秒内没有输入则自动退出,没有输入会返回非零的退出状态(不成功)
外部传参 :
将参数传递到固定的变量 $1 $2 $3 $4 ... ... $n
./xxx.sh 12 23 34
传递12到名称为1的变量里面去 -- > $1 === > 12
传递23到名称为2的变量里面去 -- > $2 === > 23
传递34到名称为3的变量里面去 -- > $3 === > 34
$1 :表示外部传入的第一个参数
$2 :表示外部传入的第二个参数
...
$# :表示外部传入参数的总数
#? :表示上一条命令是否正常执行,0表示正常,其他数字表示不正常
$$ :表示当前程序运行的进程号
kill -9 PID 杀死进程
ps -ef 查看进程
UID :创建进程的用户名
PID :进程号
PPID :父进程号
C :优先级
STIME :进程启动时间
TTY :终端,? -- >不受终端影响,pts/1 /2 /3 -- > 进程一来终端运行,终端关闭后进程也会关闭
TIME :进程运行总时间
==================================================================
流程控制 :
if 语句:
format 1 :
if [ con ] 条件两边必须要空格
then
cmd_ok
fi
c语言 : > >= < <= == !=
man test :
数字比较 :
-eq :等于
-ge :大于或等于
-gt :大于
-le :小于或等于
-lt :小于
-ne :不等于
字符串比较 :
-n :表示字符串非空
-z :表示这是空字符串
str1 == str2 :字符串1等于字符串2
str1 != str2 :字符串1不等于字符串2
注释 :
行注释 :#echo "hello"
块注释 :<< block_name 从此开始注释
echo "hello"
echo "hello"
block_name 结束注释
逻辑语句 :
&& :逻辑与(-a)
[ con1 ] && [ con2 ] && [ con3 ] && ... && [ conn ]
[ [ con1 && con2 && con3 && ... && conn ]]
[ con1 -a con2 -a con3 -a ... -a conn ]
|| :逻辑或(-o)
[ con1 ] || [ con2 ] || [ con3 ] || ... || [ conn ]
[[ con1 || con2 || con3 || ... || conn ]]
[ con1 -o con2 -o con3 -o ... -o conn ] format 2 :普通分支
if [ con1 ]
then
cmd_ok
else
cmd_false
fi
判断con1,成立就执行cmd_ok,不成立则执行cmd_falsse.
format 3 :多分支
if [ con1 ]
then
cmd_1
elif [ con2 ]
then
cmd_2
elif [ con3 ]
then
cmd_3
...
判断con1 是否成立,如果成立则执行cmd1,不成立再判断con2,成立执行cmd_2,不成立再判断con3,成立执行cmd_3,不成立再...
==================================================================
if
FILE :
test [option] filename
-e :文件是否存在
-G :判断当前是否属于文件属组成员
-r :判断文件是否有读的权限
-w :判断文件是否有执行的权限
-b :判断文件是否是块设备
-c :判断文件是否是字符设备
-d :判断文件是否是目录
-f :判断文件是否是普通文件
bc :超文本计算器
quit :退出
case :选择语句,一般可用于菜单选项的选择
format :
case var_name in
val_1
cmd1
;;
val_2
cmd2
;;
val_3
cmd3
;;
.
.
*)
default_cmd
esac
clear -- > 清屏
ctrl + l --- > clear
循环结构 :
每一个循环都是有4个部分组成的
1.初始化部分
2.条件部分
3.自增或自减部分
4.执行部分,循环体
1 > 2 > 4 > 3 > 2 > 4 > 3 ... ... break
for :
格式一 :
for var_name in val_1 val_2 val_3 ... val_n
do
cmd
done
格式二 :
for (( var ;; con ; add ))
do
cmd
done
格式三 :
for var_name in `seq 1 1 10`
seq :序列输出,第一个参数表示起始值
第二个参数表示步长,也就是自增量
第三个参数表示结束值
while :
格式 :
init
while [ con ]
do
cmd
done
判断con是否成立,判定为真就执行cmd,再返回到con判断是否成立,假就结束循环。
死循环 :
大多数情况下我们要避免死循环,只要在处理一些特定的目的(监控)才会使用死循环,如果要写死循环,就需要加上延时函数。
sleep1 :延时函数,延时1秒,参数可以自定义
break :退出循环,如果条件满足,会退出当前整个循环。
continue :退出循环,如果条件满足,就会退出本次循环。
for (( i =1; i <= 10; i++ ))
do
if [ $i -eq 5 ]
then
break; 到第五次循环 直接退出
continue; 跳过了第五次循环
fi
echo "第 $i 次循环"
done
echo "hello"
==================================================================
函数 :
把可以重复使用的代码独立出来,抽象出来,用一个名字将其封装起来,提高编程效率。
定义 :
function name() {
cmd
}
或
name () {
cmd
}
调用 :调用时,在函数名后面输入参数进行传参,传递到函数内部使用
区分命令行传参 :执行命令时在命令后面输入参数,传递到函数内部使用
命令行的$1和函数内的$1数据值不共享
随机数 :
RANDOM
产生一个随机数,echo $RANDOM
$[$RANDOM%101] 随机一个1006以内的数字
$[$RANDOM%101+100] 随机一个100~200的数字
版权声明:本文标题:linux基础(超详细笔记) 内容由热心网友自发贡献,该文观点仅代表作者本人, 转载请联系作者并注明出处:https://m.elefans.com/xitong/1729567332a1206643.html, 本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌抄袭侵权/违法违规的内容,一经查实,本站将立刻删除。
发表评论