Linux 基础

介绍Linux 基础与相关配置

Linux常用命令

  • mkdir 创建目录
  • cd 切换目录
  • rm -rf 删除目录以及子目录
  • mkdir 创建目录
  • touch 创建文件
  • ls 查看文件列表,ll查看列表与权限
  • pwd 查看当前路径
  • tar -cvf xxx.tar xxx/ tar包打包还有一个压缩命令tar -zcvf
  • tar -xvf xxx.tar -C /xxx/xxx tar包解压还有一个压缩命令tar -zxvf
  • tcpdump 查看tcp抓包
  • ps -ef|grep java 查看java进程信息
  • ifconfig 查看IP信息
  • ./install.sh 当前目录执行sh脚本
  • wget 下载网络数据
  • cat /proc/cpuinfo 查看CPU
  • top 查看进程信息与内存信息
  • free -m 内存容量, -buffers +cached
  • df -h 查看硬盘容量
  • du -sh * | sort -n 查看目录占用容量
  • ssh -p222 root@192.168.1.3 ssh登录其他服务器 -v查看详情,目标服务器需要允许外部ssh登录hosts.allow
  • mv ./* ../ 移动当前目录下的所有文件到上级目录
  • curl -H "Content-Type: application/json" -X POST --data '{"id":1}' http://www.infotech.vip/user POST范围URL
  • chown -R user:usergroup * 更改目录与子目录所有者
  • netstat -tunlp 查看本机监听,-t:tcp,-u:udp,-n:数字表示,-a:全部,-l:监听服务,-p:进程名
  • whereis mysql which mysqld rpm -qa |grep mysql rpm -ql mysql-libs.... rpm -qal |grep mysql find / -name mysql ps -ef|grep mysql查找程序
  • tail -1000 xxx.txt > 2.txt tail -3000 catalina.out |grep Error > 3.txt 查看文件另存为
  • rz sz xxx.txt 上传下载
  • find / -name "*.out" find . -name "*.out" 查找所有.out结尾的文件 查找当前目录.out文件
  • ls -l|grep "^-"| wc -l 查看当前目录文件个数,”^-“代表文件,wc -l统计行数
  • history 查看历史操作命令
  • killall mongod kill进程
  • less xxx.txt 查看文件内容 q 退出
  • sed -n '$=' /etc/sysctl.conf cat /etc/sysctl.conf | wc -l 查看文件行数
  • df -i 查看inode数与市盈率
  • for i in /*; do echo $i; find $i | wc -l; done 查询下一级级目录inode数,可以一级一级排查,找出占用大的目录
  • lsb_release -a uname -r 查看版本信息

Linux命令一张图

linux命令汇总

Linux存储系统

存储一张图

linux命令汇总

注意事项

  • 不能给目录随便分配权限,比如给/根目录下所有文件777权限会导致很多功能不可用

常用命令详解

CURL

发送HTTP GET请求 带中文处理。需要把中文进行urlencode放入参数中,可以找一个在线工具操作。 -d 表示编码,-G 表示get请求

1
curl -G -d code=a123 -d name=%e7%a6%8f%e5%b7%9e http://www.infotech.vip

目录说明

  • /bin 存放二进制可执行文件(ls,cat,mkdir等),常用命令一般都在这里
  • /etc 存放系统管理和配置文件
  • /home 存放所有用户文件的根目录,是用户主目录的基点,比如用户user的主目录就是/home/user,可以用~user表示
  • /opt 用来安装附加软件包,是用户级的程序目录,可以理解为D:/Software,装到/opt目录下的程序,它所有的数据、库文件等等都是放在同个目录下面。java、tomcat等也可以安装在opt目录下
  • /usr 可以理解为C:/Windows/用于存放系统应用程序, /usr/lib理解为C:/Windows/System32,/usr/local 本地系统管理员软件安装目录(安装系统级的应用),可以理解为C:/Progrem Files/用户自己编译的软件默认会安装到这个目录下。 这里主要存放那些手动安装的软件,即不是通过“yum”或apt-get安装的软件。它和/usr目录具有相类似的目录结构。让软件包管理器来管理/usr目录,而把自定义的脚本(scripts)放到/usr/local目录下面。自动化的安装程序通常要到/usr或/usr/local目录下寻找所依赖的文件
  • /usr/src 系统级的源码目录
  • /usr/local/src 用户级的源码目录
  • /usr/local/bin 本地增加的命令
  • /usr/local/lib 本地增加的库
  • /usr/doc Linux文档
  • /usr/bin 应用程序
  • /usr/sbin 超级用户管理程序
  • /dev 存放设备文件
  • /mnt 系统管理员安装临时文件系统的安装点,系统提供这个目录是让用户临时挂载其他的文件系统
  • /boot 系统引导时使用的各种文件
  • /lib 存放跟文件系统中的程序运行所需要的共享库及内核模块
  • /tmp 用于存放各种临时文件,是公用的临时文件存储点
  • /var 用于存放运行时需要改变数据的文件,也是某些大文件的溢出区,比方说各种服务的日志文件
  • /var/log 系统日志

文件访问权限通过用户组实现,一个用户可以属于多个用户组。

NTP服务配置

主要配置文件

/etc/ntp.confNTP主要配置文件

查看NTPD版本号

执行命令

1
ntpd -v

打开防火墙

1
iptables -I INPUT -p udp -m udp --sport 123 -j ACCEPT

NTP安全加固

1. 确认环境

RedHat6.5 Ver. 4.2.8p9升级到 ntp-4.2.8p12.tar

2. 安装依赖包

1
yum -y install gcc libcap libcap-devel glibc-devel

3. 升级Ntp

1
2
3
4
5
 tar zxvf ntp-4.2.8p12.tar.gz 
./configure --prefix=/usr --bindir=/usr/sbin --sysconfdir=/etc --enable-linuxcaps --with-lineeditlibs=readline --enable-all-clocks --enable-parse-clocks --enable-clockctl
make
make install
chkconfig ntpd on

4. 查看版本号

1
ntpd --version

查看文件校验值

  • md5值:
1
2
3
windows : certutil -hashfile filename MD5

linux : md5sum filename
  • SHA1值:

    1
    2
    3
    windows:certutil -hashfile filename SHA1

    Linux : sha1sum filename
  • SHA256值:

    1
    2
    3
    windows :certutil -hashfile filename SHA256

    Linux:sha256sum filename

shell脚本

  • $0 $加数字可以获取传入的参数值
  • $HA_ST $加字符,获取环境变量的值,echo $HA_ST

Linux 网卡配置

网卡配置

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

配置IP,网关,DNS1,自动启动。是通过MAC与网卡绑定的。

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
DEVICE=eth0
TYPE=Ethernet
UUID=41f56913-77c5-45b4-bd21-5029d2a553a
ONBOOT=yes
NM_CONTROLLED=yes
BOOTPROTO=static
HWADDR=00:E0:4C:15:52:1B
IPADDR=192.168.38.202
PREFIX=24
GATEWAY=192.168.38.1
DEFROUTE=yes
IPV4_FAILURE_FATAL=yes
IPV6INIT=no
NAME="System eth0"
DNS1='114.114.114.114'

多网卡同IP地址段配置-比如交换机主备

一般情况下不要把多个网卡的IP地址设置成同一个地址段。还可能出现数据只路由到一个网口的情况。linux系统网卡自动路由的问题,比如拔掉一个口的网线会出现网络不通,系统不懂自动切换到另一个口。如果通过命令把这个口ifdown 掉就可以正常了,系统会删除掉这个口的路由。

1
arp -a # 查看ARP缓存中所有项目的选项

如果想吧多个网口弄成热备,或者其他模式可以通过insmod bonding实现提供了6种模式。mode=0,表示load balancing (round-robin)为负载均衡方式,两块网卡都工作,但是与网卡相连的交换必须做特殊配置。mode=6,表示load balancing (round-robin)为负载均衡方式,两块网卡都工作,做bonding的这两块网卡使用不同的MAC地址。mode=1,表示fault-tolerance (active-backup)提供冗余功能,工作方式是主备的工作方式,只有一块网卡工作,另一块做备份。

1
2
3
4
5
6
7
8
9
10
# 1.创建bond0文件
# 2.先配置网卡
vim /etc/modprobe.d/dist.conf # 3.添加下面参数
alias bond0 bonding
options bond0 mode=0 miimon=100

vim /etc/rc.local # 4.添加下面参数设置开机启动
ifenslave bond0 eth0 eth1
# 5. reboot
cat /proc/net/bonding/bond0 # 查看状态

配置默认DNS

1
vi /etc/resolv.conf

添加:

1
nameserver 114.114.114.114

HOST本地地址解析,主机名IP地址

1
vi /etc/hosts

添加:

1
14.215.177.38 www.baidu.com

查看进程与关闭进程

  1. 查看端口占用情况命令netstat -anp | grep 8080

  2. 根据进程id(12345),或者进程名查询进程详情

    1
    2
    ps -ef | grep 12345
    ps -ef | grep tomcat
  3. 关闭进程kill -9 12345

网络查看

  1. 查看端口占用情况命令netstat -anp。对于监听(State LISTEN)指定端口中 Foreign Address 中的 0.0.0.0:* 代表任意IP对应的端口都是可以接入的。Local Address 中的 0.0.0.0 代表监听本地所有IP地址,并且修改IP不受影响,IP是127.0.0.1表示只监听回环地址,只能本机访问,x.x.x.x:ip 只监听指定ip。:::* 是ipv6的规则
  2. 开放端口检测:lsof -i:3306, lsof -i TCP| fgrep LISTEN
  3. tcp/ip的范围从0到65535。其中公认端口1023以下的端口,查看cat /etc/services
  4. 有出现过127.0.0.1无法访问使用主机名找固定ip可以访问本机程序(数据库)的情况,比较奇怪能拿访问到ipv4与ipv6的问题也可能是系统配置问题

分区工具

Gparted、fdisk、gdisk、parted

守护进程

nohup

  • nohup 不挂断运行
  • & 在后台运行,如果在脚本中就会直接返回不等待程序启动完成,异步
  • 例子:nohup ./program &

Supervisor

守护进程工具,当一个进程意外被杀死,supervisort监听到进程死后,会自动将它重新拉起

查看系统信息

查看内存

1
2
3
4
5
[root@node1 ~]# free
total used free shared buffers cached
Mem: 8008876 7865764 143112 0 13316 4642096
-/+ buffers/cache: 3210352 4798524
Swap: 33554424 1938404 31616020

free命令查看。对于应用程序来说,buffers/cached 是等于可用的,因为buffer/cached是为了提高文件读取的性能,当应用程序需在用到内存的时候,buffer/cached会很快地被回收
可用内存=系统free memory+buffers+cached=143112+13316+4642096=4798524

其他

服务管理两种方式service和systemctl

复制文件夹修改权限

1
2
3
4
cp -r v1.72 test
chown -R virtusers:virtusers test
cd test
tar -zcvf test.tar.gz * --exclude=test.tar.gz

防火墙配置

命令:

1
2
3
4
5
6
7
8
# 保存
service iptables save
# 重启
service iptables restart
# 关闭
service iptables stop
# 通过命令加规则 -A add
iptables -A INPUT -s 192.168.1.111 -p tcp --dport 222 -j ACCEPT # 只允许192.168.1.111范文222端口,批量过滤加上掩码192.168.1.0/24过滤192.168.1.1到192.168.1.225

配置 vi /etc/sysconfig/iptables

1
2
3
4
5
6
7
8
9
10
11
12
*filter
:INPUT ACCEPT [0:0]
:FORWARD ACCEPT [0:0]
:OUTPUT ACCEPT [0:0]
-A INPUT -p tcp -m tcp --dport 30000 -j ACCEPT
-A INPUT -m state --state ESTABLISHED,RELATED -j ACCEPT
-A INPUT -p icmp -j ACCEPT
-A INPUT -i lo -j ACCEPT
-A INPUT -m state --state NEW -m tcp -p tcp --dport 22 -j ACCEPT # 默认配置
-A INPUT -j REJECT --reject-with icmp-host-prohibited
-A FORWARD -j REJECT --reject-with icmp-host-prohibited
COMMIT

配置项目说明

1
2
3
4
5
-p protoco # 协议
-i input # network interface name
-m match # 扩展匹配
--dport port # 目标端口
-j target # 跳过

故障修复

磁盘故障修复

通过Linux启动U盘

  1. 在即将进入启动系统页面按键盘出现菜单,选择rescue
  2. 按提示选择
  3. fsck -y /dev/ada1 用来检查和维护不一致的文件系统。若系统掉电或磁盘发生问题,可利用fsck命令对文件系统进行检查
  4. reboot

无启动盘

  1. 启动系统,按任意键进入grub
  2. 选择Linux,按e进入编辑页面
  3. 选择kernel行,按e进入编辑页
  4. 在kernel行的最后加上init=/bin/bash,按回车键(Enter),然后按“b”进行重新引导
  5. 引导系统会得到一个bash shell,但进入的系统是read-only的,需使用fsck检查系统
    fsck -a /dev/hda1
  6. 将系统挂载成read-write的:mount / -o remount,rw
  7. 其他操作
  8. 系统重新挂载,重启: mount / -o remount,ro

单用户模式修改root密码

  1. 启动系统,按任意键进入grub
  2. 选择Linux,按e进入编辑页面
  3. 选择kernel行,按e进入编辑页
  4. 在kernel行的最后加上single,按回车键(Enter),然后按“b”进行重新引导
  5. 输入passwd修改root密码
  6. reboot

开机自启动

1
chkconfig --list |grep vsftpd

chkconfig的级别:

0:关机
1:单用户模式
2:无网络支持的多用户模式
3:有网络支持的多用户模式
4:保留,未使用
5:有网络支持有X-Windows(图形界面)支持的多用户模式
6:重新引导系统,即重启

开机不重启:

1
chkconfig vsftpd  off

server 0:off 1:off 2:off 3:off 4:off 5:off 6:off
上面的输出0~6都off时表示 没有开机自启动
开启自启动:

1
chkconfig vsftpd on

其它相关命令:
添加开机自启动服务:chkconfig –add vsftpd

添加自定义服务

  1. 在/etc/init.d/目录下新建一个自定义服务的文件如:test
  2. vi test 添加下面两句到 #!/bin/bash 之后。

    1
    2
    # chkconfig: 2345 90 10 
    # description: test ....
  3. chkconfig --add test

  4. chkconfig test on off 开启关闭,永久生效
  5. 如果不生效update-rc.d 命名设置开机自启动,95是脚本启动的顺序号

    1
    2
    cd /etc/init.d
    sudo update-rc.d test defaults 95
  6. update-rc.d 卸载启动脚本的方法

    1
    2
    cd /etc/init.d
    sudo update-rc.d -f test remove

开发注意事项

  • linux(\n),windows(\r\n),mac(\r) 换行符的区别。\n十六进制为0x0A,\r十六进制为0x0D
  • 路径问题 根据情况尽量使用全路径,比如想打印日志,在编写脚本的时候,可能你的脚本是给其他程序调用的,可能其他程序运行脚本的当前路径跟你预期的不一致导致日志打印到了其他目录。当然对于比较熟悉linux系统的也是可以根据具体情况使用现对路径的,主要是要注意路径可能导致的问题。特别是在配置文件里面配置信息路径使用相对路径,当前的相对的路径不是配置文件那级目录,而是启动程序的路径。
  • Licence功能实现,一般可以取CPU、网卡等信息进行验证,最好是通过硬件U盾进行验证。

扩展

  • .tar.gz与.zip文件的区别
    • .tar.gz文件一般用于Linux系统上,而.zip文件一般流行于Windows系统上
    • .tar.gz格式的文件比.zip文件要小很多

参考