Linux

基础

linux中设置环境变量和gcc/g++的include路径

1. 对所有用户有效在/etc/profile增加以下内容

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
#在PATH中找到可执行文件程序的路径。
export PATH =$PATH:$HOME/bin

#gcc找到头文件的路径
C_INCLUDE_PATH=/usr/include/libxml2:/MyLib
export C_INCLUDE_PATH

#g++找到头文件的路径
CPLUS_INCLUDE_PATH=$CPLUS_INCLUDE_PATH:/usr/include/libxml2:/MyLib
export CPLUS_INCLUDE_PATH

#找到动态链接库的路径
LD_LIBRARY_PATH=$LD_LIBRARY_PATH:/MyLib
export LD_LIBRARY_PATH

#找到静态库的路径
LIBRARY_PATH=$LIBRARY_PATH:/MyLib
export LIBRARY_PATH

2. 保存后在终端中输入下面的语句,以重启配置:

1
2
3
4
source /etc/profile
echo $PATH
echo $C_INCLUDE_PATH
echo $CPLUS_INCLUDE_PATH

Linux内核tty设备

https://blog.csdn.net/huchuan1985/article/details/46699037

image

1. 控制台

系统控制台/dev/console

/dev/console是系统控制台,是与操作系统交互的设备。

当前控制台: /dev/tty

这是应用程序中的概念,如果当前进程有控制终端(Controlling Terminal),那么/dev/tty就是当前进程控制台的设备文件。

/dev/tty会映射到当前设备(使用命令”tty”可以查看它具体对应哪个实际物理控制台设备)

如果在控制台界面下(即字符界面下)那么dev/tty就是映射到dev/tty1-6之间的一个(取决于你当前的控制台号)

但是如果你现在是在图形界面(Xwindows),那么你会发现现在的/dev/tty映射到的是/dev/pts的伪终端上。

1
2
可以输入命令 "tty",将显示当前映射终端如:/dev/tty1或者/dev/pts/0等。也可以使用命令"ps -ax"来查看其他进程与哪个控制终端相连。
在当前终端中输入 echo "tekkaman" > /dev/tty ,都会直接显示在当前的终端中。

虚拟控制台 /dev/ttyn

/dev/ttyn是进程虚拟控制台,他们共享同一个真实的物理控制台。

2. 伪终端pty(pseudo-tty)

伪终端(Pseudo Terminal)是终端的发展,为满足现在需求(比如网络登陆、xwindow窗口的管理)。它是成对出现的逻辑终端设备(即master和slave设备,对master的操作会反映到slave上)。它多用于模拟终端程序,是远程登陆(telnet、ssh、xterm等)后创建的控制台设备。

我们在X Window下打开的终端或使用telnet 或ssh等方式登录Linux主机,此时均通过pty设备。例如,如果某人在网上使用telnet程序连接到你的计算机上,则telnet程序就可能会打开/dev/ptmx设备获取一个fd。此时一个getty程序就应该运行在对应的/dev/pts/*上。当telnet从远端获取了一个字符时,该字符就会通过ptmx、pts/传递给 getty程序,而getty程序就会通过pts/、ptmx和telnet程序往网络上返回”login:”字符串信息。

1
telnet<--->/dev/ptmx(master)<--->pts/*(slave)<--->getty

3. 串口终端(/dev/ttySn)

串行端口终端(Serial Port Terminal)是使用计算机串行端口连接的终端设备。计算机把每个串行端口都看作是一个字符设备。有段时间串行端口设备通常被称为终端设备,那时它的最大用途就是用来连接终端,所以这些串行端口所对应的设备名称是/dev/tts/0(或/dev/ttyS0)、/dev/tts/1(或/dev /ttyS1)等,设备号分别是(4,0)、(4,1)等

Linux各个目录的作用及内容

目录一 目录二 描述
/bin 二进制可执行命令
/boot 引导加载程序文件
/dev 设备文件,包括终端设备、USB或连接到系统的任何设备
/etc 系统管理和配置文件
/etc/rc.d 启动的配置文件和脚本
/home 用户主目录的基点,比如用户user的主目录就是/home/user,可以用~user表示
/lib 标准程序设计库,又叫动态链接共享库,作用类似windows里的.dll文件
/sbin 超级管理命令,这里存放的是系统二进制文件
/tmp 公共的临时文件存储点
/root 系统管理员的主目录
/media 可移动媒体设备,挂载CD-ROM的/media/cdrom,挂载软盘驱动器的/media/floppy
/mnt 系统提供这个目录是让用户临时挂载其他的文件系统
/lost+found 这个目录平时是空的,系统非正常关机而留下”无家可归”的文件(windows下叫什么.chk)
/proc 虚拟的目录,进程信息。可直接访问这个目录来获取系统信息。
/var 某些大文件的溢出区,比方说各种服务的日志文件
/usr 最庞大的目录,要用到的应用程序和文件几乎都在这个目录,其中包含:
/usr/x11R6 存放x window的目录
/usr/bin 众多的应用程序
/usr/sbin 超级用户的一些管理程序
/usr/doc linux文档
/usr/include linux下开发和编译应用程序所需要的头文件
/usr/lib 常用的动态链接库和软件包的配置文件
/usr/man 帮助文档
/usr/src 源代码,linux内核的源代码就放在/usr/src/linux里
/usr/local/bin 本地增加的命令,包含了从源安装的用户程序。
/usr/local/lib 本地增加的库根文件系统

150个常用Linux命令精简合集

https://www.toutiao.com/a6485857716316144141/

●线上查询及帮助命令(1 个)

1
2
3
help

如:mkdir --help

●文件和目录操作命令(12 个)

1
ls tree pwd mkdir rmdir cd touch cp mv rm ln find

●查看文件及内容处理命令(21 个)

1
cat tac more less head tail cut split paste sort uniq wc iconv dos2unix file diff vimd ff chattr lsattr rev grep

●文件压缩及解压缩命令(4 个)

1
tar unzip gzip zip

●信息显示命令(12 个)

1
uname hostname dmesg uptime file stat du df top free date cal

●搜索文件命令(4 个)

1
which find whereis locate

●用户管理命令(10 个)

1
useradd usermod userdel groupadd passwd chage id su visudo sudo

●基础网络操作命令(10 个)

1
telnet ssh scp wget ping route ifconfig ifup ifdown netstat

●深入网络操作命令(6 个)

1
lsof route mail mutt nslookup dig

●有关磁盘文件系统的命令(8 个)

1
mount umount df du fsck dd dumpe2fs dump

●关机和查看系统信息的命令(3个)

1
shutdown halt init

●系统管理相关命令(8个)

1
uptime top free vmstat mpstat iostat sar chkconfig

●系统安全相关命令(10 个)

1
chmod chown chgrp chage passwd su sudo umask chattr lsattr

●查看系统用户登陆信息的命令(7 个)

1
whoami who w last lastlog users finger

●查看硬件信息相关命令(8 个)

1
ifconfig free fdisk ethtool mii-tool dmidecode dmesg lspci

●其它(19 个)

1
echo printf rpm yum watch alias unalias date clear history eject time nohup nc xargs exec export unset type

●系统性能监视高级命令(12 个)

内存:

1
top free vmstat mpstat iostat sar

CPU:

1
top vmstat mpstat iostat sar

I/O:

1
vmstat mpstat iostat sar

进程:

1
ipcs ipcrm lsof strace lstrace

负载:

1
uptime mount umount df du fsck dd dumpe2fs dump

●关机和查看系统信息的命令(3 个)

1
shutdown halt init

●系统管理相关命令(8 个)

1
uptime top free vmstat mpstat iostat sar chkconfig

●系统安全相关命令(10 个)

1
chmod chown chgrp chage passwd su sudo umask chattr

Linux基本命令

1. 查看CentOS系统配置情况命令

1
2
3
4
查物理CPU个数 
grep "physical id" /proc/cpuinfo|sort -u|wc -l
查逻辑CPU个数
cat /proc/cpuinfo |grep "processor"|sort -u|wc -l

系统

1
2
3
4
5
6
7
8
# uname -a               # 查看内核/操作系统/CPU信息
# head -n 1 /etc/issue # 查看操作系统版本
# cat /proc/cpuinfo # 查看CPU信息
# hostname # 查看计算机名
# lspci -tv # 列出所有PCI设备
# lsusb -tv # 列出所有USB设备
# lsmod # 列出加载的内核模块
# env # 查看环境变量

资源

1
2
3
4
5
6
7
# free -m                # 查看内存使用量和交换区使用量
# df -h # 查看各分区使用情况
# du -sh <目录名> # 查看指定目录的大小
# grep MemTotal /proc/meminfo # 查看内存总量
# grep MemFree /proc/meminfo # 查看空闲内存量
# uptime # 查看系统运行时间、用户数、负载
# cat /proc/loadavg # 查看系统负载

磁盘和分区

1
2
3
4
5
# mount | column -t      # 查看挂接的分区状态
# fdisk -l # 查看所有分区
# swapon -s # 查看所有交换分区
# hdparm -i /dev/hda # 查看磁盘参数(仅适用于IDE设备)
# dmesg | grep IDE # 查看启动时IDE设备检测状况

网络

1
2
3
4
5
6
# ifconfig               # 查看所有网络接口的属性
# iptables -L # 查看防火墙设置
# route -n # 查看路由表
# netstat -lntp # 查看所有监听端口
# netstat -antp # 查看所有已经建立的连接
# netstat -s # 查看网络统计信息

进程

1
2
# ps -ef                 # 查看所有进程
# top # 实时显示进程状态

用户

1
2
3
4
5
6
# w                      # 查看活动用户
# id <用户名> # 查看指定用户信息
# last # 查看用户登录日志
# cut -d: -f1 /etc/passwd # 查看系统所有用户
# cut -d: -f1 /etc/group # 查看系统所有组
# crontab -l # 查看当前用户的计划任务

服务

1
2
# chkconfig --list       # 列出所有系统服务
# chkconfig --list | grep on # 列出所有启动的系统服务

程序

1
2
3
4
5
6
7
8
9
10
# rpm -qa                # 查看所有安装的软件包

Linux下cp -rf总是提示覆盖的解决办法

是别名引起的问题

修改~/.bashrc,在"alias cp='cp -i'"前添加#号注释后即可
让命令生效
source ~/.bashrc
或重新登录

2. linux 启动、重启、关机时,服务自动启动、自动关闭及 chkconfig 命令相关问题

1
2
3
4
5
6
7
8
9
10
11
--level<等级代号>  指定读系统服务要在哪一个执行等级中开启或关毕。

等级0表示:表示关机
等级1表示:单用户模式
等级2表示:无网络连接的多用户命令行模式
等级3表示:有网络连接的多用户命令行模式
等级4表示:不可用
等级5表示:带图形界面的多用户模式
等级6表示:重新启动

如果这样设置:chkconfig --level 2345 servername on

3. Linux使用netstat命令查看并发连接数

使用以下命令即可分组查看各种连接状态

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
netstat -n | awk '/^tcp/ {++S[$NF]} END {for(a in S) print a, S[a]}'

返回结果示例:
LAST_ACK 5 (正在等待处理的请求数)
SYN_RECV 30
ESTABLISHED 1597 (正常数据传输状态)
FIN_WAIT1 51
FIN_WAIT2 504
TIME_WAIT 1057 (处理完毕,等待超时结束的请求数)

状态:描述
CLOSED:无连接是活动的或正在进行
LISTEN:服务器在等待进入呼叫
SYN_RECV:一个连接请求已经到达,等待确认
SYN_SENT:应用已经开始,打开一个连接
ESTABLISHED:正常数据传输状态
FIN_WAIT1:应用说它已经完成
FIN_WAIT2:另一边已同意释放
ITMED_WAIT:等待所有分组死掉
CLOSING:两边同时尝试关闭
TIME_WAIT:另一边已初始化一个释放
LAST_ACK:等待所有分组死掉

仅仅只是想查看并发连接数,可以简化一下命令,即:

1
netstat -nat|grep ESTABLISHED|wc -l

4. 改变文件属性与权限

chgrp : 改变档案所属群组

1
chgrp users install.log

chown : 改变档案拥有者

1
chown users install.log

chmod : 改变档案的权限

1
chmod 777 install.log

5. 查看系统日志

1
tail -f /var/log/messages

CentOS添加环境变量

方法一:直接运行命令export PATH=$PATH:/usr/local/webserver/php/bin 和 export PATH=$PATH:/usr/local/webserver/mysql/bin

使用这种方法,只会对当前会话有效,也就是说每当登出或注销系统以后,PATH 设置就会失效,只是临时生效。

方法二:执行vi ~/.bash_profile修改文件中PATH一行,将/usr/local/webserver/php/bin 和 /usr/local/webserver/mysql/bin 加入到PATH=$PATH:$HOME/bin一行之后

这种方法只对当前登录用户生效

方法三:修改/etc/profile文件使其永久性生效,并对所有系统用户生效,在文件末尾加上如下两行代码

1
2
PATH=$PATH:/usr/local/webserver/php/bin:/usr/local/webserver/mysql/bin
export PATH

最后:执行 命令source /etc/profile或 执行点命令 ./profile使其修改生效,执行完可通过echo $PATH命令查看是否添加成功。

pkg-config

1. 定义

pkg-config是一个linux下的命令,用于获得某一个库/模块的所有编译相关的信息

例子:

1
pkg-config opencv –libs –cflags

结果:

1
2
3
4
5
-I/usr/include/opencv

/usr/lib/x86_64-linux-gnu/libopencv_calib3d.so /usr/lib/x86_64-linux-gnu/libopencv_contrib.so /usr/lib/x86_64-linux-gnu/libopencv_core.so /usr/lib/x86_64-linux-gnu/libopencv_features2d.so /usr/lib/x86_64-linux-gnu/libopencv_flann.so /usr/lib/x86_64-linux-gnu/libopencv_gpu.so /usr/lib/x86_64-linux-gnu/libopencv_highgui.so /usr/lib/x86_64-linux-gnu/libopencv_imgproc.so /usr/lib/x86_64-linux-gnu/libopencv_legacy.so /usr/lib/x86_64-linux-gnu/libopencv_ml.so /usr/lib/x86_64-linux-gnu/libopencv_objdetect.so /usr/lib/x86_64-linux-gnu/libopencv_ocl.so /usr/lib/x86_64-linux-gnu/libopencv_photo.so /usr/lib/x86_64-linux-gnu/libopencv_stitching.so /usr/lib/x86_64-linux-gnu/libopencv_superres.so /usr/lib/x86_64-linux-gnu/libopencv_ts.so /usr/lib/x86_64-linux-gnu/libopencv_video.so /usr/lib/x86_64-linux-gnu/libopencv_videostab.so

-lopencv_calib3d -lopencv_contrib -lopencv_core -lopencv_features2d -lopencv_flann -lopencv_gpu -lopencv_highgui -lopencv_imgproc -lopencv_legacy -lopencv_ml -lopencv_objdetect -lopencv_ocl -lopencv_photo -lopencv_stitching -lopencv_superres -lopencv_ts -lopencv_video -lopencv_videostab

pkg-config给出了opencv的头文件和库的所有信息!

所有用opencv的其他程序,在编译时,只需要写”pkg-config opencv –libs –cflags”,而不需要自己去找opencv的头文件在哪里,要链接的库在哪里!省时省力!

如果你写了一个库,不管是静态的还是动态的,要提供给第三方使用,那除了给人家库/头文件,最好也写一个pc文件,这样别人使用就方便很多,不用自己再手动写依赖了你哪些库,只需要敲一个”pkg-config [YOUR_LIB] –libs –cflags”

2. pkg-config的信息从哪里来

有2种路径:

第一种:取系统的/usr/lib下的所有*.pc文件。
第二种:PKG_CONFIG_PATH环境变量所指向的路径下的所有*.pc文件。

3. pc文件

比如opencv.pc

1
2
3
4
5
6
7
8
9
10
11
12
# Package Information for pkg-config
prefix=/usr
exec_prefix=${prefix}
libdir=${prefix}/lib/x86_64-linux-gnu
includedir_old=${prefix}/include/opencv
includedir_new=${prefix}/include

Name: OpenCV
Description: Open Source Computer Vision Library
Version: 2.4.8
Libs: -L${libdir} ${exec_prefix}/lib/x86_64-linux-gnu/libopencv_calib3d.so -lopencv_calib3d ${exec_prefix}/lib/x86_64-linux-gnu/libopencv_contrib.so -lopencv_contrib ${exec_prefix}/lib/x86_64-linux-gnu/libopencv_core.so -lopencv_core ${exec_prefix}/lib/x86_64-linux-gnu/libopencv_features2d.so -lopencv_features2d ${exec_prefix}/lib/x86_64-linux-gnu/libopencv_flann.so -lopencv_flann ${exec_prefix}/lib/x86_64-linux-gnu/libopencv_gpu.so -lopencv_gpu ${exec_prefix}/lib/x86_64-linux-gnu/libopencv_highgui.so -lopencv_highgui ${exec_prefix}/lib/x86_64-linux-gnu/libopencv_imgproc.so -lopencv_imgproc ${exec_prefix}/lib/x86_64-linux-gnu/libopencv_legacy.so -lopencv_legacy ${exec_prefix}/lib/x86_64-linux-gnu/libopencv_ml.so -lopencv_ml ${exec_prefix}/lib/x86_64-linux-gnu/libopencv_objdetect.so -lopencv_objdetect ${exec_prefix}/lib/x86_64-linux-gnu/libopencv_ocl.so -lopencv_ocl ${exec_prefix}/lib/x86_64-linux-gnu/libopencv_photo.so -lopencv_photo ${exec_prefix}/lib/x86_64-linux-gnu/libopencv_stitching.so -lopencv_stitching ${exec_prefix}/lib/x86_64-linux-gnu/libopencv_superres.so -lopencv_superres ${exec_prefix}/lib/x86_64-linux-gnu/libopencv_ts.so -lopencv_ts ${exec_prefix}/lib/x86_64-linux-gnu/libopencv_video.so -lopencv_video ${exec_prefix}/lib/x86_64-linux-gnu/libopencv_videostab.so -lopencv_videostab
Cflags: -I${includedir_old} -I${includedir_new}

清空日志文件,防止删了后,硬盘空间没有释放

1. 查看已删除,并没有释放硬盘空间的文件

1
lsof | grep delete

2. 清空日志

1
echo "" >/tmp/acess.log

3. 查日志并高亮显示关键字findFilmkey

1
tail -f interstellar.out | perl -pe 's/(findFilmkey)/\e[1;31m$1\e[0m/g'

4. 显示指定行数的日志内容

1
cat -n interstellar.new |tail -n +1960370|head -n 20

5. 列出关键字搜索到的日志内容

1
cat -n interstellar.new |grep -a "findFilmkey"

6. 分割日志为500m大小

1
split -b 500m interstellar.out

清理内存缓存脚本

1
sync && echo 3 > /proc/sys/vm/drop_caches

使用 vmstat 命令可以得到关于进程、内存、内存分页、堵塞IO、traps及CPU活动的信息

CentOS修改系统时间

1
date -s '2015-11-03 3:57:00'

同步系统时间

1
ntpdate edu.ntp.org.cn

修改root密码

1
passwd

显示所有运行中的进程

1
ps aux | less

当前连接数

1
netstat -an | grep ESTABLISHED | wc -l

查看全部文件内容(特别是在数据库集群预热新机器时,可以 cat 一下mysql的数据文件,使内存缓存数据)

1
cat

查看部分文件内容,从头一页一页手动翻页

1
less

文件中搜索内容

1
grep

比如:从error.*的所有文件中,查询带有postCDN字符串的内容行

1
grep "postCDN" error.*

搜索文件

1
find

拷贝文件

1
cp

拷贝目录和文件

1
cp -r

移动重命名文件

1
mv

删除文件

1
rm

删除目录和文件

1
rm -r

创建软链接

1
ln -s

创建空文件

1
touch

编辑文件

1
vim

键入i,就是insert

Esc,就是退出编辑模式

:wq,就是保存并退出

临时修改ip命令

1
ifconfig eth0 192.168.201.7

通过iptables屏蔽某些或者某个IP地址达到屏蔽效果

1
iptables -I INPUT -s 192.168.38.174 -j DROP //屏蔽单个ip

iptables 限制ip访问

通过iptables限制27017端口的访问(只允许192.168.1.201、192.168.1.202、192.168.1.203),其他ip都禁止访问

1
2
3
4
-I INPUT -p tcp --dport 27017 -j DROP
-I INPUT -s 27.16.159.121 -p tcp --dport 27017 -j ACCEPT
-I INPUT -s 192.168.1.202 -p tcp --dport 27017 -j ACCEPT
-I INPUT -s 192.168.1.203 -p tcp --dport 27017 -j ACCEPT

注意命令的顺序不能反了。

切换为root用户

1
su - root

查看cpu信息详情

1
cat /proc/cpuinfo

查看磁盘还剩多少空间

1
df -h

查看指定路径的大小

1
du -sh /usr/local/tomcat7

配置防火墙

1
2
3
vi /etc/sysconfig/iptables 
-A INPUT -m state –state NEW -m tcp -p tcp –dport 80 -j ACCEPT(允许80端口通过防火墙)
-A INPUT -m state –state NEW -m tcp -p tcp –dport 3306 -j ACCEPT(允许3306端口通过防火墙)

特别提示:很多网友把这两条规则添加到防火墙配置的最后一行,导致防火墙启动失败,正确的应该是添加到默认的22端口这条规则的下面

1
/etc/init.d/iptables restart

或者

1
service iptables restart

CentOS7是

1
systemctl restart iptables.service

最后重启防火墙使配置生效

如何杀死linux-zombie僵尸进程

1
2
ps -A -o stat,ppid,pid,cmd |grep -e "^[Zz]"    //先查看具体进程:
kill -9 pid号         //杀死z进程(这些动作是比较危险的,希望在真正的服务器上面慎用!!!)

xshell 上传文件报错

1
2
3
4
5
6
7
8
-bash: rz: command not found

安装lrzsz即可:
# yum -y install lrzsz

运行命令rz,即是接收文件,xshell就会弹出文件选择对话框,选好文件之后关闭对话框,文件就会上传到linux里的当前目录

运行命令sz file 就是发文件到windows上(保存的目录是可以配置) 比ftp命令方便多了,而且服务器不用再开FTP服务了

查网络端口

1
netstat -tnlp

查看端口链接数

1
netstat -pnt |grep :80 |wc -l

查看端口是否已经打开:

1
netstat -an

查看端口是被哪个应用程序使用:

1
2
netstat -apn
ps -ef

查本机端口已有的连接:

1
lsof -i:8080

查询端口是否可以连接

1
nc -vvnn 118.244.206.80 27017

添加用户、权限

1
2
3
4
5
6
7
8
useradd -d /usr/john -m john

passwd john

修改 /etc/sudoers 文件,找到下面一行,在root下面添加一行

root ALL=(ALL) ALL
john ALL=(ALL) ALL

一般用户之间或超级用户到一般用户:su john,切回来是:exit

用户管理

1
2
3
4
5
6
7
8
9
10
11
12
13
useradd h5

passwd h5

id h5

把movie目录的权限给h5用户

chown h5 movie

切换到h5用户

su h5

递归设置目录权限

1
chmod 777 . -R

查询当前目录文件数量

1
find . -type f |wc -l

查询当前目录210天前的文件

1
find . -mtime +180 -type f

删除210天前的全部文件(!!!小心小心!!!!!)

1
find . -mtime +180 -type f  | xargs rm -rf

常用命令

后台执行sh文件脚本

1
nohup bash send-jenkins.sh &

搜索大文件

1
find ~ -size +100M

两Linux服务器之间CP复制文件

命令:scp filenamecoped Destinationhost:/directory ——scp 要拷贝的文件 目标主机IP:/目录/
eg:将当前目录下的jdk-7u51-linux-x64.rpm拷贝到目标主机5上的/root/目录下

1
scp jdk-7u51-linux-x64.rpm 192.168.201.5:/root/

ssh中文乱码

1
2
3
4
export LC_ALL=zh_CN.GBK
export LANG=zh_CN.GBK
export LC_ALL=zh_CN.UTF-8
export LANG=zh_CN.UTF-8

linux当前字符集会影响tomcat部署系统的字符转码,特别是post时

查看linux当前字符集

1
env

其中LANG=zh_CN.UTF-8表示当前字符集,
如果不是utf-8,请修改字符集,并重启tomcat!!!!

备份目录

1
2
unalias cp
cp -r -f /usr/local/tomcat7/webapps/newspaper-resource-0.0.1-SNAPSHOT/magazine/* /usr/local/backups/resources/magazine

压缩备份目录

1
tar -zcvf /usr/local/backups/webapps/newspaper-server-0.0.1-SNAPSHOT.2014-02-16.tar.gz /usr/local/tomcat7/webapps/newspaper-server-0.0.1-SNAPSHOT

跨服务器迁移目录

1
scp -r /usr/local/tomcat7/webapps/newspaper-server-0.0.1-SNAPSHOT/magazine 192.168.201.3:/usr/local/backups/resources

修改Linux的hostname

通过hostname命令来查看本机的hostname

修改文件/etc/sysconfig/network以下内容

HOSTNAME=hostname

重启network

1
service network restart

查看linux版本

1
2
cat /etc/issue
lsb_release -a

后台运行jar

1
2
3
4
5
nohup java -jar dotado-report-1.0.jar >/dev/null &

有日志的

nohup java -jar dotado-report-1.0.jar >>dotado-report-1.0.out &

解压jar

1
unzip dotado-report-1.0.jar -d dotado-report-1.0

压缩jar

1
jar cvfm0 dotado-report-1.0.jar dotado-report-1.0/META-INF/MANIFEST.MF -C dotado-report-1.0/ .

固定ip

使用下面的命令来验证网络管理器服务的状态:

1
systemctl status NetworkManager.service

运行以下命令来检查受网络管理器管理的网络接口:

1
nmcli dev status 

例如:enp2s0

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
vi /etc/sysconfig/network-scripts/ifcfg-enp2s0

HWADDR="00:E0:4C:ED:FE:3B"
TYPE="Ethernet"
BOOTPROTO="static" #设置网卡获得ip地址的方式,可能的选项为static,dhcp或bootp,分别对应静态指定的 ip地址,通过dhcp协议获得的ip地址,通过bootp协议获得的ip地址
DEFROUTE="yes"
PEERDNS="yes"
PEERROUTES="yes"
IPV4_FAILURE_FATAL="no"
IPV6INIT="yes"
IPV6_AUTOCONF="yes"
IPV6_DEFROUTE="yes"
IPV6_PEERDNS="yes"
IPV6_PEERROUTES="yes"
IPV6_FAILURE_FATAL="no"
NAME="enp2s0"
UUID="8df04a6f-d2e5-4e94-88ce-ab71d8aa8528"
ONBOOT="yes" #系统将在启动时开启该接口
IPADDR=192.168.1.172 #如果设置网卡获得 ip地址的方式为静态指定,此字段就指定了网卡对应的ip地址
NETMASK=255.255.255.0 #网卡对应的网络掩码
NETWORK=192.168.1.0 #网卡对应的网络地址
NM_CONTROLLED=no #表示该接口将通过该配置文件进行设置,而不是通过网络管理器进行管理

最后,重启网络服务

systemctl restart network.service

挂载硬盘的方法

1. 查看磁盘状况

1
fdisk -l

2. 用fdisk 对/dev/sdb 进行分区

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
29
30
fdisk /dev/sdb

Command (m for help): n

Command action

e extended

p primary partition (1-4)

p

Partition number (1-4): 1

First cylinder (1-652, default 1):

Using default value 1

Last cylinder or +size or +sizeM or +sizeK (1-652, default 652):

Using default value 652

Command (m for help): w

The partition table has been altered!


Calling ioctl() to re-read partition table.

Syncing disks.

3. 格式化 /dev/sdb1 分区

1
mkfs -t ext3 /dev/sdb1

4. 创建目录 并将 /dev/sdb1 挂在到该目录下

1
2
mkdir /zewspaper
mount /dev/sdb1 /zewspaper

5. 验证挂载是否成功

1
df -k

6. 设置开机自动挂载

1
2
vi /etc/fstab
/dev/sdb1 /zewspaper ext3 defaults 0 0

LINUX下搭建FTP服务器

1. 检查vsftpd软件是否安装

1
rpm -qa |grep vsftpd

2. 安装

1
yum install vsftpd

3. 启动ftp:

1
service vsftpd start

4. 停止ftp:

1
service vsftpd stop

5. 重启ftp:

1
service vsftpd restart

6. FTP自动启动

1
chkconfig vsftpd on service vsftpd start

7. vsftpd的配置

位于/etc/vsftpd/目录下
限制某些IP访问服务器,只允许某些IP访问

1
listen_address=192.168.0.33

8. 添加FTP本地用户

1
2
3
adduser -d /zewspaper/ftp -g ftp -s /sbin/nologin newspaper

passwd newspaper

9. 将某个目录挂载到FTP服务器下供用户使用

1
2
3
4
5
6
mount --bind /zewspaper/tomcat7/logs /zewspaper/ftp/newspaper-server/tomcat

系统在启动时像mount--bind命令一样装载目录
添加下面的设置到 /etc/fstab

/zewspaper/tomcat7/logs /zewspaper/ftp/newspaper-server/tomcat none rw,bind 0 0

vsftp 登录报错:500 OOPS: cannot change directory:/

1
setsebool -P ftp_home_dir 1

vsftp 登录报错:500 OOPS: vsftpd: cannot locate user specified in ‘ftp_username’:ftp

1
2
3
4
5
6
7
8
9
10
11
12
13
14
vi /etc/vsftpd/vsftpd.conf

找到:

anonymous_enable=YES

修改为:

anonymous_enable=NO

重新启动vsftpd使配置生效

service vsftpd restart
getsebool -a | grep ftp

ftp客户端

1. 自动安装

1
yum install ftp

2. 关闭SELinux方法

1
2
3
4
5
vi /etc/selinux/config

改为

SELINUX=disabled

3. 用lsmod命令查看了系统当前加载的模块,加载ip_nat_ftp,ip_conntrack,ip_conntrack_ftp几个模块

使用modprobe ip_nat_ftp命令将ip_nat_ftp载入

使用modprobe ip_conntrack_ftp命令将ip_conntrack_ftp载入

4. 自动开机加载

修改/etc/sysconfig/iptables-config

改为 IPTABLES_MODULES=”ip_nat_ftp” 即可成功了

linux系统信息神器,dstat

1. 安装

1
yum install dstat

当执行dstat命令时,默认它会收集cpu,disk,net,paging,system等数据,并且每秒收集一次

看一下我们常用的参数

1
2
3
4
5
6
7
8
9
-c, --cpu              enable cpu stats 显示cpu的情况
-d, --disk enable disk stats 显示硬盘的情况
-l, --load enable load stats 显示系统的负载情况
-m, --mem enable memory stats 显示内存的情况
-n, --net enable network stats 显示网络的情况
-p, --proc enable process stats 显示进程的情况
-s, --swap enable swap stats 显示swap的情况
-y, --sys enable system stats 显示系统的情况
--output file write CSV output to file 写到csv文件中

shell脚本.sh文件的格式注意

用notepad++打开.sh文件

视图–显示符号–显示所有符号

编辑–档案格式转换–转换为UNIX格式

linux添加开机自启动脚本

1. 先修改好脚本,使其所有模块都能在任意目录启动时正常执行;

2. 再在/etc/rc.local的末尾添加一行以绝对路径启动脚本的行;

JAVA_HOME环境变量

此文件/etc/profile

在profile文件末尾加入:

1
2
3
export JAVA_HOME=/usr/java/jdk1.7.0_45/
export PATH=$JAVA_HOME/bin:$PATH
export CLASSPATH=.:$JAVA_HOME/lib/dt.jar:$JAVA_HOME/lib/tools.jar

跨服务器拷贝文件或目录的脚本

1. 安装expect工具

1
yum install expect

2. 写脚本

1
2
3
4
5
6
7
8
9
10
11
12
#!/bin/bash
password='123456'
/usr/bin/expect <<-EOF
spawn scp -r /root/test.txt root@192.168.1.123:/root/
set timeout 300
expect "root@192.168.1.123's password:"
set timeout 300
send "$password\r"
set timeout 300
send "exit\r"
expect eof
EOF

centos更改yum源为aliyun

首先备份/etc/yum.repos.d/CentOS-Base.repo

1
mv /etc/yum.repos.d/CentOS-Base.repo /etc/yum.repos.d/CentOS-Base.repo.backup

进入yum源配置文件所在文件夹

1
cd /etc/yum.repos.d/

下载aliyun的yum源配置文件,放入/etc/yum.repos.d/(操作前请做好相应备份)

1
wget http://mirrors.aliyun.com/repo/Centos-6.repo

下载163的yum源配置文件

1
wget http://mirrors.163.com/.help/CentOS6-Base-163.repo

运行yum makecache生成缓存

1
yum makecache

更新系统

1
yum -y update

完全卸载删除gitlab

1、停止gitlab

1
gitlab-ctl stop

2、卸载gitlab(注意这里写的是gitlab-ce)

1
rpm -e gitlab-ce

3、查看gitlab进程

1
ps aux | grep gitlab

4、杀掉第一个进程(就是带有好多………….的进程)

1
kill -9 18777

杀掉后,在ps aux | grep gitlab确认一遍,还有没有gitlab的进程

5、删除所有包含gitlab文件

1
find / -name gitlab | xargs rm -rf

Ubuntu

root远程登陆

1. 设置管理密码

1
2
3
4
sudo passwd root //用sudo修改root帐户
Password: //输入密码
Enter new UNIX password: //提示输入新的root帐户密码
Retype new UNIX password: //再输入一次确认密码

修改成功之后你就可以使用root账号了,可以使用su root 命令切换到root。

2. 使用apt命令安装openssh server

1
sudo apt-get install openssh-server

3. 对 openssh server进行配置

1
sudo vi /etc/ssh/sshd_config

找到PermitRootLogin no一行,改为PermitRootLogin yes

4. 重启 openssh server

1
sudo service ssh restart

5. ubuntu默认防火墙关闭命令:

1
ufw disable

问题汇总

1. 访问外网报错:connect: Network is unreachable 解决方法,这是gw网关

1
route add default gw 192.168.1.1

2. ping: unknown host

修改dns配置

1
/etc/resolv.conf

建议设置Google的公共DNS服务

1
2
3
nameserver 192.168.1.1
nameserver 8.8.8.8
nameserver 8.8.4.4

3. 阿里云基线检测,报 kernel.kptr_restrict 警告

是否启用kptr_restrice,此功能为安全性功能,用于屏蔽内核指针。

0:该特性被完全禁止;

1:那些使用”%pk”打印出来的内核指针被隐藏(会以一长串0替换掉),除非用户有CAP_SYSLOG权限,并且没有改变他们的UID/GID(防止在撤销权限之前打开的文件泄露指针信息);

2:所有内核指使用”%pk”打印的都被隐藏。

1
2
3
4
5
kernel.kptr_restrict = 1

把参数添加到/etc/sysctl.conf中,然后执行sysctl -p使参数生效,永久生效

sysctl -p 查看所有内核参数的值

4. error adding symbols: DSO missing from command line

编译错误问题解决办法:

直接指定包含库的路径和库的名称

5. fatal error: readline/readline.h: No such file or directory

缺少libreadline-dev依赖包

1
2
centos: yum install readline-devel
debian: apt-get install libreadline-dev

6. g++: 内部错误:Killed (程序 cc1plus)

g++: internal compiler error: Killed (program cc1plus)

原因是内存不足, 在linux下增加临时swap空间

1
2
3
4
5
6
7
8
9
10
step 1:
  #sudo dd if=/dev/zero of=/home/swap bs=64M count=16
  注释:of=/home/swap,放置swap的空间; count的大小就是增加的swap空间的大小,64M就是块大小,这里是64MB,所以总共空间就是bs*count=1024MB.这里分配空间的时候需要一点时间,等待执行完毕。
step 2:
  # sudo mkswap /home/swap (可能会提示warning: don't erase bootbits sectorson whole disk. Use -f to force,不用理会)
  注释:把刚才空间格式化成swap各式
step 3:
  #sudo swapon /home/swap
  注释:使刚才创建的swap空间
step 4:执行你相关的操作,如make

如果创建了临时空间仍然提示 “g++: 内部错误:Killed (程序 cc1plus)”,可能分配的空间不够大,可继续分配更大的空间

关闭:

1
2
step 1:sudo swapoff /home/swap
step 2:sudo rm /home/swap

服务器硬盘因为断电,出现故障

1. Linux文件系统只读Read-only file system

问题描述:

1、系统无法进行磁盘的读写操作(touch,cp,chmod)等等
2、服务器无法启动(也是因为无法创建文件)
3、只有涉及到系统磁盘的写操作,都会报错”Read-only file system”

问题原因:

1、系统没有正常关机,导致虚拟磁盘出现文件系统错误;
2、机器硬盘故障导致硬盘只读

问题解决:

1、将系统重要的文件备份到远程主机中

1
scp -r  dirname/filename  user@remote_hostIP:/backupdir

通过scp -r 可以避免对系统有写操作

2、然后重启系统,切换单用户模式。

1
init 1

3、使用fsck手动修复,具体操作如下:

1
fsck.ext4 -y  /dev/vda1(根分区对应的磁盘分区,可通过df -h 命令获取)

4、在实验的过程中,还可常识使用如下命令进行修复

1
2
3
4
5
6
mount -o  remount rw /

service iptables stop
service sshd start
service network start
service mysql start