Linux学习笔记
空格是不区分个数的.一行打不下的话,可以使用反斜杠 \ 来进行下一行代码的输入.
date 显示日期
date的格式化输出: 后面加一个 +%Y%m%d%H%M
分别代表了,年月日,小时分钟,可以自由组合来达到格式化输出的效果.
cal日历指令
cal [month] [year]
bc计算器
想要设置保留位数的话,使用 scale = 位数 来设置.
退出使用quit
按两下tab会把你的所有命令都显示出出来
ctrl + C 中断指令 ctrl + D 相当于输入exit
shift + pageup (pagedown) 看上一页或下一页
在命令后面输入 --help 可以查看帮助
在shell环境下,ctrl + insert 复制 shift + insert 粘贴
Shift + pageup 往上翻页.
shift + pagedown 往下翻页.
[命令] + --help 可以获得帮助
man + 命令 会获得更加详细的帮助
在man page里面常用的按键整理:
空格键 | 向下翻一页 |
---|---|
pagedown | 向下翻一页 |
pageup | 向上翻一页 |
home | 去到第一页 |
end | 去到最后一页 |
/string | 向下搜寻string这个字符串 |
?string | 向上搜寻string这个字符串 |
n,N | 搜寻的过程中,n用来找下一个结果,N用来找上一个结果 |
q | 结束这次的man page |
whatis + 指令 可以获得简要提示 |
|
info date 也可以获得帮助 |
|
Nano很好用也很简单.简单的文本编辑,用它足够了.而且下方都有命令提示,不需要刻意记忆. | |
shutdown 关机. |
|
他的参数如下: | |
-k | 不要真的关机,只是发警告信息出去 |
------- | ------- |
-r | 关机之后重新启动 |
-h | 后面指定时间关机 |
-c | 取消已经在计划中的shutdown内容 |
linux的文件信息
输入ll之后会有文件详细信息:
第一列是文件权限说明
-rwxrwx--- 解释一下
第一个字符代表这个文件是目录 文件或者链接文件。 d 目录 - 文件 l 链接文件 b 设备文件里的可供存储的接口设备 c 设备文件里的串行端口设备
接下来以三个为一组,第一组为文件所有者的权限,第二组为同用户组的权限,第三组为其他非本用户组的权限。 r 代表可读 w代表可写, x代表可执行,没有权限就是-
第二列是有多少文件名连接到此节点
第三列表示这个文件的所有者
第四列表示这个文件的所属用户组
第五列为这个单位的大小,默认单位为B
第六列为这个文件的创建日期或者最近修改的日期
第七列为文件名
改变文件属性和权限
改变所属用户组: chgrp
chgrp [-R] 用户组名 dirname/filename...
-R 进行递归的持续更改
改变文件所有者 chown
chown [-R] 账户名称 文件或目录
改变权限 chmod
- 数字类型改变权限
r是4 w是2 x是1 ,我们可以这样用:chmod [-R] xyz 文件或目录
xyz就是三个数字,代表了三组的权限。比如764就是 rwxrw-r-- 非常的方便 - 符号类型改变权限
u 代表用户 g 代表同组用户 o 代表其他用户 a代表所有用户
chmod u=rwx,g=rw,o=r 文件或目录
增加权限就用+,减少权限就用-
比如给所有用户增加写权限,就是
chmod a+w 文件或目录
绝对路径与相对路径
/代表根目录 ./代表当前目录 ../代表父目录 - 代表前一个工作目录 ~代表”目前用户身份所在的文件夹“ ~account 代表account用户所在的文件夹
cd 切换目录 pwd 显示当前目录 mkdir 新建一个新的目录 rmdir 删除一个空的目录(非空删不了)
mkdir
mkdir [-mp] 目录名称
-m 是配置文件的权限
-p 是递归的创建目录,比如你的目录名是一个 usr/gaolei/java 那就需要-p来递归创建了
rmdir
rmdir [-p] 目录名称
-p 回连同上层的空目录一起删除。
查看文件与目录 ls
ls [-aAdfFhilnrRSt] 目录名称
-a 全部的文件,连同隐藏文件。一同列出来。
-A -a去除.和..
-d 仅列出目录本身,而不是列出目录内的文件数据
-f 直接列出结果,而不排序
-h 将文件容量以KB GB形式列出
-R 连同子目录文件一起列出
-S 以文件大小排序
-t 时间排序
-l 列出文件的详细信息
复制文件
cp [-adfilprsu] 源文件 目标文件
-a 相当于-pdr
-d 若原文件为连接文件,则复制链接文件属性而非链接文件本身
-f 为强制的意思,若目标文件已经存在无法开启,则删除后在尝试一次.
-i 若目标文件已经存在时,在覆盖时会先询问操作的进行
-l 进行硬链接的文件创建,而非复制文件本身
-p 连同文件的属性一起复制过去,而非使用默认属性
-r 递归持续复制,用于复制目录
-s 复制成为快捷方式
-u 若destination 比source 旧才更新destination
rm删除文件或目录
rm [-fir] 文件或目录
-f 忽略不存在的文件
-i 互动模式,删除前会进行询问.
-r 递归删除,可以删除目录.
mv移动文件
mv [-fiu] 源文件 目标文件
-f 强制移动,不会询问
-i 若目标文件已经存在,就会询问
-u 若目标文件已经存在,且source比较新才会更新.
取得路径的文件名 basename
取得文件的目录名 dirname
文件内容的查阅
cat 由第一行开始显示文件内容
cat -[AbEnTv]
-A 相当于 -vET 的整合.可列出特殊字符
-b 列出行号,仅针对非空白行做出行号显示,空白行不标行号
-E 将结尾的断行字符$显示出来
-n 打印出行号,空白行也有行号.
-T 显示tab
-v 列出一些看不出来的特殊字符
tac 倒着显示
nl 添加行号显示
nl [-bnw] 文件
-b a 列出所有行号
-b t 如果有空行,跳过
-n ln 行号在左方显示
-n rn 行号在右方显示
-n rz 行号在右方显示,加0
-w 行号字段占用的位数
more 一页一页翻动
空格 翻页
enter 下一行
/字符串 向下查找字符串
:f 立刻显示出文件名以及目前显示的行数
q 立刻退出
b 往回翻页
less 一页一页翻动
pagedown 向下翻页
pageup 向上翻页
/字符串 向下查询
?字符串 向上查询
n 重复前一个查询
N 反向重复前一个查询
q 离开
head 取出前面几行
head [-n number] 文件
-n 后面接数字,代表显示几行 不写就默认前十行. -100就是不显示最后100行
tail 取出后面几行
-n 后面接数字,代表显示几行 不写就默认后十行 +100就是不显示前100行
od 读取非文本文件
od [-t TYPE] 文件
-t a 利用默认的字符来输出
-t c 使用ASCII字符来输出
-t d[size] 使用十进制来输出数据,每个整数占用size byte
-t f[size] 使用浮点数来输出数据,每个数占用size byte
-t o[size] 使用八进制来输出数据,每个整数占用size byte
-t x[size] 使用十六进制来输出数据,每个整数占用size byte
touch 修改文件时间或创建新文件
touch [-acdmt] 文件
-a 仅修改访问时间
-c 仅修改访问时间,若不存在,就不创建
-d 后面可以接欲修改的日期而不用当前时间.
-m 仅修改mtime(修改时间)
-t 后面可以接欲修改的时间而不用当前时间,格式为[YYMMDDhhmm]
file 查看文件类型
查找文件
whereis [-bmsu] 文件或目录名
-b 只找二进制格式的文件
-m 只找在说明文件路径下的文件
-s 只找source源文件
-u 查找不在上述三个选项中的其他特殊文件
locate [-ir] keyword
-i 忽略大小写的差异
-r 后面可接正则表达式
find [PATH] [option] [action]
path不用说
option 有这么几个重要的 -user 按用户名查找 -name 按文件名查找 -size [+-]SIZE 按文件大小查找 -type TYPE 按文件类型查找
压缩与解压
gzip zcat
gzip [-cdtv#] 文件名
-c 将压缩的数据输出到屏幕上,可通过数据流重定向来处理.
-d 解压缩的参数
-t 可用来检验一个压缩文件的一致性
-v 可以显示压缩比
-# 压缩等级,-1最快,但是压缩比最差. -9最慢,但压缩比最好. 默认-6
bzip2 gzip的升级版
tar 打包工具
tar [-j|-z] [cv] [-f 新建文件名] filename
打包与压缩
tar [-j|-z] [xv] [-f 新建文件名] [-C 目录]
解压缩
-c 新建打包文件,可通过-v来查看过程中被打包的文件名
-x 解打包或解压缩的功能,可以搭配-C在特定目录解开.特别留意的是,-c -t -x不可同时出现在一串命令中
-j 通过bzip2来进行压缩/解压缩,文件后缀名为 *.tar.bz2
-z 通过gzip来进行压缩/解压缩,文件后缀名为 *.tar.gz
-v 在压缩/解压缩过程中,将正在处理的文件名显示出来.
-f filename: 后面接要被处理的文件名
-C 解压缩时指定特定目录.
vi 与 vim
vi 一般模式
vi 文件名
进入一般模式
h 左
j 下
k 上
l 右
ctrl + f 向下移动一页
ctrl + b 向上移动一页
ctrl + d 向上移动半页
ctrl + u 向下移动半页
+光标移动到非空各符的下一行
-光标移动到非空格符的上一行
n
0或home 移动到最前面
$或end 移动到最后面
H 移动到屏幕的最上方的第一个字符
M 移动到屏幕中央行的第一个字符
L 移动到屏幕最下方那一行的第一个字符
G 移动到最后一行
nG n位数字,移动到文件的第n行
gg 移动到文件的第一行
N[Enter] 光标向下移动N行
/word 向下查找
?word 向上查找
n 重复前一个查找
N 反向前一个查找
x 向后删除一个字符
X 向前删除一个字符
nx 向后连续删除N个字符
dd 删除光标所在的那一整行
ndd 删除光标向下n 行
d1G 删除光标所在到第1行的所有数据
dG 删除光标到最后一行的所有数据
d$删除光标所在处到该行最后一个字符
d0删除光标所在处到该行的第一个字符
yy 复制光标所在那一行
nyy 复制光标所在向下N行
y1G 复制光标所在行到第一行的所有数据
yG 复制光标所在行到最后一行的所有数据
y0 复制光标所在字符到行首的数据
y$ 复制光标所在字符到行尾的数据
p 将已复制的数据在光标下一行粘贴.P则为向上一行粘贴.
J 将光标所在行与下一行合并为同一行.
u 复原前一个操作
ctrl+r 或者.重做前一个操作
进入编辑模式
i,I 进入插入模式 i 在光标所在处插入 I在光标所在的行首插入
a,A 进入插入模式 a为在光标所在的下一个字符处开始插入,A为光标所在处的最后一个字符处开始插入.
o,O 进入插入模式, o 为光标所在的行的插入一个新行.O为上一行插入新行.
r,R 进入替换模式 r只会替换光标所在的那个字符一次,R会一直替换光标所在的文字,直到按下ESC
进入命令行
:w 保存
:w! 强制写入
:q 退出
:q! 强制退出而不保存
:wq 保存后离开
:ZZ 若改动,保存后离开,若没改动,直接离开.
:w[filename] 将文件另存为
:r[filename] 光标后面读入新的文件
:! command 暂时离开vi到命令行模式执行command的显示结果
:set nu 显示行号
:set nonu 取消行号
Vim出现警告时的几种操作
[O]pen Read-Only 只读
[E]ditAnyway 不载入之前的内容.正常编辑.
[R]ecover 加载暂存文件的内容,但是保存完后要手动删除暂存文件.
[D]elete it 删除暂存文件
[Q]uit 离开
[A]bort 忽略这个编辑行为,与quit相似
块选择
v 光标移动过的地方反白选择
V 光标移动过的行反白选择
Ctrl + v 块选择,以长方形的方式选择数据
y 将反白的地方复制起来
d 将反白的地方删除
vim多窗口
:sp filename
不写filename的话,默认一个文件两个窗口.
按下 ctrl + w + ↑或↓来切换窗口.
bash shell
bash里命令太长的话,可以用\来换行继续输入.
显示变量: echo $变量名
设置变量 变量名=变量值 注意不能有空格,特殊字符用""括起来可以保持原有属性.单引号''内则为一般字符.
取消变量 unset 变量名
把变量导出到环境变量 export 变量名
单引号和双引号必须要成对.使用单引号要用\来转义.
env查看环境变量.set 查看所有变量
变量键盘读取(用于script的编写)
read [-pt] variable
-p 后面可以接提示符 -t 后面可以接等待的秒数
声明变量类型
declare [-aixr] 变量名
-a 定义成数组类型
-i 定义成整数数字 -x 与export一样,把变量变成环境变量. -r 把变量设置为只读类型.
设置别名,alias 别名='真正的命令'
直接输入alias可以查看所有别名
查看历史命令 history
history [n]
列出最近N条命令
history [-c]
将目前的shell中的所有history内容全部清除.
!number
执行number条命令
!!
执行上一条命令
!al
执行最近以al开头的命令
ctrl+ c 终止当前命令 ctrl + d 输入结束 ctrl+ s 暂停屏幕输出 ctrl + q 恢复屏幕输出 ctrl+ u 将整行命令删除 ctrl + z 暂停目前的命令.
通配符
*代表0到无穷多个任意字符
? 代表一个任意字符
[abcd] 中括号内任意一个字符
[0-9] 0-9任意字符
[^]反向选择.
重定向输入输出
输入<和<<
输出>和>>
错误输出 2>和2>>
< >会覆盖原文件,但<< 和>>不会
/dev/null是个黑洞,给他的东西全部消失不见.
Linux的命令也有与&& 或||,而且是短路的.
管道命令 |
能把前一个命令的正确信息输入到后一个命令中去.
cut 切割
cut -d
分隔字符 -f范围
比如 ps -ef | cut -d ':' -f 3,5 就是用':'作为分割符,取3-5条.
grep 过滤.
grep [-acinv] [-A] [-B] [--color=auto] '查找字符串' filename
-a 将binary文件以text文件的方式查找数据
-c 计算找到'查找字符串'的次数
-i 忽略大小写
-n 顺便输出行号
-v 反向选择,即输出没有'查找字符串'的那一行
--color=auto 将找到的关键字部分加上颜色显示.
-A 后面接数字,表示after的意思,除了该行,后面的数字行也显示出来.
-B 后面接数字,表示before的意思,除了该行,后面的数字行也显示出来.
排序命令sort
sort [-fbMnrtuk] [file or stdin]
-f 忽略大小写的差异
-b 忽略最前面的空格部分
-M 以月份的名字来排序
-n 使用纯数字进行排序'
-r 反向排序
-u 去重
-t 分割符,默认用tab来分割
-k 以那个区间来进行排序的意思
唯一命令 uniq(去重)
uniq [-ic]
-i 忽略大小写
-c: 进行计数
wc 统计
wc [-lwm]
-l :仅列出行
-w :仅列出多少字(英文字)
-m :多少字符
双向重定向 tee
tee会同时将数据流送与文件和屏幕.
字符转换
tr 用来删除一段信息当中的文字或者是替换
tr [-ds] SET1...
-d 删除信息当中SET1这个字符串 -s替换掉重复的字符
join 将两个相关的信息中有相同数据的那一行加在一起.
-join [-ti12] file1 file2
-t join默认以空格符分割数据,并且对比第一个字段的数据,如果连个文件相同,则将两个文件连成一行.
-i 忽略大小写的差异
-1 -2 代表第1 2个文件要用哪个字段来分析.
paste 将两行贴在一起,中间以tab键隔开.
paste [-d] file1 file2
-d 后面可以接分割字符,默认是用tab来分割的.
expand 将tab转换为空格键
expand [-t] file
-t 后面可以接数字.表示替换为多少个空格. unexpand可以将空格转换为tab
split 切割文件
split [-bl] file PREFIX
-b 后面可以接欲切割成的文件的大小,可加单位 b k m
-l 以行数来进行切割.
PREFIX 代表前导字符,可作为切割文件的前导文字.
Linux的正则表达式
[:alnum:]所有的字母和数字
[:alpha:]所有的字母
[:blank:]代表空格键与tab按键
[:cntrl:]所有的键盘控制键
[:digit:]所有的数字
[:graph:]除了空格符外的其他所有按键
[:lower:]所有小写字符
[:print:]代表任何可以被打印出的字符
[:punct:]代表标点符号
[:upper:]代表大写字符
[:space:]任何会产生空白的字符
[:xdigit:]十六进制数字类型
.代表绝对有一个字符,
正则表达式的{n,m}在shell里要用 {n,m}来表示,因为{}在shell里有其他的意思.
新旧版本文件的比较
diff [-bBi] from-file to-file
from-file是欲比较的文件
to-file是目的文件
-b 忽略空白符
-B 忽略空白行
-i 忽略大小写
带标题和页数的打印
pr 文件名
shell script
注意事项
- 空白会被忽略
- 读取到Enter符号,就尝试开始执行该文件.
- 如果一行内容太多,可以使用\Enter来扩展至下一行
- 批注,会自动忽略.
执行脚本
绝对路径执行 /home/gaolei/shell.sh
相对路径执行 ./shell.sh
bash进程来执行 bash shell.sh 或者 sh shell.sh
用户
su- 登录root用户,需要输入密码
su [-c 命令] [username]
-c 只进行一次命令
进程
在命令后面加一个&可以把工作丢到后台执行.完成后他会告诉你的.
ctrl + z 会把进程丢到后台中暂停.
查看后台工作状态 jobs
jobs [-lrs]
-l 除了列出job number与命令串外,同时列出PID的号码.
-r 仅列出正在后台run的工作
-s 仅列出正在后台暂停的工作.
将后台工作拿到前台来 fg
fg %jobnumber
后台暂停的工作怎么继续执行呢?
bg %jobnumber
kill
kill -n %jobnumber或pid
对于n来说 9是强制删除 15是以正常的方式终止.
查看进程
ps aux
查看所有进程数据
ps axjf
连同部分进程树状态.
RPM软件安装(install)
rpm -ivh RPM安装包
RPM查询
rpm -qa
查询已安装软件.
rpm -q 软件名
查询是否安装
yum
yum list
列出目前yum管理的所有软件的名称
yum install
安装软件
yum remove
删除软件
top 命令
top命令可以查看进程的占用率情况.看这篇文章
一个常用命令 先按top 进入界面之后,按p是按照cpu使用率排序. 按m 是按内存使用率排序.(美团面试的时候问的:怎么找出死循环的线程)
查看端口号占用
netstat -tunpl | grep 端口号
lsof -i:端口号