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
父进程id
pid
进程id
pgid
进程组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将用户加入到新的组,并从原有的组中除去