[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 文件归档