鸟哥Linux私房菜笔记
查看更清晰格式github地址:
https://github.com/smallbug-vip/repo/blob/master/note/linux/note.mjs
#####################################################################################################
第四,五章 首次登陆
#####################################################################################################
注意:
单词前面两个-
-----------------------------------------
bc计算器
scale=10保留10位数
-----------------------------------------
cal显示日历
2016一年的日历
12 2016某月的日历
-----------------------------------------
date显示时间
+%Y
-----------------------------------------
ls显示文件(list)
-a显示所有文件
-l显示文件详细信息
-h将占用的字节人性化显示
-d显示目录信息
-i显示 inode ID
-s 显示大小
-1 一行行显示
--time=atime 显示访问时间
--time=ctime 显示创建时间
-R 递归显示
-----------------------------------------
history查看历史命令
!numner执行历史命令
-----------------------------------------
whatis查看命令简短信息
makewhatis 生成whatis库
-----------------------------------------
whereis查找命令的目录及帮助文档的目录
-b 只显示二进制文件
-m 显示帮助文档
-----------------------------------------
which查找命令所在的路径及有无别名
-----------------------------------------
apropos查看配置文件简短信息
-----------------------------------------
man查看命令帮助
/search
n/N 查找
^search 开头
mannumber passwd查看第几张
man-k clocl查找命令片段
q 退出
-----------------------------------------
sync将缓存中的内容写到磁盘中去
-----------------------------------------
shutdown
-r now重启
-k显示通知信息不会真的关机
-h 10 10分钟后关机
-h 8:20到时间自己关机
reboot重启
-f强制重启
poweroff关机
-f强制关机
-----------------------------------------
运行级别
0 关机
1 单用户
2 不带网络的多用户
3 带网络的多用户
4 保留,用户可以自给定义
5 图形界面的多用户
6 重起系统
位置:/etc/rc.d
K 开头表示不运行
S 开头表示运行
1,设置开机模式为:命令模式
systemctl set-default multi-user.target
2,设置开机模式为:图形模式
systemctl set-default graphical.target
runlevel //显示当前环境级别
init number //改变当前环境的级别
startx//开启xwindow
#####################################################################################################
第六章 Linux的文件权限与目录配置
#####################################################################################################
用户信息存放目录:
/etc/passwd
用户密码存放目录:
/etc/shadow
组的存放目录:
/etc/group
-----------------------------------------
文件类型
-普通文件
d 文件夹
b 块设备(U盘)
c 字符型设备文件(鼠标)
l 快捷方式(软连接)
-----------------------------------------
chmod修改权限
[{ugoa}{+-=}{rwx}][文件或目录]
[rwx=421][文件或目录]
-R递归修改
-----------------------------------------
chown -R root 修改文件所有者
chown -R root[:.]root /aa修改文件所有者及所属组
-----------------------------------------
chgrp -R root /aa修改所属组
-----------------------------------------
文件夹的 x 代表是否可以进入该文件夹,如果没有 x,即使有w,其他用户也不可操作该文件将夹下的文件
文件夹的 w 代表是否可以操作文件夹中的文件,当文件夹有 w 时,即使其他用户没有读该文件夹中文件的权限,该用户也可以删除文件
文件夹没有 r 时,其他用户可以进入该文件夹但是不能读取该文件夹中的文件,但是可以创建文件,操作文件
-----------------------------------------
file filename查看文件类型
-----------------------------------------
目录结构
/bin
/sbin
相当于win32的作用
/boot
主要存放启动Linux系统所必需的文件,包括内核文件、启动菜单配置文件等
/dev
设备文件,字符设备,存储设备
/etc
主要存放系统配置文件
/lib
主要存放一些库文件
/media 自动挂载
/mnt 手动挂载
在某些Linux的发行版中用来挂载那些USB接口的移动硬盘(U盘)等
/opt
可以理解为安装可选程序的地方。安装源码包
/proc
内核参数,不占用磁盘大小
/root
根用户的家目录。里面存放根目录的数据、文件等。
/usr
主要存放安装的软件、系统共用的文件、内核源码等。
/tmp
临时文件
/var
缓存,日志,数据库文件
-----------------------------------------
1>
uname //查看是什么系统
-i //架构
-r //内核
-a //查看所有
2>
cat /etc/redhat-release //CentOS Linux release 7.1.1503 (Final)
3>
hostnamectl
status 查看操作系统信息
--static查看静态主机名
--transient 查看瞬态主机名
--pretty 查看灵活主机名
4>
hostname //主机名
#####################################################################################################
第七章 Linux文件与目录管理
#####################################################################################################
mkdir创建目录(make directories)
-p递归创建
-p small/{bug,cat,hadoop}
-----------------------------------------
echo $PATH
命令默认会在这些目录中去查找
PATH=$PATH:/home
添加查找目录
-----------------------------------------
cp[item] resource target复制文件(copy)
-r复制目录
-p保留文件属性
-u 新文件覆盖旧文件(旧文件不会覆盖新文件)
-l 生成硬链接
-f 强制
-a = -rfp
-d 默认情况下拷贝链接会把原文件拷贝出来,可以加该参数拷贝链接
ln创建软硬链接
-s创建软连接
-----------------------------------------
mv移动和改名(move)
-i 询问要不要删除(默认)
-r 递归
-f 强制
-----------------------------------------
alias ll
显示别名
alias ll='ls -lh --color=auto'
修改别名
-----------------------------------------
basename 只显示文件名
dirname 只显示目录名
-----------------------------------------
cat浏览小文件信息
-n显示行号
-----------------------------------------
tac反向浏览文件
-----------------------------------------
nl 不算空行显示行号
-d 算空行显示行号
-----------------------------------------
more浏览文件信息
(空格)或f翻页
(Enter)换行
q或Q退出
-----------------------------------------
less浏览文件信息
(空格)或f翻页
(Enter)换行
q或Q退出
上箭头向上翻一行
pgup向上翻一页
/XXX搜索
n下一个搜索结果
-N 显示行号
-----------------------------------------
head显示文件前几行
-5显示前5行
-----------------------------------------
tail-tailf显示文件后几行
-n显示后几行
-f动态显示文件末尾内容(监视日志)
-----------------------------------------
od 查看非文本文件
-t c 以ASCII码格式显示输出
strings显示二进制文本文件
-----------------------------------------
rm删除文件
-r删除目录
-f强制删除
rm -rf !(keep1 | keep2) 删除keep1,keep2文件之外的文件
-----------------------------------------
pwd显示当前目录(print working directory)
-----------------------------------------
rmdir删除空目录(remove empty directories)
-----------------------------------------
touch创建文件
touch filename 如果filename存在的话就修改其修改时间为当前时间
-----------------------------------------
umask 权限过滤符
文件 : 666 - umask
目录 : 777 - umask
-----------------------------------------
lsattr列出文件隐藏属性
chattr修改文件隐藏属性
+a (文件不可写,文件夹只可创建不可删除)
+i (文件夹中,不可添加也不可删除文件)
-----------------------------------------
SUID 在命令所有者的位置上出现S代表其他人在执行该命令时具有所有者的权限
chmod u+s xx
chmod 4333 xx
SGID 如果一个文件夹的的所属组中出现了S,代表着之后在该文件夹下创建的文件都将会继承该文件夹的所属组
chmod g+s xx
chmod 2333 xx
SBIT 只出现在文件夹的其他*限位,意思是除了root和所有者外其他人即使有权限也不能删除
chmod o+t xx
chmod 1333 xx
-----------------------------------------
echo "hostname is `hostname`"在字符串中执行命令
echo "hostname is $(hostname)"
输出 : hostname is smallbug
-----------------------------------------
locate快速搜索(每天跟新一次数据库,新创建的文件可能找不到)
-i不区分大小写
updatedb更新资料库
/var/lib/mlocate/mlocate.db 数据库位置
-----------------------------------------
find path -option [argu] 查找文件
-or 或关联关系
-name根据名称查找
-size +5M根据大小查找
-size -5M -size +3M 查找大于3M小于5M的文件
-user smallbug根据所有者查找
-group根据所属组查找
-ctime +1 创建超过1天的文件
-cmin +1创建时间超过一分钟
-amin访问时间
-newer filename 查找比当前文件比较新的文件
-perm 222根据权限查找(2 -> o, 22 -> go)
+222 ugo只要有一个写权限就行
-222 ugo必须都有写权限
#####################################################################################################
第八章 Linux磁盘与文件系统管理
#####################################################################################################
MBR->[分区]->[分区]
引导程序(446) + 分区表(64) + 结束符(2)
一个分区需要16字节
-----------------------------------------
[分区]
boot sector -> super block -> inode -> block(默认4K)
[super block 记录inode信息和block信息。例如,使用情况]
[inode 每记录一个文件消耗128bit,相当于一本书的目录]
-----------------------------------------
[分区]
[block group]
boot sector -> {
[super block->文件系统描述信息->块位图->inode位图->inode表->block],
[super block->文件系统描述信息->块位图->inode位图->inode表->block],
[super block->文件系统描述信息->块位图->inode位图->inode表->block]
}
super block : 记录inode和block信息
文件系统描述信息 :记录一个分区中的 block group 信息。
块位图 :记录block区域中哪些block使用了,哪些没使用。
inode位图:同上
inode表:记录文件存放在哪些block中(128/4只能指向32个block)
|--→直接区(12)
|--→间接区(1)
|--→二间接区(1)
|--→三间接区(1)
-----------------------------------------
filefrag -v cc 查看文件在哪些block中
-----------------------------------------
dumpe2fs /dev/sda3 查看分区信息
-----------------------------------------
du 显示文件夹大小
-s 单层显示
-h 人性化显示
-----------------------------------------
VFS(虚拟文件系统) 不需要考虑要操作什么文件系统
-----------------------------------------
df 显示已挂载磁盘信息
-h 人性化显示
-T 显示文件类型
-----------------------------------------
硬链接不能跨分区
-----------------------------------------
[分区]
1>
fdisk -l 查看分区情况(有多个硬盘的话可以加硬盘名)
2>
fdisk /dev/sda 给sda分区
3>
## m查看帮助
a toggle a bootable flag
b edit bsd disklabel
c toggle the dos compatibility flag
d delete a partition //删除分区
g create a new empty GPT partition table
G create an IRIX (SGI) partition table
l list known partition types //列出分区类型
m print this menu
n add a new partition //创建一个新的分区
o create a new empty DOS partition table
p print the partition table //显示分区表
q quit without saving changes //不保存退出
s create a new empty Sun disklabel
t change a partition's system id //修改分区类型
u change display/entry units
v verify the partition table
w write table to disk and exit //保存并推出
x extra functionality (experts only)
4>
partprobe [/dev/sda] //更新分区表
5>
mkfs -t ext3 /dev/sda5 格式化分区(=mkfs.ext3 /dev/sda5)
mkfs -t ext3 -b 4096 /dev/sda5 //每一个block是4k
6>
mount /dev/sda5 /mnt //挂载
umount /dev/sda5 //卸载
mount -o remount,ro /mnt //以只读的形式挂载
mount -o remount,rw /mnt //读写权限
mount -o remount,noexec /mnt //无执行权限
mount -o loop xx.iso /mnt //挂载镜像
vim /etc/fstab //永久挂载(/dev/sda5 /home/smallbug/workspace ext3 defaults 0 0)
-----------------------------------------
fsck -f(强制检查) -C(显示进度) 检查磁盘
-----------------------------------------
badblock -sv(进度) 检查坏道
-----------------------------------------
fuser -mv /mnt //查看哪个进程占用该磁盘
-----------------------------------------
tune2fs -l /dev/sda5 查看分区信息
-----------------------------------------
/proc/swaps //查看交换分区
-----------------------------------------
unix2dos -n 123 345 将Linux文件格式转换为windows格式
#####################################################################################################
第九章 文件与文件系统的压缩与打包
#####################################################################################################
gzip压缩文件为 *.gz
-d 解压
gzip -c hosts > hosts.gz 压缩时保留源文件
zcat 查看gzip压缩过的文件
gunzip(gzip -d)解压缩文件
-----------------------------------------
zip -r压缩目录
解压:unzip FileName.zip
压缩:zip FileName.zip DirName
-----------------------------------------
bzip2压缩文件
-k产生压缩文件后保留原文件
-d 解压
bzip2 -c hosts > hosts.bz2 缩时保留源文件
bzcat 查看bzip2压缩过的文件
bunzip2解压缩文件
-----------------------------------------
tar打包文件
-c打包(-x解包)
-v显示详细信息
-f指定文件名
-z打包同时压缩(解压缩)(gzip)
-j打包同时压缩(解压缩)(bzip2)
-t 不解档的情况下,查看文件内容
-C 目录 指定解档目录
tar zcvf mkd.tar.gz ./mkd/
-----------------------------------------
.Z
解压:uncompress FileName.Z
压缩:compress FileName.tar.Z
-----------------------------------------
增量备份:之备份增加的部分
差异备份:只备份全量备份之后的数据
-----------------------------------------
备份:
-0 全备份
增量备份 备份顺序:012345
差异备份 备份顺序:09876
dump
-u 记录时间,写入到 /etc/dumpdates
-f 指定目录
dump -0u -f /home/back/1.dump /dev/sda3
restore -r -f /root/rhce/1.dump 恢复备份
-r 恢复所有数据
-i 交互(恢复部分文件)
-t不恢复查看内容
-----------------------------------------
创建ISO镜像
mkisofs -o xx.iso file1 file2 file3
-----------------------------------------
cp /dev/cdrom xxx.iso
直接将光盘中的文件复制成iso镜像
-----------------------------------------
dd if=/dev/sda5 of=test 将sda5分区中的数据备份到test中
-----------------------------------------
cpio
-o 压缩
-i 解压
find -name 'file*' | cpio -o > xx.cpio
cpio -iu < xx.cpio //解档
-u 如果解档文件更新的话,就覆盖
#####################################################################################################
第十章 vim程序编辑器
#####################################################################################################
Vim文本编辑器
vi filename(进入)--->命令模式
:wq(退出)------>命令模式
|
|ESC
|
iao------------>插入模式
a在光标所在字符后插入
A在光标所在行尾插入
i在光标所在字符前插入
I在光标所在行行首插入
o在光标下插入新行
O在光标上插入新行
:set nu设置行号
:set nonu取消行号
gg到第一行
G到最后一行
nG到第n行
:n到第n行
$移至行尾
0移至行首
x删除光标所在处字符
nx删除光标所在处后n个字符
dd删除光标所在行
ndd删除n行
dG删除光标所在行到文件末尾内容
D删除光标所在处到文件末尾内容
:n1,n2d删除指定范围的行
yy复制当前行
nyy复制当前行以下n行
dd剪切当前行
ndd剪切当前行以下n行
p、P粘贴在当前光标所在行下或行上
r取代光标所在处字符
R从光标所在处开始替换字符,按ESC结束
u取消上一步操作
/string搜索指定字符串
搜索时忽略大小写:set ic
n搜索指定字符串的下一个出现的位置
:%s/old/new/g(不询问)c(询问)全文替换指定的字符串
:n1,n2s/old/new/g在一定范围内替换指定字符串
:W保存修改
:W new_filename另存为指定文件
:wq保存修改并退出
ZZ快捷键,保存修改并退出
:q!不保存修改退出
:wq!保存修改并退出(文件所有者及root可以使用)
:r 文件名将文件中的所有内容导入到该文件中
: !命令执行命令
:map Ctrl+v Ctrl+()增加快捷键
:n1,n2s/^/#/g注释多行
:ab 打出a换成b
:sp 分屏
ctrl+w 切换
:only 取消分屏
/home/username/.vimrc普通用户设置vim快捷键
/root/.vimrcroot用户设置vim快捷键
vim插件:
1>https://github.com/ma6174/vim
编写python程序
自动插入头信息:
#!/usr/bin/env python
# coding=utf-8
输入.或按TAB键会触发代码补全功能
:w保存代码之后会自动检查代码错误与规范
按F6可以按pep8格式对代码格式优化
按F5可以一键执行代码
多窗口操作
使用:sp + 文件名可以水平分割窗口
使用:vs + 文件名可以垂直分割窗口
使用Ctrl + w可以快速在窗口间切换
编写markdown文件
编写markdown文件(*.md)的时候,在normal模式下按 md 即可在当前目录下生成相应的html文件
生成之后还是在normal模式按fi可以使用firefox打开相应的html文件预览
当然也可以使用万能的F5键来一键转换并打开预览
如果打开过程中屏幕出现一些混乱信息,可以按Ctrl + l来恢复
快速注释
按\ 可以根据文件类型自动注释
2>https://github.com/amix/vimrc
#####################################################################################################
第十一章 认识与学习bash
#####################################################################################################
whoami 查看当前用户
-----------------------------------------
[smallbug@smallbug ~]$ cat /etc/shells 显示系统的所有shell
/bin/sh
/bin/bash
/sbin/nologin
/usr/bin/sh
/usr/bin/bash
/usr/sbin/nologin
/bin/tcsh
/bin/csh
切换:直接敲shell的名称
echo $$
输出当前shell ID
-----------------------------------------
: 隔开同一行敲的多个命令使用
\ 另起一行 \
-----------------------------------------
变量名=值
变量名不能以数字开头
等号两边不能有空格
值用双引号引起来
定义变量时不加$,引用时需要加$
在终端敲该命令,所得的变量时当前shell的变量
单引号引用的变量不会被解析
declare -x dd=12 / export yy=10
定义环境变量
可以影响到所有子shell
declare +x dd
将环境变量变成本地变量
declare -r dd (readonly dd)
将变量设为只读
-----------------------------------------
echo 输出变量
-n 输出不换行
unset 取消变量
set 显示所有变量
set 1 2 3 4 5 设置参数
env 显示所有环境变量
export 显示所有环境变量
export -p显示所有环境变量
-----------------------------------------
$0 文件的名字
$# 参数的个数
${12} 文件的第12个参数
$* 所有的参数
-----------------------------------------
全局变量
$PATH
$HOME
$USER
$PS1 提示符([\u@\h \W]\$)
$LAGN 系统当前编码
$REPLY read默认赋予的变量
$? 记录上面的命令是否执行成功,0表示失败,非0表示成功
-----------------------------------------
locale -a 系统所支持的所有编码
-----------------------------------------
read -p "pleace input word:" name
相当于先输出再读取变量
-----------------------------------------
数组操作
xx=(aa bb cc dd) 赋值
echo ${xx[0]} 取值
echo ${xx[*]}
echo ${xx[@]} 取所有
echo ${!xx[@]} 查看所有下标
echo ${#xx[@]}查看元素个数
-----------------------------------------
ulimit -a
查看系统限制
core file size (blocks, -c) 0
data seg size (kbytes, -d) unlimited
scheduling priority (-e) 0
file size (blocks, -f) unlimited
pending signals (-i) 7866
max locked memory (kbytes, -l) 64
max memory size (kbytes, -m) unlimited
open files (-n) 1024
pipe size (512 bytes, -p) 8
POSIX message queues (bytes, -q) 819200
real-time priority (-r) 0
stack size (kbytes, -s) 8192
cpu time (seconds, -t) unlimited
max user processes (-u) 4096
virtual memory (kbytes, -v) unlimited
file locks (-x) unlimited
-----------------------------------------
r=${path#*kkk/bin}
删除path变量中的按 *kkk/bin 匹配的字符串,然后赋值给r(第一个匹配开始处理)
r=${path##*kkk/bin}
删除path变量中的按 *kkk/bin 匹配的字符串,然后赋值给r(最后一个匹配开始处理)
#删除前面的字符串,%删除后面的字符串
-----------------------------------------
r=${xx-"hello"} 如果变量xx存在就将xx值赋予r否则将hello赋值给r
r=${xx:-"hello"} 在上面的基础上还要判断是否为空
r=${xx:="hello"} 在上面的基础上将字符串赋值给xx
r=${xx:?"error"} 检查xx是否为空,如果是空的话显示字符串警告信息
r=${xx:+"hello"} 如果xx非空将后面的字符串赋值给r
-----------------------------------------
type -a ls 查看命令执行顺序
-----------------------------------------
用户登录时读取配置文件顺序:
vim /etc/profile 环境变量
/etc/inputrc 快捷键
~/.bash_profile
-----------------------------------------
set -u 开启当所用到的变量没有被设置时就会报错
+u 关闭
-x 追踪每一个操作
+x 关闭
-----------------------------------------
ls -a > a.txt 文件重定向(清空)
ls -a >> a.txt 文件重定向(追加)
xx 2> a.txt只重定向错误的结果
xx & >> a.txt 不管正确还是错误全部都追加
-----------------------------------------
tr 'a-z' 'A-Z' < hosts
将hosts文件中的字母从小写转为大写并输出到屏幕
-----------------------------------------
cat > filename << end
将输入字符保存到filename中,直到end结束
-----------------------------------------
grep搜索文件中的内容
-i不区分大小写
-v排除指定字符串 ^表示开头
-----------------------------------------
cut xx | tee xx | grep aa
将输出信息保存在xx文件中
-----------------------------------------
cut -d: -f1 /etc/passwd
以:作为分隔符,查看分割后的第一本分文件
-----------------------------------------
sort -n 以数字的行驶排序
sort -t: -k3 -n passwd
-u排除重复(== | uniq)
-----------------------------------------
wc 统计字符
-----------------------------------------
col expand 将Tab键转化为空格
-----------------------------------------
paste 将文件组合在一起
join
-----------------------------------------
split -b 10k /etc/services xxx
将services文件以每块10k前缀为xxx进行切分
-----------------------------------------
diff 判断两个文件是否相同
-----------------------------------------
xargs 让ls类似的不能使用管道的命令使用管道
未完待续
上一篇: SpingAOP原理小实现
下一篇: C语言实现动态二维数组