简介
本文档主要记录与Linux相关的知识分享、命令使用方法、技巧等等。
部分参考自: 金步国作品集 - 致敬!!!
freedesktop.org
官网: https://www.freedesktop.org/
source code: https://gitlab.freedesktop.org/
Welcome to freedesktop.org
freedesktop.org 托管免费和开源软件的开发,专注于开源图形和桌面系统的互操作性和共享技术。 我们自己不生产桌面,但我们旨在帮助其他人这样做。
Software projects
我们的大多数成员项目都生产用作库或服务的软件。 完整列表可在我们的软件页面上找到。
我们托管的大部分软件都专注于图形和媒体设备的驱动程序和中间件、进程间通信和授权、输入和国际化。
freedesktop.org 上的所有软件都是开源的,并且对社区贡献开放。 软件页面解释了如何报告错误并提出对每个项目的更改。
Specifications
我们还主持互操作性规范的讨论和开发。 完整列表可在我们的规范页面上找到。
这些规范主要涵盖低级桌面问题,例如识别文件类型、启动应用程序以及在应用程序和桌面之间交换数据。 它们通常被称为“XDG”规范,作为 Cross-Desktop Group 的首字母缩写词。
freedesktop.org 不是一个正式的标准机构,本身也不是一个平台; 我们没有合规性测试或认证。 任何人都可以免费使用和实施本网站上的规范; 规范页面解释了如何提出更改和现有规范,或全新的规范。
Infrastructure
我们用来为我们的项目提供这些服务的基础设施记录在我们的基础设施页面上。 您可以快速访问我们大部分代码所在的 GitLab 实例、我们的邮件列表,或进一步浏览这些 wiki 页面以了解更多信息。
Getting Involved
我们欢迎所有新的贡献者,无论您的技能如何,我们的目标是成为一个您可以作为开源贡献者学习和成长的地方。
进入的第一个点是找到您想从事的项目,通常是通过我们的软件或规范页面。 每个项目都应该有一个关于如何报告问题、讨论更改和回馈的明确链接——这几乎肯定会出现在我们 GitLab 实例的该项目页面上。
如果您想创建一个新的 freedesktop.org 项目,或请求托管您想移至此处的现有项目,请查看新项目页面。
Code of Conduct
freedesktop.org 对我们托管的所有服务都采用了贡献者契约。 请以适当的方式行事,避免辱骂、欺凌和/或歧视行为。 如需更多信息,包括在何处报告任何不当行为,请查阅完整的行为准则。
Privacy and personal information
当您使用 freedesktop.org 服务时,您可能会向我们披露个人身份信息。 我们的隐私政策解释了我们如何收集和使用这些数据。
Contact us
如果您对站点本身或我们的基础架构有任何疑问,可以通过 sitewranglers 列表或 OFTC 的 #freedesktop IRC 频道联系管理员。 平台范围的公告和讨论通常在 freedesktop 邮件列表中。
请注意,在 IRC 上回答您的问题可能需要一些时间,而且我们也不太可能帮助解决项目特定的问题(例如,“为什么 ModemManager 会崩溃?”)。 与特定成员项目有关的问题或问题应直接发送到该项目自己的邮件列表或错误跟踪器。
Sponsors
freedesktop.org 是一个完全自愿的组织,没有企业支持或资金流。 我们是 X.org 基金会的一部分,该基金会是 Software in the Public Interest, Inc. 的成员项目,目的是持有资产。
我们要感谢 Equinix Metal 和波特兰州立大学对托管 freedesktop.org 所需的基础设施的慷慨支持。 我们也感谢 GitLab、谷歌、英特尔和惠普之前赞助我们的一些服务器。 这些善意的捐赠使我们能够运行我们所做的服务。
systemd
本部分翻译主要参考自 http://www.jinbuguo.com/systemd/systemd.index.html
以及 systemd 官网: https://systemd.io/
简介
环境变量
参考: https://zh.wikipedia.org/wiki/%E7%8E%AF%E5%A2%83%E5%8F%98%E9%87%8F
环境变量(environment variables)一般是指在操作系统中用来指定操作系统运行环境的一些参数,如:临时文件夹位置
和系统文件夹位置
等。
环境变量 是在操作系统中一个具有特定名字的对象,它包含了一个或者多个应用程序所将使用到的信息。例如Windows
和DOS
操作系统中的path
环境变量,当要求系统运行一个程序而没有告诉它程序所在的完整路径时,系统除了在当前目录下面寻找此程序外,还应到path
中指定的路径去找。用户通过设置环境变量,来更好的运行进程。
Linux系统
shell环境
依赖于多个文件的设置。当shell
被调用时,它从两个初始文件读取命令。/etc/profile
包含了系统变量,它由系统管理员维护,由系统管理员设置本地系统变量
和特殊命令
。普通用户的启动信息文件
($HOME/.bash_project
)由各用户自己维护,该文件可以被修改以实现任何特定的系统初始化。
只有在特定的情况下才读取profile
文件,确切的说是在用户登陆的时候。当运行shell脚本
或subshell
以后,就无须再读profile
。虽然所有profile
都可选的,但是基本上所有系统都有/etc/profile
.
如果定义了变量ENV
且已经传递到环境中,则所有的bash shell
都要读取并调用由这个变量指定的文件所包含的命令。这个文件用来定义所有bash shell
的特征,而不仅仅是登陆到shell
。这个文件的典型的名字是$HOME/.bashrc
。
当用(系统管理员)新建用户时,.bash_profile
、bashrc
和其他公共的环境文件模板将复制到/etc/skel
这个目录下面。可以编辑这些初始化设置,也可以在此目录下添加附加的文件。
(常见的有HOSTNAME
,SHELL
,HISTSIZE
,PERL5LIB
,USER
,PATH
,PWD
,LANG
,HOME
, LD_LIBRARY_PATH
(指定动态链接库的位置so文件,一般在安装软件出错时用到),PYTHONPATH
(指定python安装包的路径), PERL5LIB
(指定perl安装包的路径))
使用set
命令显示所有本地定义的Shell变量
> set
'!'=0
'#'=0
'$'=15864
'*'=( )
-=569JNRXZghiklms
0=/bin/zsh
'?'=0
@=( )
ARGC=0
BG
CDPATH=''
...
```
使用`readonly`命令设置只读变量,变量就不可以被修改或清除
**环境变量的设置位于`/etc/profile`文件**
### 查看环境变量
```bash
> # 查看当前全部的环境变量:
> env
> # 查看特定环境变量: echo +$变量名
> echo $PATH
添加环境变量
例如要将 /home/admin/code/lib/include
加入到环境变量 LD_LIBRARY_PATH 中,可以在shell
中输入:
> # 这要写绝对路径
> export LD_LIBRARY_PATH=/home/admin/code/lib/include
删除环境变量
> unset LD_LIBRARY_PATH
> # 万一设置错了,或者更改可使用,或取消设置。
Linux的变量种类
按变量的生存周期来划分,Linux变量可分为两类:
- 永久的:需要修改配置文件,变量永久生效。
- 临时的:使用
export
命令声明即可,变量在关闭shell时失效。
设置变量的三种方法
编辑/etc/profile
【对所有用户生效(永久的)】
用VI在文件/etc/profile文件中增加变量,该变量将会对Linux下所有用户有效,并且是“永久的”。
例如:编辑/etc/profile文件,添加CLASSPATH变量
\> # vi /etc/profile
export CLASSPATH=./JAVA_HOME/lib;$JAVA_HOME/jre/lib
注:修改文件后要想马上生效还要运行source /etc/profile
不然只能在下次重进此用户时生效。
编辑用户目录下.bash_profile
【对单一用户生效(永久的)】
用VI
在用户目录下的.bash_profile
文件中增加变量,改变量仅会对当前用户有效,并且是 “永久的”。
例如:编辑guok
用户目录(/home/guok
)下的.bash_profile
$ vi /home/guok/.bash.profile
添加如下内容:
export CLASSPATH=./JAVA_HOME/lib;$JAVA_HOME/jre/lib
注:修改文件后要想马上生效还要运行 source /home/guok/.bash_profile
不然只能在下次重进此用户时生效。
运行export
命令
【只对当前shell(BASH)有效(临时的)】
在shell
的命令行下直接使用 [export 变量名=变量值]
定义变量
该变量只在当前的shell(BASH)
或其子shell(BASH)
下是有效的。
shell
关闭了,变量也就失效了,再打开新shell
时就没有这个变量,需要使用的话还需要重新定义。
环境变量的查看
使用echo
命令
使用echo
命令查看单个环境变量。例如:
> echo $PATH
使用env
命令
使用env
查看所有环境变量。例如
> env
使用set查看
使用set
查看所有本地定义的环境变量。
> set
'!'=0
'#'=0
'$'=15864
'*'=( )
-=569JNRXZghiklms
0=/bin/zsh
'?'=0
@=( )
ARGC=0
...
unset
可以删除指定的环境变量。
常用的环境变量
PATH: 决定了shell将到哪些目录中寻找命令或程序
HOME: 当前用户主目录
HISTSIZE: 历史记录数
LOGNAME: 当前用户的登录名
HOSTNAME: 指主机的名称
SHELL: 当前用户Shell类型
LANGUGE 或 LANG: 语言相关的环境变量,多语言可以修改此环境变量
MAIL: 当前用户的邮件存放目录
PS1: 基本提示符,对于root
用户是#
,对于普通用户
是$
常见环境变量
Linux
HOME
用户家目录MAIL
邮件保存路径LANG
系统语言、语系名称RANDOM
生成一个随机数字PS1
Bash解释器的提示符PATH
定义解释器搜索用户执行命令的路径EDITOR
用户默认的文本编辑器LD_LIBRARY_PATH
库默认加载路径C_INCLUDE_PATH
gcc默认的include目录CPLUS_INCLUDE_PATH
g++默认的include目录LD_LIBRARY_PATH
指定动态链接库的位置so文件,一般在安装软件出错时用到PYTHONPATH
指定python安装包的路径PERL5LIB
指定perl安装包的路径MACHTYPE
用来显示主机类型的GNU标识。一般是主机架构-公司-系统-gnu。PWD
记录当前目录OLDPWD
记录之前的目录。HOSTTYPE
用来显示主机的架构,是i386、i686、还是x86、x64等。HOSTNAME
用来显示主机名HISTFILE
记录history命令记录文件的位置。运行history命令将打印已经运行过的命令列表,即便重启机器后还可以保存以前的命令记录。因为执行过的命令会记录在/root/.bash_history
文件中。可以执行cat /root/.bash_history
查看以前执行过的命令。HISTSIZE
实际上linux并不会针对每次运行命令后就立即将命令记录写入HISTFILE对应的文件中去,而是通过命令缓冲区来记录所有已经运行过的命令,只有在缓冲区满了或者退出Shell时才将缓冲区记录写入HISTFILE对于的文件中。而缓冲区的大小需要通过HISTSIZE去定义。HISTFILESIZE
用来设置HISTFILESIZE文件记录命令的行数。这样可以限制.bash_history文件大小,避免出现文件过大的情况,不好处理。HISTCMD
记录下一条命令在history命令中的编号。FUNCNAME
在用户函数体内部,记录当前函数体的函数名。EUID
记录当前用户的UID。root用户值为0。BASH_VERSION
Bash Shell的版本号BASH
Bash Shell的全路径
常用操作
查看端口占用
lsof
更多参考: https://www.yiibai.com/linux/lsof.html
lsof (list open files)是一个列出当前系统打开文件的工具。
lsof 查看端口占用语法格式:
lsof -i:port
实例:
查看服务器 8000
端口的占用情况:
# lsof -i:8000
COMMAND PID USER FD TYPE DEVICE SIZE/OFF NODE NAME
nodejs 26993 root 10u IPv4 37999514 0t0 TCP *:8000 (LISTEN)
# 可以看到 8000 端口已经被轻 nodejs 服务占用。
lsof -i
需要 root
用户的权限来执行,如下图:
更多 lsof
的命令如下:
- lsof -i:8080:查看
8080
端口占用 - lsof abc.txt:显示开启文件
abc.txt
的进程 - lsof -c abc:显示
abc
进程现在打开的文件 - lsof -c -p 1234:列出进程号为
1234
的进程所打开的文件 - lsof -g gid:显示归属
gid
的进程情况 - lsof +d /usr/local/:显示目录下被进程开启的文件
- lsof +D /usr/local/:同上,但是会搜索目录下的目录,时间较长
- lsof -d 4:显示使用
fd
为4
的进程 - lsof -i -U:显示所有打开的端口和
UNIX domain
文件
netstat
更多参考: https://www.yiibai.com/linux/netstat.html
netstat -tunlp
用于显示 tcp
,udp
的端口和进程等相关情况。
netstat
查看端口占用语法格式:
netstat -tunlp | grep 端口号
-t
(tcp) 仅显示tcp相关选项-u
(udp)仅显示udp相关选项-n
拒绝显示别名,能显示数字的全部转化为数字-l
仅列出在Listen(监听)的服务状态-p
显示建立相关链接的程序名
例如查看 8000
端口的情况,使用以下命令:
# netstat -tunlp | grep 8000
tcp 0 0 0.0.0.0:8000 0.0.0.0:* LISTEN 26993/nodejs
更多命令:
netstat -ntlp // 查看当前所有tcp端口
netstat -ntulp | grep 80 // 查看所有80端口使用情况
netstat -ntulp | grep 3306 // 查看所有3306端口使用情况
firewall-cmd
linux开放指定端口命令
方式一
-
开启防火墙
systemctl start firewalld
-
开放指定端口
firewall-cmd --zone=public --add-port=1935/tcp --permanent
命令含义:
`--zone` #作用域 `--add-port=1935/tcp` #添加端口,格式为:端口/通讯协议 `--permanent` #永久生效,没有此参数重启后失效
-
重启防火墙
firewall-cmd --reload
-
查看端口号
netstat -ntlp
//查看当前所有tcp端口·netstat -ntulp |grep 1935
//查看所有1935端口使用情况·
方式二
# 开放端口:8080
/sbin/iptables -I INPUT -p tcp --dport 8080 -j ACCEPT
方式三
-A INPUT -m state --state NEW -m tcp -p tcp --dport 8080 -j ACCEPT
service iptables restart