简介

本文档主要记录与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)一般是指在操作系统中用来指定操作系统运行环境的一些参数,如:临时文件夹位置系统文件夹位置等。

环境变量 是在操作系统中一个具有特定名字的对象,它包含了一个或者多个应用程序所将使用到的信息。例如WindowsDOS操作系统中的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_profilebashrc和其他公共的环境文件模板将复制到/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变量可分为两类:

  1. 永久的:需要修改配置文件,变量永久生效。
  2. 临时的:使用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类型

LANGUGELANG: 语言相关的环境变量,多语言可以修改此环境变量

MAIL: 当前用户的邮件存放目录

PS1: 基本提示符,对于root用户是#,对于普通用户$

常见环境变量

Linux

  1. HOME 用户家目录
  2. MAIL 邮件保存路径
  3. LANG 系统语言、语系名称
  4. RANDOM 生成一个随机数字
  5. PS1 Bash解释器的提示符
  6. PATH 定义解释器搜索用户执行命令的路径
  7. EDITOR 用户默认的文本编辑器
  8. LD_LIBRARY_PATH 库默认加载路径
  9. C_INCLUDE_PATH gcc默认的include目录
  10. CPLUS_INCLUDE_PATH g++默认的include目录
  11. LD_LIBRARY_PATH 指定动态链接库的位置so文件,一般在安装软件出错时用到
  12. PYTHONPATH 指定python安装包的路径
  13. PERL5LIB 指定perl安装包的路径
  14. MACHTYPE 用来显示主机类型的GNU标识。一般是主机架构-公司-系统-gnu。
  15. PWD 记录当前目录
  16. OLDPWD 记录之前的目录。
  17. HOSTTYPE 用来显示主机的架构,是i386、i686、还是x86、x64等。
  18. HOSTNAME 用来显示主机名
  19. HISTFILE 记录history命令记录文件的位置。运行history命令将打印已经运行过的命令列表,即便重启机器后还可以保存以前的命令记录。因为执行过的命令会记录在/root/.bash_history文件中。可以执行 cat /root/.bash_history 查看以前执行过的命令。
  20. HISTSIZE 实际上linux并不会针对每次运行命令后就立即将命令记录写入HISTFILE对应的文件中去,而是通过命令缓冲区来记录所有已经运行过的命令,只有在缓冲区满了或者退出Shell时才将缓冲区记录写入HISTFILE对于的文件中。而缓冲区的大小需要通过HISTSIZE去定义。
  21. HISTFILESIZE 用来设置HISTFILESIZE文件记录命令的行数。这样可以限制.bash_history文件大小,避免出现文件过大的情况,不好处理。
  22. HISTCMD 记录下一条命令在history命令中的编号。
  23. FUNCNAME 在用户函数体内部,记录当前函数体的函数名。
  24. EUID 记录当前用户的UID。root用户值为0。
  25. BASH_VERSION Bash Shell的版本号
  26. BASH Bash Shell的全路径

常用操作

查看端口占用

  • lsof : (list open files)是一个列出当前系统打开文件的工具。
  • netstat : 用于显示 tcpudp 的端口和进程等相关情况。

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 的命令如下:

  • 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:显示使用fd4的进程
  • lsof -i -U:显示所有打开的端口和UNIX domain文件

netstat

更多参考: https://www.yiibai.com/linux/netstat.html

netstat -tunlp 用于显示 tcpudp 的端口和进程等相关情况。

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开放指定端口命令

方式一

  1. 开启防火墙

    systemctl start firewalld

  2. 开放指定端口

    firewall-cmd --zone=public --add-port=1935/tcp --permanent

    命令含义:

    `--zone` #作用域 `--add-port=1935/tcp` #添加端口,格式为:端口/通讯协议 `--permanent` #永久生效,没有此参数重启后失效
  3. 重启防火墙

    firewall-cmd --reload

  4. 查看端口号

    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

MAC常用操作