POSIX:可移植操作系统接口(Portable Operating System Interface of UNIX,缩写为 POSIX),发布者为电气与电子工程师协会(Institute of Electrical and Electronics Engineers),简称IEEE。
POSIX是IEEE为要在各种UNIX操作系统上运行的软件而定义的一系列API标准的总称,其正式称呼为IEEE 1003,而国际标准名称为ISO/IEC 9945。
基础命令
Ctrl + r,进入历史命令的搜索功能模式
history,查看所有的历史命令
tty,查看当前终端
输入 echo $$ 可以查看当前终端的进程pid
&表示这个程序在后台运行
./hello &
nohup command & 之后ctrl+d 或者 关闭窗口 进程仍然会在后台执行
./表示当前目录 如果不写./,Linux 会到系统路径下查找文件
所谓系统路径,就是环境变量指定的路径,我们可以通过修改环境变量添加自己的路径,或者删除某个路径。
很多时候,一条 Linux 命令对应一个可执行程序,如果执行命令时没有指明路径,那么就会到系统路径下查找对应的程序。
| 管道 (pipeline) 连结上个指令的标准输出,做为下个指令的标准输入。
通过 && 和 || 可以控制多条命令的执行情况
&&要求前一条命令执行成功才执行后面的语句 ||则是前一条失败才执行后面语句
查询CPU信息: cat /proc/cpuinfo
查看CPU的核的个数: cat /proc/cpuinfo | grep processor | wc -l
查看内存信息: cat /proc/meminfo
显示内存page大小(以KByte为单位): pagesize
ifconfig,查看内网 IP 等信息(常用)
date,查看系统时间(常用)
date -s20080103,设置日期(常用)date -s18:24,设置时间
bashrc与profile都用于保存用户的环境信息,bashrc用于交互式non-loginshell,而profile用于交互式login shell。
/etc/profile,/etc/bashrc 是系统全局环境变量设定
~/.profile,~/.bashrc用户目录下的私有环境变量设定
unset $JAVA_HOME,删除指定的环境变量
~/.profile与~/.bashrc的区别:
- 这两者都具有个性化定制功能
~/.profile可以设定本用户专有的路径,环境变量,等,它只能登入的时候执行一次~/.bashrc也是某用户专有设定文档,可以设定路径,命令别名,每次shell script的执行都会使用它一次
我们可以在这些环境变量中设置自己经常进入的文件路径,以及命令的快捷方式
通过修改.bashrc 可以为命令设置别名 (该文件就在主文件夹底下 隐藏显式)
alias lsl='ls -lrt'
alias lm='ls -al | more'
启动帐号后自动执行的是 文件为.profile,然后通过这个文件可设置自己的环境变量
安装的软件路径一般需要加入到path中:
使用ls -l可查看文件的属性字段 文件属性字段总共有10个字母组成
第一个字母表示文件类型,如果这个字母是一个减号-, 则说明该文件是一个普通文件。字母d表示该文件是一个目录,字母d,是dirtectory(目录)的缩写。
后面的9个字母为该文件的权限标识,3个为一组,分别表示文件所属用户、用户所在组、其它用户的读写和执行权限;
-rwxrw-r-- colin king 725 2023-11-12 15:37 /home/colin/a
表示这个文件对文件拥有者colin这个用户可读写、可执行;对colin所在的组(king)可读可写;对其它用户只可读
帮助命令
| 命令 | 作用 |
|---|---|
| whatis command | 简要说明command的作用(显示command所处的man分类页面) |
| man command | 查询命令command的说明文档 |
| which command | 查看程序的binary文件所在路径 |
| whereis command | 查看程序的搜索路径(用于当系统中安装了同一软件的多个版本时,不确定使用的是哪个版本时) |
文件/目录管理
创建:mkdir
touch 文件名,创建一个空白文件
删除:rm
删除非空目录:rm -rf file/dirtectory
删除日志 rm *log (等价: $find ./ -name “*log” -exec rm {} ;)
移动:mv
重命名: mv/rename
复制:cp (复制目录:cp -r )
切换到上一个工作目录:cd -或者cd ..
切换到home目录: cd or cd ~
显示当前路径: pwd
显示当前目录下的文件: ls, ls -a 可以显式隐藏文件
按时间排序,以列表的方式显示目录项 ls -lrt
查看两个文件间的差别: diff file1 file2
在文件内查找指定的字符串: egrep 执行效果与grep-E相似
egrep Linux * # 查找当前目录下包含字符串“Linux”的文件
改变文件的拥有者: chown
使用chmod命令可以更改文件的读写权限,更改读写权限有两种方法,一种是字母方式,一种是数字方式
-
字母方式:
chmod [-R] userMark(+|-) PermissionsMark-R代表递归+|-代表增加或删除权限
-
userMark取值:u:用户g:组o:其它用户a:所有用户
-
PermissionsMark取值:r: 读w:写x:执行
chmod a+x main # 对所有用户给文件main增加可执行权限
chmod g+w blogs # 对组用户给文件blogs增加可写权限
- 数字方式:
- 数字方式直接设置所有权限,相比字母方式,更加简洁方便;
- 使用三位八进制数字的形式来表示权限,第一位指定属主的权限,第二位指定组权限,第三位指定其他用户的权限,每位通过4(读)、2(写)、1(执行)三种数值的和来确定权限。如6(4+2)代表有读写权,7(4+2+1)有读、写和执行的权限。
chmod 740 main # 将main的用户权限设置为rwxr-----
更改文件或目录的拥有者:
chown username dirOrFile #使用-R选项递归更改该目下所有文件的拥有者
创建符号链接/硬链接:
ln 加上命令-s为软链接
软连接等价于起别名 硬链接等价于复制一个新文件
cat(英文全拼:concatenate)命令用于连接文件并打印到标准输出设备上。
-n或--number:由 1 开始对所有输出的行数编号。-b或--number-nonblank:和-n相似,只不过对于空白行不编号
> 可以进行输出重定向 cat默认输出到标准输出流
与cat结合:
cat -n textfile1 > textfile2 # 把 textfile1 的文档内容加上行号后输入 textfile2 这个文档里
file命令用于辨识文件类型。
file [-bcLvz][-f <名称文件>][-m <魔法数字文件>...][文件或目录...]
-b列出辨识结果时,不显示文件名称。-c详细显示指令执行过程,便于排错或分析程序执行的情形。-f<名称文件> 指定名称文件,其内容有一个或多个文件名称时,让file依序辨识这些文件,格式为每列一个文件名称。-L直接显示符号连接所指向的文件的类别。-m<魔法数字文件>指定魔法数字文件。-v显示版本信息。-z尝试去解读压缩文件的内容。
[文件或目录...]为 要确定类型的文件列表,多个文件之间使用空格分开,可以使用shell通配符匹配多个文件。
ar命令用于建立或修改备存文件,或是从备存文件中抽取文件。ar可让您集合许多文件,成为单一的备存文件。在备存文件中,所有成员文件皆保有原来的属性与权限。
d删除备存文件中的成员文件。m变更成员文件在备存文件中的次序。p显示备存文件中的成员文件内容。q将文件附加在备存文件末端。r将文件插入备存文件中。t显示备存文件中所包含的文件。x自备存文件中取出成员文件。a<成员文件>将文件插入备存文件中指定的成员文件之后。b<成员文件>将文件插入备存文件中指定的成员文件之前。c建立备存文件。i<成员文件>将文件插入备存文件中指定的成员文件之前。o保留备存文件中文件的日期。s若备存文件中包含了对象模式,可利用此参数建立备存文件的符号表。S不产生符号表。v程序执行时显示详细的信息。
ar rv one.bak a.c b.c # 打包 a.c b.c文件
文本处理
文件查找: find
Eg. 查找txt和pdf文件:
find . \( -name "*.txt" -o -name "*.pdf" \) -print
-
按类型搜索
-f文件 /-l符号链接 /-d目录 -
按时间搜索
-atime访问时间 (单位是天,分钟单位则是-amin,以下类似)
-mtime修改时间 (内容被修改)
-ctime变化时间 (元数据或权限变化) -
按大小搜索
-size -
找到后的操作:
- 删除
-delete - 打印
-print - 执行动作
-exec+命令
- 删除
文本搜索: grep
-o只输出匹配的文本行 VS-v只输出没有匹配的文本行-c统计文件中包含文本的次数-n打印匹配的行号-i搜索时忽略大小写-l只打印文件名
xargs 能够将输入数据转化为特定命令的命令行参数;是给命令传递参数的一个过滤器,也是组合多个命令的一个工具。之所以能用到这个命令,关键是由于很多命令不支持|管道来传递参数,而日常工作中有有这个必要。
-d定义定界符 (默认为空格 多行的定界符为 n)-n指定输出为多行-I {}指定替换字符串,这个字符串在xargs扩展时会被替换掉,用于待执行的命令需要多个参数时-0:指定0为输入定界符
find . type f -name "*.swp" | xargs rm
对文件内容进行排序: sort
-n按数字进行排序-d按字典序进行排序-r逆序排序-k N指定按第N列排序
uniq命令用于检查及删除文本文件中重复出现的行列,一般与 sort 命令结合使用。
-c或--count在每列旁边显示该行重复出现的次数。-d或--repeated仅显示重复出现的行列。-u或--unique仅显示出一次的行列。-w<字符位置>或--check-chars=<字符位置>指定要比较的字符。
tr 命令用于转换或删除文件中的字符。tr 指令从标准输入设备读取数据,经过字符串转译后,将结果输出到标准输出设备
tr [OPTION] SET1 [SET2]
-d,--delete:删除指令字符-c,--complement:反选设定字符。也就是符合 SET1 的部份不做处理,不符合的剩余部份才进行转换-s,--squeeze-repeats:缩减连续重复的字符成指定的单个字符 常用于压缩多余的空格cat file | tr -s ' '
cut命令用于显示每行从开头算起 num1 到 num2 的文字。cut 命令从文件的每一行剪切字节、字符和字段并将这些字节、字符和字段写至标准输出。
-c:以字符为单位进行分割。-d:自定义分隔符,默认为制表符。-f:与-d一起使用,指定显示哪个区域。
wc 统计行和字符的工具
-l统计行数-w统计单词数-c统计字符数
磁盘管理
查看磁盘空间利用大小: df -h
-h: human缩写,以易读的方式显示结果(即带单位:比如M/G,如果不加这个参数,显示的数字以B为单位)
查看目录所占空间大小:du -sh
-s递归整个目录的大小-h人性化显示
打/解包: tar
tar -cvf etc.tar /etc # 仅打包,不压缩! 压缩用zip
tar -xvf demo.tar
-x表示进行解包-c:表示进行打包, 即将所有文件放到一个文件夹中-v:显示打包进度-f:使用档案文件-z解压gz文件-j解压bz2文件-J解压xz文件
进程管理
任何进程都与文件关联;我们会用到lsof工具(list opened files),作用是列举系统中已经被打开的文件。在linux环境中,任何事物都是文件,设备是文件,目录是文件,甚至sockets也是文件。用好lsof命令,对日常的linux管理非常有帮助。
查看端口占用的进程状态:lsof 直接加文件名
lsof abc.txt:显示开启文件abc.txt的进程
-i:查看端口占用 #lsof -i:8080 查看8080端口占用-c: 显示该进程现在打开的文件 # -c -p 1234 列出进程号为1234的进程所打开的文件-u username: 查看用户username的进程所打开的文件+d: 查询指定目录下被进程开启的文件(使用+D递归c目录)
查询正在运行的进程信息: ps
-A/-e列出所有的进程-w显示加宽可以显示较多的资讯a:显示终端上的所有进程,包括其他用户的进程u:显示进程的详细信息x:显示没有控制终端的进程j:列出与作业控制相关的信息
ps -ef | grep 进程关键字 # 查找指定进程:
ps auxw --sort=-%cpu # 查看CPU使用率最高的进程
-%cpu 代表降序 若为--sort=%cpu 表示升序
输入参数j时可以查看到与作业控制相关的信息
ppid父进程idpid进程idpgid进程组id
显示进程信息,并实时更新: top
在top界面输入字符命令后显示相应的进程状态
P:根据CPU使用百分比大小进行排序。M:根据驻留内存大小进行排序。i:使top不显示任何闲置或者僵死进程。m:显示或隐藏内存状态信息s:设置刷新时间间隔<Space>:立即刷新q:退出top命令T:按MITE+排行K:kill进程
结束进程: kill
直接kill pid可以杀死进程 加-9是彻底杀死
kill 本质上是将指定的信息送至程序。预设的信息为 SIGTERM(15),可将指定程序终止。
若仍无法终止该程序,可使用 SIGKILL(9) 信息尝试强制删除程序。
程序或工作的编号可利用 ps 指令或 jobs 指令查看。
-1(HUP):重新加载进程。-9(KILL):杀死一个进程。-15(TERM):正常停止一个进程。-l <信息编号>若不加<信息编号>选项,则 -l 参数会列出全部的信息名称。-s <信息名称或编号>指定要送出的信息。ps -s 9 pid
性能监控
查看CPU使用率: sar -u n m (n 为监控频率、m为监控次数)
查看内存使用状况: sar -r n m
当系统中sar不可用时,可以使用以下工具替代: vmstat
网络工具
ifconfig查看ip
netstat 命令用于显示网络状态。利用 netstat 指令可让你得知整个 Linux 系统的网络情况。
-a或--all显示所有连线中的Socket。-c或--continuous持续列出网络状态。-e或--extend显示网络其他相关信息。-p或--programs显示正在使用Socket的程序识别码和程序名称。-r或--route显示Routing Table。-t或--tcp显示TCP传输协议的连线状况。-u或--udp显示UDP传输协议的连线状况。-l或--listening显示监控中的服务器的Socket。-n或--numeric直接使用IP地址,而不通过域名服务器。
列出所有 tcp 端口: netstat -at
使用netstat工具查询端口: netstat -antp | grep 6379

查看路由状态: route -n
探测前往地址IP的路由路径: traceroute IP
DNS查询,寻找域名domain对应的IP: host domain
ssh登陆远程服务器host,ID为用户名: ssh ID@host
ftp/sftp文件传输: sftp ID@host
ftp登陆后,可以使用下面的命令进一步操作:
get filename# 下载文件put filename# 上传文件ls# 列出host上当前路径的所有文件cd# 在host上更改当前路径lls# 列出本地主机上当前路径的所有文件lcd# 在本地主机更改当前路径
网络复制:
将本地localpath指向的文件上传到远程主机的path路径: scp localpath ID@host:path
以ssh协议,遍历下载path路径下的整个文件系统,到本地的localpath: scp -r ID@site:path localpath
用户管理
添加用户: useradd -m username
为用户添加/修改密码: passwd username
删除用户: userdel -r username #不带选项使用 userdel,只会删除用户。用户的home目录将仍会在/home目录下。要完全的删除用户信息,使用-r选项
切换到用户B: su userB
查看用户当前组: groups
变更用户组:
usermod -G groupNmame username
# 一个用户可以属于多个组 -G是将用户加入到组, -g将用户加入到新的组,并从原有的组中除去