linux 笔记

(1) 新linux机器配置

en_US.UTF-8 zh_CN.UTF-8 都是 UTF-8编码
en_US.UTF-8:你说英语,你在美国,字符集是utf-8
zh_CN.UTF-8:你说中文,你在中国,字符集是utf-8

建议设置成 en_US.UTF-8,因为命令行的结果是英文,不用担心乱码。

(1.1) 配置编码

配置文件一般在 /etc/sysconfig/i18n /etc/locale.conf

(1.1.1) 查看当前区域编码配置 localectl status

[wkq@VM_77_25_centos ~]$ localectl status
   System Locale: LANG=en_US.utf8
       VC Keymap: us
      X11 Layout: us

(1.1.2) 查看系统默认的语言设置 locale

[wkq@VM_77_25_centos ~]$ locale
locale: Cannot set LC_CTYPE to default locale: No such file or directory
locale: Cannot set LC_ALL to default locale: No such file or directory
LANG=en_US.utf8
LC_CTYPE=UTF-8
LC_NUMERIC="en_US.utf8"
LC_TIME="en_US.utf8"
LC_COLLATE="en_US.utf8"
LC_MONETARY="en_US.utf8"
LC_MESSAGES="en_US.utf8"
LC_PAPER="en_US.utf8"
LC_NAME="en_US.utf8"
LC_ADDRESS="en_US.utf8"
LC_TELEPHONE="en_US.utf8"
LC_MEASUREMENT="en_US.utf8"
LC_IDENTIFICATION="en_US.utf8"
LC_ALL=

(1.1.3) 查看系统支持的汉语区域语言 localectl list-locales | grep zh

[wkq@VM_77_25_centos ~]$ localectl list-locales | grep zh
zh_CN
zh_CN.gb18030
zh_CN.gb2312
zh_CN.gbk
zh_CN.utf8
zh_HK
zh_HK.big5hkscs
zh_HK.utf8
zh_SG
zh_SG.gb2312
zh_SG.gbk
zh_SG.utf8
zh_TW
zh_TW.big5
zh_TW.euctw
zh_TW.utf8

(1.1.4) 设置语言 localectl set-locale LANG=en_US.utf8

[root@VM_77_25_centos ~]# localectl set-locale  LANG=en_US.utf8
[root@VM_77_25_centos ~]# 
[root@VM_77_25_centos ~]# source /etc/locale.conf 
[root@VM_77_25_centos ~]# 
[root@VM_77_25_centos ~]# 
[root@VM_77_25_centos ~]# tail -100 /etc/locale.conf
LANG=en_US.utf8
[root@VM_77_25_centos ~]# 

Centos7 locale区域语言设置

(1.2) VI编辑器设置

配置 ~/.vimrc 加上如下几行:

set fileencodings=utf-8,ucs-bom,gb18030,gbk,gb2312,cp936
set termencoding=utf-8
set encoding=utf-8

set nu

(1.3) 其它配置

alias ll='ls -l'

# Java JDK config 
export JAVA_HOME=/Library/Java/JavaVirtualMachines/jdk1.8.0_211.jdk/Contents/Home
export PATH=$JAVA_HOME/bin:$PATH
export CLASSPATH=.:$JAVA_HOME/lib/dt.jar:$JAVA_HOME/lib/tools.jar

# Maven config
export MAVEN_HOME=/Users/weikeqin1/SoftWare/apache-maven-3.6.1
export NODE_PATH=/Users/weikeqin1/SoftWare/node/node-v10.16.0-darwin-x64
export PATH=$PATH:$MAVEN_HOME/bin:$NODE_PATH/bin:$NODE_PATH/node_global

# go config 
export GOROOT=/usr/local/go
export GOPATH=/Users/weikeqin1/SoftWare/gopath
export PATH=$PATH:$GOROOT/bin:$GOPATH/bin

# Setting PATH for Python 2.7
PATH="/System/Library/Frameworks/Python.framework/Versions/2.7/bin:${PATH}"
# Setting PATH for Python 3.7
PATH="/Library/Frameworks/Python.framework/Versions/3.7/bin:${PATH}"
export PATH

(2) linux常用命令

(2.1) 远程登录Linux

远程登录 ssh wkq@192.168.66.88

(2.2) Linux文件和目录

[admin@user01 software]$ ll
total 16
-rw-rw-r-- 1 admin admin  425 Jun 16 14:32 HelloWorld.class
-rw-rw-r-- 1 admin admin  110 Jun 16 14:31 HelloWorld.java
-rwxrwxrwx 1 usdp user1   9271609 Aug 16 11:49 apache-tomcat-8.5.4.tar.gz
-rwxrwxrwx 1 root root 185540433 Aug 16 10:36 jdk-8u131-linux-x64.tar.gz
-rwxrwxrwx 1 root root 641555814 Aug 16 10:35 mysql-5.7.16-linux-glibc2.5-x86_64.tar.gz

最前面那个 – 代表的是类型
rwx 代表的是 可读、可写、可执行
中间那三个 rw- 代表的是所有者(user)
然后那三个 rw- 代表的是组群(group)
最后那三个 r–- 代表的是其他人(other)

是追加内容 > 是覆盖原有内容

find命令

find ./company -type f | wc -l

grep命令

grep -rn "字符串" *

sed 命令

统计文件个数

ls -l |grep "^-"|wc -l    #统计当前目录下文件的个数

ls -l |grep "^d"|wc -l    #统计当前目录下目录的个数

ls -lR|grep "^-"|wc -l    #统计当前目录下文件的个数,包括子目录里的 

find ./company -type f | wc -l

ls -lR|grep "^d"|wc -l    #统计目录下目录的个数,包括子目录里的 

(2.3) 用户和用户组

(2.3.1) 添加用户并设置密码

查看用户 tail -10 /etc/passwd

添加用户 useradd -m user_admin

设置密码 passwd user_admin ********

[root@VM_77_25_centos ~]$ tail -6 /etc/passwd
chrony:x:995:993::/var/lib/chrony:/sbin/nologin
sshd:x:74:74:Privilege-separated SSH:/var/empty/sshd:/sbin/nologin
tcpdump:x:72:72::/:/sbin/nologin
wkq:x:1000:1000::/home/wkq:/bin/bash
user_admin:x:1001:1001::/home/user_admin:/bin/bash
user_1:x:1002:1002::/home/user_1:/bin/bash
[root@VM_77_25_centos ~]# 
[root@VM_77_25_centos ~]# useradd -m user_admin
[root@VM_77_25_centos ~]# passwd user_admin
Changing password for user user_admin.
New password:
Retype new password:
passwd: all authentication tokens updated successfully.
[root@VM_77_25_centos ~]# 

(2.3.2) 用户所属组

cat /etc/group  查看用户组

cat /etc/passwd|grep -v nologin|grep -v halt|grep -v shutdown|awk -F":" '{ print $1"|"$3"|"$4 }'|more

(2.4) Linux磁盘管理

(2.5) VI文本编辑器

编辑文本 vi test.txt

(2.6) 压缩和解压缩

(2.7) 安装RPM或源码包

(2.8) shell

(2.9) 正则

(3) 常用运维监控命令

vmstat

vmstat 是一款指定采样周期和次数的功能性监测工具,我们可以使用它监控进程上下文切换的情况。

1

vmstat 1 3 命令行代表每秒收集一次性能指标,总共获取 3 次。
以下为上图中各个性能指标的注释:
procs
r:等待运行的进程数
b:处于非中断睡眠状态的进程数
memory
swpd:虚拟内存使用情况
free:空闲的内存
buff:用来作为缓冲的内存数
cache:缓存大小
swap
si:从磁盘交换到内存的交换页数量
so:从内存交换到磁盘的交换页数量
io
bi:发送到块设备的块数
bo:从块设备接收到的块数
system
in:每秒中断数
cs:每秒上下文切换次数
cpu
us:用户 CPU 使用时间
sy:内核 CPU 系统使用时间
id:空闲时间
wa:等待 I/O 时间
st:运行虚拟机窃取的时间

pidstat

pidstat 命令可以帮助我们监测到具体线程的上下文切换。

pidstat -w -p pid 命令行,我们可以查看到进程的上下文切换

df

[wkq@host-wkq support-files]$ df -hl
Filesystem                  Size  Used Avail Use% Mounted on
/dev/mapper/rhel-root       8.0G  6.8G  1.3G  84% /
devtmpfs                     16G     0   16G   0% /dev
tmpfs                        16G     0   16G   0% /dev/shm
tmpfs                        16G  177M   16G   2% /run
tmpfs                        16G     0   16G   0% /sys/fs/cgroup
/dev/mapper/rhel-mnt_disk1 1014M   33M  982M   4% /mnt/disk1
/dev/mapper/rhel-home      1017M  184M  834M  19% /home
/dev/vda1                   497M  125M  373M  25% /boot
tmpfs                       3.2G     0  3.2G   0% /run/user/0
/dev/mapper/datavg-data01  1023G  251G  773G  25% /data00
tmpfs                       3.2G     0  3.2G   0% /run/user/501
tmpfs                       3.2G     0  3.2G   0% /run/user/1001
tmpfs                       3.2G     0  3.2G   0% /run/user/1006


[wkq@host-wkq support-files]$ df -i
Filesystem                     Inodes   IUsed      IFree IUse% Mounted on
/dev/mapper/rhel-root         5498672   90856    5407816    2% /
devtmpfs                      4095200     370    4094830    1% /dev
tmpfs                         4097815       1    4097814    1% /dev/shm
tmpfs                         4097815     560    4097255    1% /run
tmpfs                         4097815      13    4097802    1% /sys/fs/cgroup
/dev/mapper/rhel-mnt_disk1    1048576       3    1048573    1% /mnt/disk1
/dev/mapper/rhel-home         1044480    4599    1039881    1% /home
/dev/vda1                      512000     328     511672    1% /boot
tmpfs                         4097815       1    4097814    1% /run/user/0
/dev/mapper/datavg-data01  1072693248 6508644 1066184604    1% /data00
tmpfs                         4097815       1    4097814    1% /run/user/501
tmpfs                         4097815       1    4097814    1% /run/user/1001
tmpfs                         4097815       1    4097814    1% /run/user/1006

lsblk

lsblk
[root@host local]# lsblk
NAME               MAJ:MIN RM  SIZE RO TYPE MOUNTPOINT
vda                252:0    0   22G  0 disk 
├─vda1             252:1    0  500M  0 part /boot
└─vda2             252:2    0   18G  0 part 
  ├─rhel-root      253:0    0    8G  0 lvm  /
  ├─rhel-swap      253:1    0    8G  0 lvm  [SWAP]
  ├─rhel-home      253:2    0 1020M  0 lvm  /home
  └─rhel-mnt_disk1 253:3    0    1G  0 lvm  /mnt/disk1
vdb                252:16   0    1T  0 disk 
└─datavg-data01    253:4    0 1023G  0 lvm  /data00

查看操作系统信息

uname -a

[root@localhost ~]# uname -a
Linux localhost.localdomain 3.10.0-327.el7.x86_64 #1 SMP Thu Nov 19 22:10:57 UTC 2015 x86_64 x86_64 x86_64 GNU/Linux

localhost.localdomain  主机名
3.10.0-327.el7.x86_64  内核版本
#1 SMP Thu Nov 19 22:10:57 UTC 2015 x86_64 x86_64  内核编译日期
x86_64  操作系统版本
x86_64  处理器类型
x86_64  硬件平台
GNU/Linux  操作系统

查看cpu统计信息

[root@localhost local]# lscpu
Architecture:          x86_64
CPU op-mode(s):        32-bit, 64-bit
Byte Order:            Little Endian
CPU(s):                2
On-line CPU(s) list:   0,1
Thread(s) per core:    1
Core(s) per socket:    1
Socket(s):             2
NUMA node(s):          1
Vendor ID:             GenuineIntel
CPU family:            6
Model:                 61
Model name:            Intel Core Processor (Broadwell)
Stepping:              2
CPU MHz:               2099.998
BogoMIPS:              4199.99
Hypervisor vendor:     KVM
Virtualization type:   full
L1d cache:             32K
L1i cache:             32K
L2 cache:              4096K
NUMA node0 CPU(s):     0,1

每个cpu信息

[root@localhost local]# cat /proc/cpuinfo

概要查看内存情况

[root@localhost local]# free -m  (单位是MB)
              total        used        free      shared  buff/cache   available
Mem:          15887         215       14819           8         852       15378
Swap:          8191           0        8191

查看内存详细使用

[root@localhost ~]# cat /proc/meminfo 

查看内存硬件信息

[root@localhost ~]# dmidecode -t memory

查看硬盘和分区分布

[root@localhost ~]# lsblk
NAME             MAJ:MIN RM  SIZE RO TYPE MOUNTPOINT
vda              252:0    0  100G  0 disk 
├─vda1           252:1    0  512M  0 part /boot
└─vda2           252:2    0 99.5G  0 part 
  ├─osvg-lv_root 253:0    0   80G  0 lvm  /
  └─osvg-lv_swap 253:1    0    8G  0 lvm  [SWAP]
vdb              252:16   0  500G  0 disk 

看硬盘和分区的详细信息

[root@localhost ~]# fdisk -l

Disk /dev/vda: 107.4 GB, 107374182400 bytes, 209715200 sectors
Units = sectors of 1 * 512 = 512 bytes
Sector size (logical/physical): 512 bytes / 512 bytes
I/O size (minimum/optimal): 512 bytes / 512 bytes
Disk label type: dos
Disk identifier: 0x0009350c

   Device Boot      Start         End      Blocks   Id  System
/dev/vda1   *        2048     1050623      524288   83  Linux
/dev/vda2         1050624   209715199   104332288   8e  Linux LVM

Disk /dev/mapper/osvg-lv_root: 85.9 GB, 85899345920 bytes, 167772160 sectors
Units = sectors of 1 * 512 = 512 bytes
Sector size (logical/physical): 512 bytes / 512 bytes
I/O size (minimum/optimal): 512 bytes / 512 bytes


Disk /dev/mapper/osvg-lv_swap: 8589 MB, 8589934592 bytes, 16777216 sectors
Units = sectors of 1 * 512 = 512 bytes
Sector size (logical/physical): 512 bytes / 512 bytes
I/O size (minimum/optimal): 512 bytes / 512 bytes


Disk /dev/vdb: 536.9 GB, 536870912000 bytes, 1048576000 sectors
Units = sectors of 1 * 512 = 512 bytes
Sector size (logical/physical): 512 bytes / 512 bytes
I/O size (minimum/optimal): 512 bytes / 512 bytes

定时执行任务

定时执行任务使用crontab命令

首先自己写好shell脚本,然后使用crontab命令调用。 下面是我的crontab配置和对应的脚本

在linux终端输入crontab -e就可以调出定时器的设置vi界面。然后输入下面的语句就可以了
00 01 * * * /usr/local/selectwritefile.sh

查看是否创建成功
crontab -l

启动crontab服务

[admin@localhost selectwritefile]$ /sbin/service crond start
Redirecting to /bin/systemctl start  crond.service
==== AUTHENTICATING FOR org.freedesktop.systemd1.manage-units ===
Authentication is required to manage system services or units.
Authenticating as: root
Password: 
==== AUTHENTICATION COMPLETE ===
#!/bin/bash
# selectwritefile.sh
# program:
# 定时执行java脚本,把数据库中的数据写到磁盘

#导入环境变量  
export LANG="en_US.UTF-8"  
export JAVA_HOME=/home/admin/software/jdk1.8.0_111
export PATH=$JAVA_HOME/bin:$PATH  
export CLASSPATH=.:$JAVA_HOME/lib/dt.jar:$JAVA_HOME/lib/tools.jar

echo -e "[`date +%Y-%m-%d_%H:%M:%S`] 开始执行linux shell脚本" 
# 注意 这儿路径用绝对路径,用相对路径会导致找不见jar包,java脚本不能运行
java -jar /home/admin/workspace/selectwritefile/selectwritefile-0.0.1.jar  /home/admin/corpus
echo -e "[`date +%Y-%m-%d_%H:%M:%S`] linux shell脚本运行完毕。"

crontab参数说明

For details see man 4 crontabs

Example of job definition:
.---------------- minute (0 - 59)
|  .------------- hour (0 - 23)
|  |  .---------- day of month (1 - 31)
|  |  |  .------- month (1 - 12) OR jan,feb,mar,apr ...
|  |  |  |  .---- day of week (0 - 6) (Sunday=0 or 7) OR sun,mon,tue,wed,thu,fri,sat
|  |  |  |  |
*  *  *  *  * user-name  command to be executed

在crontab文件中写入需要执行的命令和时间,该文件中每行都包括六个域,其中前五个域是指定命令被执行的时间,最后一个域是要被执行的命令。每个域之间使用空格或者制表符分隔。

除了root用户之外的用户可以执行crontab配置计划任务。所有用户定义的crontab存储在目录/var/spool/cron下,任务会以创建者的身份被执行。要以特定用户创建一个crontab,先以该用户登录,执行命令crontab -e,系统会启动在VISUAL或者EDITOR中指定的的编辑软件编辑crontab。文件内容与/etc/crontab格式相同。

当更改的crontab需要保存时,文件会保存在成如下文件/var/spool/cron/username。文件名会根据用户名而不同。

cron服务会每分钟检查一次/etc/crontab、/etc/cron.d/、/var/spool/cron文件下的变更。如果发现变化,就会下载到存储器中。
因此,即使crontab文件改变了,程序也不需要重新启动。
推荐自定义的任务使用crontab -e命令添加,
退出后用/etc/init.d/crond restart命令重启crond进程,官方文件说不用重启进程,但我遇到不重启无法运行任务的情况。
开始不知道/etc/crontab文件中的run-parts是什么意思,直接把命令按照/etc/crontab的格式加上总是无法运行,
后来才知道run-parts是指后面跟着的是文件夹。

crontab服务的启动关闭

/sbin/service crond start //启动服务
/sbin/service crond stop //关闭服务
/sbin/service crond restart //重启服务
/sbin/service crond reload //重新载入配置

查看进程

ps -ef 
ps -ef | grep java

top

ls /proc/    # 查看进程
cd 26489/    #进入该进程对应文件
ls -ail    #查看详细信息

(4) 常见问题

Permission denied

-bash: ./test.jar: Permission denied

权限不够
使用chmod命令修改权限

chmod 754 test.jar

Cannot mkdir: Permission denied

权限不够
使用chmod命令修改权限

bin/bash: bad interpreter: No such file or directory

有可能是你的脚本文件是DOS格式的, 即每一行的行尾以/r/n来标识
使用vim编辑器打开脚本, 运行:
:set ff?
可以看到DOS或UNIX的字样. 使用set ff=unix把它强制为unix格式的, 然后保存退出, 即可。

Failed to restart iptables.service: Unit iptables.service failed to load: No such file or directory.

iptables --list  #查看防火墙上的可用规则
下例说明当前系统没有定义防火墙,你可以看到,它显示了默认的filter表,以及表内默认的input链, forward链, output链。
[root@host_wkq local]# iptables --list
Chain INPUT (policy ACCEPT)
target     prot opt source               destination         

Chain FORWARD (policy ACCEPT)
target     prot opt source               destination         

Chain OUTPUT (policy ACCEPT)
target     prot opt source               destination         
[root@host_wkq local]# 

service iptables stop  #关闭防火墙

systemctl stop firewalld   #关闭防火墙

No space left on device

-bash: vim: command not found

[usdp@host-172-16-11-125 workspaces]$ rpm -qa|grep vim
vim-minimal-7.4.160-1.el7.x86_64
vim-filesystem-7.4.160-1.el7_3.1.x86_64
vim-common-7.4.160-1.el7_3.1.x86_64
vim-enhanced-7.4.160-1.el7_3.1.x86_64


yum -y install vim-enhanced

yum -y install vim*

account locked due to 17 failed logins

登陆次数过多后的处理 Account locked due to failed logins

pam_tally2 --user=username --reset

linux登录后出现-bash-4.1$,解决办法以及造成这样的原因

##首先切换到故障用户
su - test
##复制对应的文件(不要用root直接复制,否则复制过去的东西属主,数组都是root的)
-bash-4.1$ cp /etc/skel/.bash*  ~  ##(/etc/skel 新用户老家的样子,所以从这里复制)
-bash-4.1$ ls -la
total 24
drwx------  2 test test 4096 Nov  5 14:51 .
drwxr-xr-x. 6 root    root    4096 Nov  5 14:44 ..
-rw-------  1 test test   21 Nov  5 14:45 .bash_history
-rw-r--r--  1 test test   18 Nov  5 14:51 .bash_logout
-rw-r--r--  1 test test  176 Nov  5 14:51 .bash_profile
-rw-r--r--  1 test test  124 Nov  5 14:51 .bashrc
-bash-4.1$ logout

References

[1] Linux教程
[2] Linux文件系统目录结构
[3] Linux磁盘简介
[4] Linux下定时运行脚本
[5] bin/bash: bad interpreter: No such file or directory
[6] bin/bash: bad interpreter: No such file or directory
[7] Linux下定时执行脚本
[8] Linux Crontab 定时任务 命令详解
[9] Linux通过PID查看进程完整信息
[10] linux 中防火墙配置 iptables 命令参数的含义介绍
[11] 在linux中使用vi 打开文件时,能显示行号
[12] 新建用户到指定的目录
[13] Centos7 locale区域语言设置