Linux系统常见问题集

yum install 没有已启用的仓库。

使用 apt-get install

apt-get install ipset-devel 失败

ipset-devel 不支持ubuntu

ip

ifconfig -a

查看端口是否开启

netstat -an | grep 1443

查看开启的端口

netstat -tulpn

切换Gnome

startx
systemctl set-default graphical.target ##开机启动图形

更改命令行分辨率

1
2
3
vi /etc/default/grub
vga=794
grub2-mkconfig -o /boot/grub2/grub.cfg

开放端口

sbin/iptables -I INPUT -p tcp —dport 8000 -j ACCEPT

export PATH=$PATH:/opt/software/node-v8.9.3-linux-x64/bin/node

升级gcc

1
2
3
4
5
6
7
8
9
10
11
12
sudo yum -y update
sudo yum -y install bzip2 wget gcc gcc-c++ gmp-devel mpfr-devel libmpc-devel
gcc --version
wget http://mirrors-usa.go-parts.com/gcc/releases/gcc-8.2.0/gcc-8.2.0.tar.gz
tar zxf gcc-8.2.0.tar.gz
mkdir gcc-8.2.0-build
cd gcc-8.2.0-build
../gcc-8.2.0/configure --enable-languages=c,c++ --disable-multilib
make -j$(nproc)
sudo make install
gcc --version
//参考地址:https://medium.com/@bipul.k.kuri/install-latest-gcc-on-centos-linux-release-7-6-a704a11d943d

设置环境变量

临时环境变量

命令行下输入: export PATH=$PATH:/home/hikari/directory
这种方法设置的环境变量在重启后失效

环境变量持久化

vi /etc/profile

1
2
export PATH=/usr/local/bin:$PATH
export LD_LIBRARY_PATH=/usr/local/lib64:$LD_LIBRARY_PATH

source /etc/profile
这种方法设置的环境变量在系统发行版本升级时重置

更好的方法

在/etc/profile.d目录下创建.sh文件,在文件内添加环境变量
source /etc/profile

个人用户环境变量目录

~/.bashrc

查看安装包

which
locate
rpm -ql
whereis
find

安装cmake 3.10

https://blog.csdn.net/beijiafei/article/details/82951459

安装python3

https://www.cnblogs.com/JahanGu/p/7452527.html
先决条件

1
2
3
sudo apt-get install build-essential checkinstall
sudo apt-get install libreadline-gplv2-dev libncursesw5-dev libssl-dev \
libsqlite3-dev tk-dev libgdbm-dev libc6-dev libbz2-dev

centos7更改控制台分辨率

cd /etc/default
vi grub
在 rhgb quite后添加 : vga=
VGA Resolution and Color Depth reference Chart:
Depth 800×600 1024×768 1152×864 1280×1024 1600×1200
8 bit vga=771 vga=773 vga=353 vga=775 vga=796
16 bit vga=788 vga=791 vga=355 vga=794 vga=798
24 bit vga=789 vga=792 vga=795 vga=799

进程管理 ps用法

https://www.lifewire.com/uses-of-linux-ps-command-4058715

linux中的ps进程管理命令

ps 命令通常和grep或more 或less命令结合使用。用来对ps冗长的输出进行过滤。

怎么使用ps命令

ps命令会显示以下信息:

- PID:进程pid
- TTY:终端类型(terminal type)
- Time:
- Command: 

要显示所有运行进程可以使用以下命令

1
2
3
4
5
ps -A

ps -e
```
排除session leaders的进程

ps -d

1
2
session leader :若进程A开启了进程B,那A就是B的session leader,ps -d 会显示B的进程,但不会显示A的进程。  
如果你只想显示session leaders 的进程,可用下面的命令:

ps -d -N

1
2
3
-N的意思是选择剩余的进程,所有‘ps -e -N’或‘ps -A -N’不会显示任何进程。  

如果你只想显示本终端运行的进程,命令如下:

ps T

1
2
3
4
5
6
7
8
9
10

根据进程pid显示指定进程: ps -p <pid>
根据进程command显示指定进程: ps -C <command>
根据组名显示进程: ps -G "groupname"
根据组号显示进程: ps -g <groupid>
根据用户名显示进程: ps U "hikari"


### 显示格式
命令

ps -ef //-e:shows all, -f shows full details

1
显示进程的细节,包括:

User ID
PID
PPID : 父进程
C :子进程个数
STime :进程的start time
TTY
Time :进程执行时间
Command :进程执行的命令

1
命令: ps -eF 显示更为完整的细节,除了上述细节,还包括:

SZ :进程大小
RSS: 实际内存
PSR:关联处理器

1
2
#### 根据指定格式显示
例:

ps -e —format=”uid uname cmd time”

1
可选参数:

cmd: Executable name
pcpu: CPU utilisation
flags: Flags
pgrp: Process group id
cutime: Cumulative user time
cstime: Cumulative system time
utime: User time
pid: Process ID
ppid: Parent process ID
size: Size
uid: User ID
user: User Name

1
#### 进程排序

ps -ef —sort user,pid

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20

### 结合grep,less,more
实现翻页效果:ps -ef | more 或 ps -ef | less
过滤: ps -ef | grep chrome


## 1>&2 和 &>filename
shell中有三种文件描述符:分别是0、 1、 2。
0:stdin(标准输入)
1:stdout(标准输出)
2:stderr(标准错误)
1>&2:将标准输出重定位到标准输出中。
&是一个描述符,若1>2,1会被当做一个普通文件,而不是标准输出。
参考来源:https://www.jb51.net/article/64183.htm

## centos安装cmake
https://www.laofuxi.com/1036.html

## 安装pygobject
参考:https://stackoverflow.com/questions/22100213/package-cairo-was-not-found-in-the-pkg-config-search-path-node-j-s-install-canv

1
2
3
4
5
6
7
8
9

## 自启动/关闭自启
```sh
systemctl enable monit
systemctl restart monit


systemctl stop monit
systemctl disable monit
1
systemctl --type=service

Linux 命令

https://www.runoob.com/linux/linux-command-manual.html

Linux 和SVN

1.在Windows上通过SVN update确认地址,拷贝
2.在linux上: svn checkout svn地址
3.输入用户名和密码
4.下载

用户和组

用户列表文件:/etc/passwd
用户组列表文件:/etc/group

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
----------------
#添加用户:-m为将/etc/skel目录下文件拷贝到用户目录
useradd -m hikari
passwd hikari

-----------------
##用户账户修改:usermod
##用户改名
usermod -l hikari hiakri2
##锁定用户,无法登陆
usermod -L test
## 解锁账户
usermod -U test
## 更改密码
usermod -p test
-----------------
#删除用户:-r 为删除用户目录
userdel -r hikari
-----------------

-----------------
## 添加组
groupadd shared
## 将用户添加到该组
usermod -G hikari shared
## 修改组
###修改zuming
groupmod -n sharing shared

查看系统中所有用户:

1
cat /etc/passwd | sed 's/:.*//g'

查看可登陆系统的用户

1
cat /etc/passwd/ | grep -v nologin | sed 's/:.*//g'

查看用户操作:w命令(需要root权限)
查看某一用户:w 用户名
查看登录用户:who
查看用户登录历史记录:last
切换用户: su username
查看用户所属组; groups username
查看当前用户所属组: group

systemctl 命令

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
systemctl list-units            		##列出当前系统服务的状态

systemctl list-unit-files       ##列出服务的开机状态

systemctl status sshd           ##查看指定服务的状态

systemctl stop sshd             ##关闭指定服务

systemctl start sshd            ##开启指定服务

systemctl restart sshd          ##从新启动服务

systemctl enable sshd           ##设定指定服务开机开启

systemctl disable sshd          ##设定指定服务开机关闭

systemctl reload sshd           ##使指定服务从新加载配置

systemctl list-dependencies sshd    ##查看指定服务的倚赖关系

systemctl mask  sshd            ##冻结指定服务

systemctl unmask sshd           ##启用服务

systemctl set-default multi-user.target ##开机不开启图形

systemctl set-default graphical.target  ##开机启动图形

tcpdump

前置条件

ifconfig找到要监听的网络接口,如ens33。
该命令可以找到ens33下所有的网络包

1
tcpdump -i ens33

接下来的操作是添加更多选项用于筛选网络包。
需要注意的是在不同的网络接口下本机的地址是不同的,详细请通过ifconfig查看

监听指定主机的数据包

以下hostname均需要替换为实际主机名,可以是IP地址或域名

  1. 监听主机

    1
    tcpdump -i ens33 host hostname
  2. 监听主机间通信

    1
    tcpdump -i ens33 host hostname1 and hostname2
  3. 监听主机间的ip通信,但排除hostname2

    1
    +tcpdump -i ens33 ip host hostname1 and not hostname2
  4. 监听主机发出的数据包

    1
    tcpdump -i ens33 src host hostname
  5. 监听主机接收到的数据包

    1
    tcpdump -i ens33 dis host hostname

监听指定端口的数据包

  1. 获取主机从端口2812接收或发生的包

    1
    tcpdump -i ens33 tcp port 2812 and host hostname
  2. 获取dns端口53获取的数据包

    1
    tcpdump -i ens33 udp port 53

tcpdump 和 wireshark

1
tcpdump tcp -i eth1 -t -s 0 -c 100 and dst port ! 22 and src net 192.168.1.0/24 -w ./target.cap

(1)tcp: ip icmp arp rarp 和 tcp、udp、icmp这些选项等都要放到第一个参数的位置,用来过滤数据报的类型
(2)-i eth1 : 只抓经过接口eth1的包
(3)-t : 不显示时间戳
(4)-s 0 : 抓取数据包时默认抓取长度为68字节。加上-S 0 后可以抓到完整的数据包
(5)-c 100 : 只抓取100个数据包
(6)dst port ! 22 : 不抓取目标端口是22的数据包
(7)src net 192.168.1.0/24 : 数据包的源网络地址为192.168.1.0/24
(8)-w ./target.cap : 保存成cap文件,方便用wireshark分析

网卡设置

vi /etc/sysconfig/network-scripts/ifcfg-eth0

ssh

利用ssh传输文件
在linux下一般用scp这个命令来通过ssh传输文件。

1、从服务器上下载文件
scp username@servername:/path/filename /var/www/local_dir(本地目录)

例如scp root@192.168.0.101:/var/www/test.txt 把192.168.0.101上的/var/www/test.txt 的文件下载到/var/www/local_dir(本地目录)

2、上传本地文件到服务器
scp /path/filename username@servername:/path

例如scp /var/www/test.php root@192.168.0.101:/var/www/ 把本机/var/www/目录下的test.php文件上传到192.168.0.101这台服务器上的/var/www/目录中

3、从服务器下载整个目录
scp -r username@servername:/var/www/remote_dir/(远程目录) /var/www/local_dir(本地目录)

例如:scp -r root@192.168.0.101:/var/www/test /var/www/

4、上传目录到服务器
scp -r local_dir username@servername:remote_dir
例如:scp -r test root@192.168.0.101:/var/www/ 把当前目录下的test目录上传到服务器的/var/www/ 目录