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
  1. 保存后在终端中输入下面的语句,以重启配置:
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是进程虚拟控制台,他们共享同一个真实的物理控制台。

  1. 伪终端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:”字符串信息。这样,登录程序与telnet程序就通过“伪终端”进行通信。

1
telnet<--->/dev/ptmx(master)<--->pts/*(slave)<--->getty
  1. 串口终端(/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 个)

help

如:mkdir --help

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

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

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

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

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

tar unzip gzip zip

●信息显示命令(12 个)

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

●搜索文件命令(4 个)

which find whereis locate

●用户管理命令(10 个)

useradd usermod userdel groupadd passwd chage id su visudo sudo

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

telnet ssh scp wget ping route ifconfig ifup ifdown netstat

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

lsof route mail mutt nslookup dig

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

mount umount df du fsck dd dumpe2fs dump

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

shutdown halt init

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

uptime top free vmstat mpstat iostat sar chkconfig

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

chmod chown chgrp chage passwd su sudo umask chattr lsattr

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

whoami who w last lastlog users finger

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

ifconfig free fdisk ethtool mii-tool dmidecode dmesg lspci

●其它(19 个)

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

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

内存:top free vmstat mpstat iostat sar

CPU:top vmstat mpstat iostat sar

I/O:vmstat mpstat iostat sar

进程:ipcs ipcrm lsof strace lstrace

负载:uptime mount umount df du fsck dd dumpe2fs dump

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

shutdown halt init

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

uptime top free vmstat mpstat iostat sar chkconfig

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

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

    系统

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

    资源

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

    磁盘和分区

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

    网络

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

    进程

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

    用户

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

    服务

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

    程序

    # rpm -qa                # 查看所有安装的软件包
    

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

    是别名引起的问题
    
    修改~/.bashrc,在“alias cp='cp -i'”前添加#号注释后即可
    让命令生效
    source ~/.bashrc
    或重新登录
    
  2. linux 启动、重启、关机时,服务自动启动、自动关闭及 chkconfig 命令相关问题

    –level<等级代号>  指定读系统服务要在哪一个执行等级中开启或关毕。

    等级0表示:表示关机
    等级1表示:单用户模式
    等级2表示:无网络连接的多用户命令行模式
    等级3表示:有网络连接的多用户命令行模式
    等级4表示:不可用
    等级5表示:带图形界面的多用户模式
    等级6表示:重新启动
    
    如果这样设置:chkconfig --level 2345 servername on
    
  3. Linux使用netstat命令查看并发连接数

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

    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:等待所有分组死掉
    

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

    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
  1. 查看系统日志
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文件使其永久性生效,并对所有系统用户生效,在文件末尾加上如下两行代码
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”

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

有2种路径:

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

  1. 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. 查看已删除,并没有释放硬盘空间的文件

    lsof | grep delete
    
  2. 清空日志

    echo "" >/tmp/acess.log
    
  3. 查日志并高亮显示关键字findFilmkey

    tail -f interstellar.out | perl -pe 's/(findFilmkey)/\e[1;31m$1\e[0m/g'
    
  4. 显示指定行数的日志内容

    cat -n interstellar.new |tail -n +1960370|head -n 20
    
  5. 列出关键字搜索到的日志内容

    cat -n interstellar.new |grep -a "findFilmkey"
    
  6. 分割日志为500m大小

    split -b 500m interstellar.out
    

清理内存缓存脚本

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

  • 使用 vmstat 命令可以得到关于进程、内存、内存分页、堵塞IO、traps及CPU活动的信息
  • CentOS修改系统时间

    date -s '2015-11-03 3:57:00'
    
  • 同步系统时间

    ntpdate edu.ntp.org.cn
    
  • 修改root密码

    passwd
    
  • 显示所有运行中的进程

    ps aux | less
    
  • 当前连接数

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

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

    less
    
  • 文件中搜索内容

    grep
    

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

    grep "postCDN" error.*
    
  • 搜索文件

    find
    
  • 拷贝文件

    cp
    
  • 拷贝目录和文件

    cp -r
    
  • 移动重命名文件

    mv
    
  • 删除文件

    rm
    
  • 删除目录和文件

    rm -r
    
  • 创建软链接

    ln -s
    
  • 创建空文件

    touch
    
  • 编辑文件

    vim
    

键入i,就是insert

Esc,就是退出编辑模式

:wq,就是保存并退出

  • 临时修改ip命令

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

    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都禁止访问

    -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用户

    su - root
    
  • 查看cpu信息详情

    cat /proc/cpuinfo
    
  • 查看磁盘还剩多少空间

    df -h
    
  • 查看指定路径的大小

    du -sh /usr/local/tomcat7
    
  • 配置防火墙

    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端口这条规则的下面

    /etc/init.d/iptables restart
    

    或者

    service iptables restart
    

    CentOS7是

    systemctl restart iptables.service
    

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

  • 如何杀死linux-zombie僵尸进程

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

    -bash: rz: command not found
    
    安装lrzsz即可:
    # yum -y install lrzsz
    
    运行命令rz,即是接收文件,xshell就会弹出文件选择对话框,选好文件之后关闭对话框,文件就会上传到linux里的当前目录
    
    运行命令sz file 就是发文件到windows上(保存的目录是可以配置) 比ftp命令方便多了,而且服务器不用再开FTP服务了
    
  • 查网络端口

    netstat -tnlp
    
  • 查看端口链接数

    netstat -pnt |grep :80 |wc -l
    
  • 查看端口是否已经打开:

    netstat -an
    
  • 查看端口是被哪个应用程序使用:

    netstat -apn
    ps -ef
    
  • 查本机端口已有的连接:

    lsof -i:8080
    
  • 查询端口是否可以连接

    nc -vvnn 118.244.206.80 27017
    
  • 添加用户、权限

    useradd -d /usr/john -m john
    
    passwd john
    

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

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

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

  • 用户管理

    useradd h5
    
    passwd h5
    
    id h5
    

    把movie目录的权限给h5用户

    chown h5 movie
    

    切换到h5用户

    su h5
    
  • 递归设置目录权限

    chmod 777 . -R
    
  • 查询当前目录文件数量

    find . -type f |wc -l
    
  • 查询当前目录210天前的文件

    find . -mtime +180 -type f
    
  • 删除210天前的全部文件(!!!小心小心!!!!!)

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

常用命令

  • 后台执行sh文件脚本

    nohup bash send-jenkins.sh &
    
  • 搜索大文件

    find ~ -size +100M

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

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

    scp jdk-7u51-linux-x64.rpm 192.168.201.5:/root/
    
  • ssh中文乱码

    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当前字符集

    env
    

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

  • 备份目录

    unalias cp
    cp -r -f /usr/local/tomcat7/webapps/newspaper-resource-0.0.1-SNAPSHOT/magazine/* /usr/local/backups/resources/magazine
    
  • 压缩备份目录

    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
    
  • 跨服务器迁移目录

    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

    service network restart
    
  • 查看linux版本

    cat /etc/issue
    lsb_release -a
    
  • 后台运行jar

    nohup java -jar dotado-report-1.0.jar >/dev/null &
    

    有日志的

    nohup java -jar dotado-report-1.0.jar >>dotado-report-1.0.out &
    
  • 解压jar

    unzip dotado-report-1.0.jar -d dotado-report-1.0
    
  • 压缩jar

    jar cvfm0 dotado-report-1.0.jar dotado-report-1.0/META-INF/MANIFEST.MF -C dotado-report-1.0/ .
    
  • 固定ip

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

    systemctl status NetworkManager.service
    

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

    nmcli dev status
    

    例如:enp2s0

    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. 查看磁盘状况

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

    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.
  1. 格式化 /dev/sdb1 分区

    mkfs -t ext3 /dev/sdb1
    
  2. 创建目录 并将 /dev/sdb1 挂在到该目录下

    mkdir /zewspaper
    mount /dev/sdb1 /zewspaper
    
  3. 验证挂载是否成功

    df -k
    
  4. 设置开机自动挂载

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

LINUX下搭建FTP服务器

  1. 检查vsftpd软件是否安装

    rpm -qa |grep vsftpd
    
  2. 安装

    yum install vsftpd
    
  3. 启动ftp:

    service vsftpd start
    
  4. 停止ftp:

    service vsftpd stop
    
  5. 重启ftp:

    service vsftpd restart
    
  6. FTP自动启动

    chkconfig vsftpd on service vsftpd start
    
  7. vsftpd的配置

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

    listen_address=192.168.0.33
    
  8. 添加FTP本地用户

    adduser -d /zewspaper/ftp -g ftp -s /sbin/nologin newspaper
    
    passwd newspaper
    
  9. 将某个目录挂载到FTP服务器下供用户使用

    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:/

    setsebool -P ftp_home_dir 1
    

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

    vi /etc/vsftpd/vsftpd.conf
    

    找到:

    anonymous_enable=YES

    修改为:

    anonymous_enable=NO

    重新启动vsftpd使配置生效

service vsftpd restart
getsebool -a | grep ftp

ftp客户端

  1. 自动安装

    yum install ftp
    
  2. 关闭SELinux方法

    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. 安装

    yum install dstat
    

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

    看一下我们常用的参数

    -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文件末尾加入:

    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工具

    yum install expect
    
  2. 写脚本

    #!/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

    mv /etc/yum.repos.d/CentOS-Base.repo /etc/yum.repos.d/CentOS-Base.repo.backup
    
  • 进入yum源配置文件所在文件夹

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

    wget http://mirrors.aliyun.com/repo/Centos-6.repo
    
  • 下载163的yum源配置文件

    wget http://mirrors.163.com/.help/CentOS6-Base-163.repo
    
  • 运行yum makecache生成缓存

    yum makecache
    
  • 更新系统

    yum -y update
    

完全卸载删除gitlab

1、停止gitlab

gitlab-ctl stop

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

3、查看gitlab进程
ps aux | grep gitlab

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

kill -9 18777

杀掉后,在ps aux | grep gitlab确认一遍,还有没有gitlab的进程
5、删除所有包含gitlab文件

find / -name gitlab | xargs rm -rf

Ubuntu

root远程登陆

  1. 设置管理密码

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

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

  2. 使用apt命令安装openssh server

    sudo apt-get install openssh-server
    
  3. 对 openssh server进行配置

    sudo vi /etc/ssh/sshd_config
    

    找到PermitRootLogin no一行,改为PermitRootLogin yes

  4. 重启 openssh server

    sudo service ssh restart
    
  5. ubuntu默认防火墙关闭命令:

    ufw disable
    

问题汇总

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

    route add default gw 192.168.1.1
    
  2. ping: unknown host

    修改dns配置

    /etc/resolv.conf
    

    建议设置Google的公共DNS服务

    nameserver 192.168.1.1
    nameserver 8.8.8.8
    nameserver 8.8.4.4
    
  1. 阿里云基线检测,报 kernel.kptr_restrict 警告

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

    0:该特性被完全禁止;

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

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

    kernel.kptr_restrict = 1
    
    把参数添加到/etc/sysctl.conf中,然后执行sysctl -p使参数生效,永久生效
    
    sysctl -p 查看所有内核参数的值
    
  2. error adding symbols: DSO missing from command line

    编译错误问题解决办法:

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

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

    缺少libreadline-dev依赖包

    centos: yum install readline-devel
    debian: apt-get install libreadline-dev
    
  4. 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、将系统重要的文件备份到远程主机中
        scp -r  dirname/filename  user@remote_hostIP:/backupdir
    通过scp -r 可以避免对系统有写操作
    2、然后重启系统,切换单用户模式。
        init 1
    3、使用fsck手动修复,具体操作如下:
        fsck.ext4 -y  /dev/vda1(根分区对应的磁盘分区,可通过df -h 命令获取)
    
    4、在实验的过程中,还可常识使用如下命令进行修复
          mount -o  remount rw /
    
          service iptables stop
          service sshd start
          service network start
          service mysql start
    

a