[TOC]
本学习笔记基于北京邮电大学蒋砚军老师的《Linux开发环境及应用》课程
登陆
1 | ssh name@ip |
一些基本Linux命令
man:查阅手册
可以查询各种命令的说明书,系统调用的使用手册,c语言和其他语言的库函数,系统配置文件格式。
man(取自manual)
man name
查询
man 1 name
指定章节号的查询
章节编号:1 命令;2 系统调用;3 库函数;5 配置文件;
man -k regexp
列出关键字与正则表达式(regexp)匹配的手册项目录
q
退出
date:日期与时间
man date
即可查阅关于时间的联机手册。
date
查询时间
date "+%Y-%m-%d"
格式化输出时间,引号内第一个字符必须为+
%Y
年;%m
月;%d
日;%H
小时;%M
分钟;%S
秒;%s
秒坐标(自1970年开始);%j
今年的第几天;
ntpdate
校准系统时间
ntpdate -q 0.pool.ntp.org
查询当前时间与标准时间之差
cal
打印当前月份的日历
cal 2022
打印2022年的日历
cal 3 2022
打印2022年3月的日历
bc:计算器
可以使用c语言语法进行编程(设定变量,循环等)
bc
进入计算器,缺省精度为小数点后0位
bc -l
进入计算器,缺省精度为小数点后20位
quit
退出
passwd:更换口令
passwd
系统不存储口令明文,而是通过哈希算法加密,且无法由哈希值倒推出原文。
系统状态相关
who
列出当前系统中已经登陆的用户
第一列为用户名,第二列为终端设备文件名
tty
打印出当前终端的设备文件名
who am i
列出当前终端上的登陆用户(包括用户名,终端设备文件名等)
whoami
仅列出当前终端上的登录用户的用户名
uptime
返回当前时间,系统已开机时间,当前登陆入的用户数,系统负载平均数
top
列出资源占用排名考前的进程
ps
查阅当前终端上启动的进程状态
ps -e
查阅所有进程状态
ps命令的其他 - 选项:
-f
以full格式列出;-l
以long格式列出
free
了解内存使用情况
vmstat
了解系统负载
vmstat 1
每隔一秒打印信息
使用 Ctrl+C 以停止vmstat采集数据
处理文本文件
标准输入输出:键盘输入,屏幕输出
重定向
> file.txt
输出到file.txt
< file.txt
从file.txt获取输入
管道
ls - l | sort
将 ls -l 与 sort 两个命令连接在一起
显示文件
more/less:逐屏显示文件
显示一个文件,每显示满一屏幕后停下来。
more file.txt
指定一个文件
more *.[ch]
指定多个文件
more命令 | |
---|---|
空格 | 显示下一屏(翻页) |
enter | 上滚一行 |
q | 退出 |
/ | 搜索指定模式的字符串 |
h | 帮助信息 |
Ctrl+L | 屏幕刷新 |
less file.txt
大体上与more命令差不多,多一些功能,例如方向键上键向上选取一行
cat file.txt
打印文件所有内容
cat -n file.txt
打印打印文件所有内容并加上行号
od file.txt
逐字节打印
od -t x1 file.txt
以十六进制打印文件字节
x1
十六进制;d1
十进制;u1
无符号十进制;o1
八进制;
od -c
遇到不可打印字符时打印编码
head file.txt
显示文件头部的10行
head -n 15 file.txt
显示文件头部的15行
tail file.txt
显示文件尾部的10行
tail -f file.txt
实时打印文件尾部被追加的内容
文件数据处理
tee file.txt
三通:同时将数据输出到屏幕上并存入文件里
wc file.txt
字计数:列出文件行数,词数和字符数
wc -l
只计算行数
sort
将字符串进行排序
sort -n
对数字按照算数值大小排序,而不是比较字符串
tr string1 string2
翻译字符,将string1中的字符替换为string2中的字符
cat file | tr '[a-z]' '[A-Z]'
将小写字母全部换为大写字母
cat file | tr % '\012'
将%改为换行符
uniq
筛去文件中的重复行(上下紧邻的内容相同的两行)
uniq -u
只保留没有重复的行
uniq -d
只保留有重复的行(重复行只打印一次)
uniq -c
计数重复行的行数
正则表达式
主要用于字符串匹配替换等
基本定义
元字符
元字符 . * [ \ ^ $
具有特殊含义的字符
使用反斜杠 \
即可进行转义
圆点 ·
可用来匹配任意单字符
集合
在方括号[]
之内的字符为集合
[abcd]
a或b或c或d
· * \
在方括号内时代表他们自己
使用-
表示一个区间
[a-z]
所有小写字母
[a-zA-Z0-9]
所有字母和数字
使用^
表示补集(必须放在开头)
[^A-Z]
任何一个非大写字母
单字符正则表达式的组合
串结:将字符进行正常排列即可 abc
单字符后跟星号*
表示闭包(0或任意多次该字符)
[a-z][0-9]*
一个小写字母后跟任意数量的数字
锚点:$与^
123$
只匹配字符串尾部的123
,$符号必须在尾部
^abc
只匹配字符串首部的abc
,^符号必须在首部
扩展正则表达式
ERE与PCRE
与基本正则表达式不兼容
圆括号()
表示分组
(xy)*
字符串xy的闭包
|
或
+
正闭包
?
出现0或1次
命名的预定义集合:
[[:xdigit:]]
十六进制数字
\d
数字
\D
不是数字
处理命令
grep:查找
grep
在文件中查找字符串
egrep
使用扩展正则表达式ERE查找
fgrep
快速搜索指定字符串
grep选项:
-F
相当于fgrep
-G
使用基本正则表达式(BRE)
-E
使用扩展正则表达式(ERE)
-P
与perl兼容的正则表达式(PCRE)
-n
每行前现实行号
-v
现实所有不好含模式的行
-i
忽略字母大小写
sed:流编辑
sed '命令' 文件名列表
sed -e
可使用多个命令,每输完一个命令后输入-e
sed -f
使用文件输入命令
awk:逐行扫描
符合条件的行,执行相应的动作
awk '程序' 文件名列表
awk -f
使用文件输入程序
每行用空格分开的部分叫做记录的“域”
$1
表示第1域的内容 $2
则表示第2域
$2
表示整行内容
正则表达式应用
详见我的另一篇文章:Linux作业 正则表达式
文件
两文件比较
cmp file1 file2
逐字节比较两个文件是否完全相同
若完全相同,则不给出提示
若有不同,则打印出第一个不同之处
在Windows中也有类似的命令:COMP
md5sum file1 file2
使用MD5算法(散列函数)根据文件内容生成16字节hash值并进行比较
md5sum file1 file2 > files.sum
将生成的值存入文件
MD5失误率(不同文件生成完全相同的哈希值的概率):2^-128 = 3*10^-38
sha1sum
SHA-1算法:20字节hash值
diff:比较两个版本的文本文件以寻找两者的差别
diff file1 file2
使用normal格式输出的内容中,a(add)表示新增,c(change)表示修改,d(delete)表示删除
diff -u file1 file2
使用unfined格式输出内容,+表示新增,-表示删除
vi:文本文件编辑
vi file.txt
通过vi编辑器打开file.txt文件
配置文件 $HOME/.exrc
:set
查看当前偏好设置
vi启动后进入命令模式,键盘输入解释为命令,此时按键没有回显
i
进入插入文本编辑状态 a
进入追加文本编辑状态
按下 Esc 以退出文本状态进入命令状态
光标移动
h
左移一列; j
下移一行; k
上移一行; l
右移一列;(方向键同样可用)
^
移至行首; $
移至行尾;
w
移至右一个单词; b
移至左一个单词
Ctrl+B 向后翻页;Ctrl+F 向前翻页;(PgUp与PgDn键同样可用)
:476
移至文件第476行; $
移至文件尾;
%
括号配对:光标在一个括号上时,按下即可定位到其匹配的另一个括号上
命令前加一行整数,表示命令重复执行多少遍
剪切板操作
x
删除当前字符; dd
删除当前行; r
替换光标处字符;
u
取消上一次操作(撤销); .
重复上一次动作;
ZZ
存盘退出; :wq
+ Enter 存盘退出; :w
+ Enter 仅存盘; q!
+ Enter 不存盘退出;
:r file.c
读入文件file.c插入到当前行之下
:50,$w file.c
把第50行到文件尾的内容写到file.c中; :50,$w! file.c
强制覆盖
:10,50d
删除10到50行(同时复制内容)
:10,40y
复制10到50行
p
粘贴
:7,9CO56
复制7到9行的内容并粘贴到56行下
:8,10m78
移动8到10行的内容到78行下
J
将当前行下一行合并到当前行
Ctrl+L 屏幕刷新; Ctrl+G 显示状态
查找与替换
/
查找命令,后接正则表达式。如: /[0-9][0-9]*
n
查找下一个; N
查找上一个;
:1,50s/abc/xyz
在1到50行中,将每行的第一个abc替换为xyz(每行只替换一次)
:1,50s/abc/xyz/g
在1到50行中,将所有abc替换为xyz
:50,80s/^/ /
将50到80行右移四列(将每行开头的空字符替换为4个空格)
文件管理和目录管理
ls:列出文件目录
可使用实参列出文件
-F
/目录 *可执行文件 @符号连接文件
-l
长格式列表 第1列:文件属性 第2列:文件link数 第3、4列:文件主的名字和小组名字 第5列:文件大小(字节数)(目录:目录表大小) 第6列:最后一次修改时间 第7列:文件名
-h
便于阅读的方式打印数值
-d
列出目录自身信息
-a
列出文件名首字符为圆点的文件(用户偏好设置等)
-A
同上,不列出.
和..
-s
文件占用磁盘空间
-i
文件的i节点号
cp:拷贝文件
cp file1 file2
cp file1 file2 dir
file2不存在则创建,存在则覆盖
mv:移动文件(相当于剪切,效率高于拷贝后再删除)
mv file1 file2
mv file1 file2 file3 dir
把三个文件移动到目录下
mv dir1 dir2
rm:删除文件
rm file1 file2 file3
rm *.o
删除所有.o文件
-r
递归删除
-i
删除前需要确认
-f
强迫删除(可删除只读文件)
使用--
对命令参数进行转义:rm -i
无法删除名为-i的文件,使用rm -- -i
命令,让系统不将-
开头的部分识别为命令参数。
Linux系统下目录使用/
分割,Windows系统下目录使用\
分割
pwd
打印当前工作目录
cd /usr/include
改变当前工作目录 cd
回到主目录
mkdir
创建目录
-p
自动创建路径中不存在的目录
rmdir
删除目录,要求不存在除.和..之外的文件或目录
-r
递归删除
cp -r
目录复制
-v
冗长方式,实时列出正在复制的文件名
-u
增量拷贝,便于备份目录。不拷贝相同或过时版本(比较时间戳)的文件
touch
将文件最后修改时间变成当前时间
rsync
数据备份工具
find
遍历目录树
find ver1.d ver2.d -name '*.c' -print
在ver1.d和ver2.d中查找.c文件并打印路径
-name
后跟文件名,必须有引号
-regex
整蛊路径名与正则表达式匹配
-type
后跟单个字母:f普通文件,d目录,l符号连接文件,c字符设备文件,b块设备文件,p管道文件
-size
指定文件大小,后跟符号:+
表示大于,-
表示小于
-mtype
文件最近修改时间
-newer
文件比文件更新
-print
打印文件路径名
-exec
其后到分号之间的内容作为一条施加在查找到的文件上的命令
-ok
同上,多一步确认
xargs
将标准输入组织成命令执行
-n
指定每批处理多少个
tar
文件归档