benwu


在Linux中,文件以“.”开头的就是隐藏文件,并且每个文件,文件夹,设备或者命令都是以文件对待
cal (Calendar)

比如,df=disk free, du=disk usage

 

lsblk  查看分区和磁盘   磁盘挂载
df -h  查看空间使用情况
fdisk -l  分区工具查看分区信息
cfdisk /dev/sda  查看分区
blkid   查看硬盘label(别名)

 

du -sh ./*   统计根目录各文件夹大小
du -h --max-depth=1

uname -a 

cat /etc/redhat-release # 查看内核/操作系统/CPU信息

cat /proc/version # 查看操作系统版本 

cat /etc/issue #(Linux查看版本当前操作系统发行版信息)
cat /proc/cpuinfo # 查看CPU信息
getconf LONG_BIT (Linux查看版本说明当前CPU运行在模式下(32或64), 如果显示32 ,并不代表CPU不支持64bit)

 

cat /proc/cpuinfo   # 查看CPU信息

## 物理CPU就是实实在在插在主机上看得见摸得着那块CPU硬件,可通过如下命令来查看物理CPU个数:
cat /proc/cpuinfo | grep \'physical id\' | sort | uniq | wc -l
 
## CPU核数一块物理CPU上能处理数据的芯片组数量。也就是说一个物理CPU上可能会有多个核心,日常中说的双核,四核就是指的CPU核心。可通过如下命令来查看CPU核心数
cat /proc/cpuinfo | grep \'core id\' | sort | uniq | wc -l
 
## 超线程一个CPU核就是一个物理线程,由英特尔开发超线程技术可以把一个物理线程模拟出两个线程来使用,使得单个核心用起来像两个核一样,以充分发挥CPU的性能。
## 逻辑CPU逻辑CPU的概念比较抽象,可简单理解为一个处理单元,通常来说,总的逻辑CPU数对应总的CPU核数,但借助超线程技术,一个核用起来像两个核,这时逻辑CPU数就是核心数的两倍了。t可通过如下命令来查看逻辑CPU数:
cat /proc/cpuinfo | grep \'processor\' | sort | uniq | wc -l
 
另外用top命令,然后输入1也是可以的。


hostname # 查看计算机名
lspci -tv # 列出所有PCI设备
lsusb -tv # 列出所有USB设备
lsmod # 列出加载的内核模块
env # 查看环境变量
echo $变量名称 #显示变量名称的值 如:echo $PATH

AWK入门指南

例:根据tomcat端口好查找且pid,我的tomcat端口好为 8009  

[root@localhost tomcat8]# netstat -nlp |grep :8009
tcp6       0      0 :::8009                 :::*                    LISTEN      3419/java 

可以看出,pid为3419 ,用awk把 3419 打印出来,其中   -F"/" 表示指定域分隔符为\'/\', $1表示列数,列数从1开始

[root@localhost tomcat8]# netstat -nlp |grep :8009|awk \'{print $7}\'|awk -F"/" \'{print $1}\'
3419 

 

#资源

free -m           # 查看内存使用量和交换区使用量
df -hT       # 查看各分区使用情况

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 # 查看网络统计信息

telnet 192.168.0.141 3600

#进程
ps -ef # 查看所有进程 ps -ef | grep mysql 查看mysql
top # 实时显示进程状态   详细查看


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

man :任何时候你觉得对一个命令行不是很确定,都可以通过输入“man + 命令”了解这个命令能确切是做什么的。
history :查询历史记录命令。

env # 查看环境变量

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

设置指令的别名 alias 例如:

alias todb=\'mysql -u root -p\'
alias topub=\'cd /usr/share/nginx/html\' 

程序安装(rpm方式,以rpm方式安装的mysql来说明)

a) 查看系统中是否以rpm包安装的mysql:
[root@localhost opt]# rpm -qa | grep -i mysql
MySQL-server-5.6.17-1.el6.i686
MySQL-client-5.6.17-1.el6.i686
b)卸载mysql
[root@localhost local]# rpm -e MySQL-server-5.6.17-1.el6.i686
[root@localhost local]# rpm -e MySQL-client-5.6.17-1.el6.i686

也可以这样卸载
[root@localhost local]# yum -y remove MySQL-server-5.6.17-1.el6.i686
[root@localhost local]# yum -y remove MySQL-client-5.6.17-1.el6.i686

c)删除mysql服务

[root@localhost local]# chkconfig --list | grep -i mysql
[root@localhost local]# chkconfig --del mysql
d)删除分散mysql文件夹
[root@localhost local]# whereis mysql 或者 find / -name mysql

find 命令 详解 

find /usr/local/bin -name \'fdfs_*\' -exec rm -rf {} \;
rm -rf /usr/bin/fdfs_*

mysql: /usr/lib/mysql /usr/share/mysql
清空相关mysql的所有目录以及文件
rm -rf /usr/lib/mysql
rm -rf /usr/share/mysql
rm -rf /usr/my.cnf

这是有依赖包可以参数--nodeps 如 rpm -e xxxxxxxxx --nodeps 

yum命令  点击 

查看机器是否有GPU 

[root@localhost download]# lspci |grep -i nvidia
-bash: lspci: command not found 

查询lspci属于哪个软件包 

[root@localhost download]# yum provides */lspci
Loaded plugins: fastestmirror
Loading mirror speeds from cached hostfile
* base: mirrors.aliyun.com
* extras: mirrors.aliyun.com
* updates: mirrors.aliyun.com
pciutils-3.5.1-3.el7.x86_64 : PCI bus related utilities
Repo : base
Matched from:
Filename : /usr/sbin/lspci 

安装pciutils

[root@localhost download]# yum install pciutils 

未显示任何信息,标识不支持GPU

[root@localhost download]# lspci |grep -i nvidia
[root@localhost download]#

 

vim的编辑常用的命令

查看模式 tail -f logs/catalina.out 有内容更新时自动显示
cat logs/catalina.out 查看全部内容,不会进入编辑模式

vim catalina.out 进入编辑模式
正常模式(按Esc或Ctrl+[进入) 左下角显示文件名或为空
插入模式(按i键进入) 左下角显示--INSERT--
可视模式(不知道如何进入) 左下角显示--VISUAL--

插入命令
i 在当前位置生前插入
I 在当前行首插入
a 在当前位置后插入
A 在当前行尾插入
o 在当前行之后插入一行
O 在当前行之前插入一行

查找命令
/text  查找text,按n健查找下一个,按N健查找前一个。
?text  查找text,反向查找,按n健查找下一个,按N健查找前一个。

vim中有一些特殊字符在查找时需要转义  .*[]^%/?~$

:set ignorecase  忽略大小写的查找
:set noignorecase  不忽略大小写的查找

查找很长的词,如果一个词很长,键入麻烦,可以将光标移动到该词上,按*或#键即可以该单词进行搜索,相当于/搜索。而#命令相当于?搜索。
:set hlsearch  高亮搜索结果,所有结果都高亮显示,而不是只显示一个匹配。 Highlight search
:set nohlsearch  关闭高亮搜索显示
:nohlsearch  关闭当前的高亮显示,如果再次搜索或者按下n或N键,则会再次高亮。
:set incsearch  逐步搜索模式,对当前键入的字符进行搜索而不必等待键入完成。
:set wrapscan  重新搜索,在搜索到文件头或尾时,返回继续搜索,默认开启。

:set ff 或 :set fileformat 查看文件格式: 显示: fileformat=dos 或 fileformat=unix
:set ff=unix 或 :set fileformat=unix 修改文件格式: 如过 .sh 文件修改权限后还是不能执行,则要查看一下文件格式

 [拷贝, 删除与粘贴]

在 vi 中 y 表示拷贝(yank,提起), d 表示删除, p 表示粘贴(put,放下) 。其中拷贝与删除是与光标移动命令结合的
yy 表示拷贝光标所在行.
dd 表示删除光标所在行.
D 表示删除从当前光标到光标所在行尾的内容.

u 撤销(Undo)
U 撤销对整行的操作
Ctrl + r 重做(Redo),即撤销的撤销。

[退出命令]
:wq 保存并退出
ZZ 保存并退出
:q! 强制退出并忽略所有更改
:e! 放弃所有修改,并打开原来文件。

[执行shell命令] :!command
:!ls 列出当前目录下文件

chmod改变文件权限

Linux文件的三种身份和四种权限,三种身份分别为:
  u:文件的拥有者
  g:文件所属的群组
  o:其他用户
对于每个身份,又有四种权限,分别为:
  r:读取文件的权限(read)
  w:写入文件的权限(write)
  x:执行的权限(execute)
  s:特殊权限

 

第一位表示文件类型。d是目录文件,l是链接文件,-是普通文件,p是管道
第2-4位表示这个文件的属主拥有的权限,r是读,w是写,x是执行。
第5-7位表示和这个文件属主所在同一个组的用户所具有的权限。
第8-10位表示其他用户所具有的权限。

权限设置方式: +(增加) -(去除) =(设置)

chmod +x run.sh 给三种身份都加上可执行权限
chmod u+x run.sh 只给拥有者加上可执行权限
chmod g+x run.sh 只给群组身份加上可执行权限
chmod o+x run.sh 只给其他人身份加上可执行权限
也可以同时给所有身份都开启可执行权限的功能:
chmod a+x run.sh 这个a就代表全部的三种身份

如果要去掉某个身份的某个权限,只需要将+变为-即可
chmod o-x run.sh 去除其他人身份的可执行权限

也可以一次设置多个,如下:
chmod u=rwx,g+rx,o-x run.sh 拥有者所有权限,群组身份增加写和执行权限,其他身份去除执行权限
也可以一次设置多个,如下:
chmod u=rwx,g+rx,o-x run.sh 拥有者所有权限,群组身份增加写和执行权限,其他身份去除执行权限

设置权限也可以用数字来表示:读(r=4),写(w=2),执行(x=1)。综合起来还有可读可执行(rx=5=4+1)、可读可写(rw=6=4+2)、可读可写可执行(rwx=7=4+2+1)。

例如:chmod 755 run.sh 设置用户的权限为:

1.文件所有者可读可写可执行(r+w+x)
2.与文件所有者同属一个用户组的其他用户可读可执行 (r+x)
3.其它用户组可读可执行 (r+x)

 

chown命令

改变文件拥有者和所在用户组
格式: chown [选项]... [所有者][:[组]] 文件(夹)
-c 显示更改的部分的信息
-f 忽略错误信息
-h 修复符号链接
-R 处理指定目录以及其子目录下的所有文件
-v 显示详细的处理信息
-deference 作用于符号链接的指向,而不是链接文件本身

  实例:chown -R username:groupname elasticsearch/


[root@iZ231tx6fm4Z web]# ls -al

drwxr-xr-x 7 web git 4096 Oct 11 09:51 project.git

 详情:http://www.cnblogs.com/kzloser/articles/2673790.html

 

Linux中添加、修改、删除用户和用户组

https://blog.csdn.net/yajie_china/article/details/80745346

 

 Linux如何查看端口

ss 一般用于转储套接字统计信息。它还可以显示所有类型的套接字统计信息,包括 PACKET、TCP、UDP、DCCP、RAW、Unix 域等。
ss -lntpd | grep :22

 

lsof(list open files)是一个列出系统上被进程打开的文件的相关信息。

lsof -i:端口号 用于查看某一端口的占用情况 :   lsof -i tcp:22

可以看到80端口已经被一个java程序占用

 2、netstat -tunlp |grep 端口号,用于查看指定的端口号的进程情况

参数含义:

-t (tcp)仅显示tcp相关的选项
-u (udp)仅显示tcp相关的选项
-n 拒绝显示别名,能显示数字的全部转化为数字
-l 仅显示Listen(监听)的服务状态
-p 显示建立相关链接的程序名

 

标准输入/输出

https://mp.weixin.qq.com/s/SYcLv22B85wI4i4OgRewzA

command >out.file 2>&1 &

command >out.file 是将command的输出重定向到out.file文件,即输出内容不打印到屏幕上,而是输出到out.file文件中。

2>&1 是将标准出错重定向到标准输出,这里的标准输出已经重定向到了out.file文件,即将标准出错也输出到out.file文件中

最后一个& 是让该命令在后台执行。  STDIN,STDOUT,STDERR,也可以用0,1,2来表示 

顺序不同,执行的效果也不同: 比如: "2>&1 file"和 "> file 2>&1"区别 

1)command 2>&1 >file :错误输出到终端,标准输出被重定向到文件file。
2)command >file 2>&1 :标准输出被重定向到文件file,然后错误输出也重定向到和标准输出一样,所以也错误输出到文件file。 

 

【创建链接命令】

ln -s /usr/local/exportexcel excelexport #新建一个链接excelexport ,指向目录/usr/local/exportexcel
ln -s /vdata1/imgfiles/uploadby uploadby


删除符号链接
rm -rf uploadby
注意不是rm -rf uploadby/ 最后不能又/


【修改/etc/profile文件后出现: bash: lz: 未找到命令...】

# export PATH=/usr/local/sbin:/usr/local/bin:/sbin:/bin:/usr/sbin:/usr/bin:/root/bin

# vim /etc/profile

执行完以上的命令后,你可以重新执行 source /etc/profile命令来让你的配置文件生效

【linux显示:-bash-4.1# 解决方法】

1.在Terminal输入:
vim ~/.bash_profile

2.如果没有.bash_profile可以自己添加。然后往文件中添加如下内容:

export PS1=\'[\u@\h \W]\$\' //注意\'是英文状态下的字符

3.输入以下指令,使更改生效:

source ~/.bash_profile

【SSH客户端连接会话超时】
1、设置服务器向SSH客户端连接会话发送频率和时间
#vi /etc/ssh/sshd_config,添加如下两行
ClientAliveInterval 30
ClientAliveCountMax 300

注:ClientAliveInterval选项定义了每隔多少秒给SSH客户端发送一次信号;ClientAliveCountMax选项定义了超过多少秒后断开与ssh客户端连接

2、重新启动系统SSH服务
#service sshd restart

 

【Linux索引节点(inode)用满故障】 

出现错误:no space left on device

[root@iZ231tx6fm4Z tomcat]# df -h
Filesystem Size Used Avail Use% Mounted on
/dev/xvda1 40G 12G 26G 33% /
tmpfs 938M 0 938M 0% /dev/shm

[root@iZ231tx6fm4Z tomcat]# df -i
Filesystem Inodes IUsed IFree IUse% Mounted on
/dev/xvda1 2621440 2621440 0 100% /
tmpfs 240092 1 240091 1% /dev/shm


是由于Linux索引节点(inode)用满导致故障;
首先定位哪个目录占用iNode最多,命令如下:

cd /
find */ ! -type l | cut -d / -f 1 | uniq -c


找出某个目录下文件的总个数:比如查看 logs/ 目录
for i in logs/; do echo $i; find $i |wc -l|sort -nr; done


最后清理目录  

Linux 系统默认的max open files = 1024, 在大内存服务器中, 如果运行负载比较大的程序, 很容易发生error: too many open files, 特别是提供大量静态文件访问的Web服务器、缓存服务器中这种错误更加常见.

open files表示系统级别的能够打开的文件句柄的数量, 是系统级别的安全策略: 限制所有应用打开的文件数量.

发生error: too many open files时, 如果不好定位程序问题, 可在系统的配置文件中做一定的修改.

为了让服务器重启之后, 配置仍然有效, 需要用永久生效的配置方法进行修改.

2 修改max open files
当前环境:CentOS Linux release 7.2.1511

查看当前系统的所有限制值

[root@xzkj-huanan2 tomcat-apitest]# ulimit -a
core file size          (blocks, -c) 0
data seg size           (kbytes, -d) unlimited     #数据段长度
scheduling priority             (-e) 0
file size               (blocks, -f) unlimited
pending signals                 (-i) 15090
max locked memory       (kbytes, -l) 64
max memory size         (kbytes, -m) unlimited   #最大内存大小
open files                      (-n) 65535      #最大打开文件数
pipe size            (512 bytes, -p) 8
POSIX message queues     (bytes, -q) 819200
real-time priority              (-r) 0
stack size              (kbytes, -s) 8192      #栈大小
cpu time               (seconds, -t) unlimited  #CPU时间
max user processes              (-u) 15090
virtual memory          (kbytes, -v) unlimited  #虚拟内存大小
file locks                      (-x) unlimited

查看系统可打开的最大文件数量(open files)

[root@xzkj-huanan2 tomcat-apitest]# ulimit -n
65535 

a) 用命令修改:

ulimit -n 65535   # 把文件句柄数改为65535
ulimit -SHn 65535 # 也可用下属方式修改:
# 其中-S是soft软限制模式, -H指hard硬限制模式; 
# 默认是软限制, 如果只指定-n, 那就会同时配置-SH.

但是重启服务器后就不起作用了

b) 永久有效修改

网络上常见的方式有如下三种:

① 在/etc/security/limits.conf最后增加如下两行记录:

# nofile - 可以打开的最大文件数, *通配符表示对所有用户有效
* soft nofile 65535
* hard nofile 65535
修改完成后保存, 退出当前用户并重新登录(不用重启服务器), 当前修改就会生效.

② 在/etc/profile中增加一行ulimit -SHn 65535, 然后运行source /etc/profile命令让修改立即生效.

—— /etc/profile文件是所有系统用户的配置文件, 修改后会影响当前系统的所有注册用户.

③ 在/etc/rc.local文件中增加一行ulimit -SHn 65535, 修改完后, 重启服务器就可生效. 

另外, 在《阿里巴巴Java开发手册》中, 关于最大文件句柄数有这样的描述:

【推荐】调大服务器所支持的最大文件句柄数(File Descriptor,简写为fd)。

说明:主流操作系统的设计是将 TCP/UDP 连接采用与文件一样的方式去管理,即一个连接对应于一个 fd。主流的 Linux 服务器默认所支持最大 fd 数量为 1024,当并发连接数很大时很容易因为 fd 不足而出现“open too many files”错误,导致新的连接无法建立。 建议将 Linux 服务器所支持的最大句柄数调高数倍(与服务器的内存数量相关)。

3 修改max user processes
(1) 问题描述: 在使用Java程序多线程大批量生成模拟数据时, Cent OS报出如下错误:

ulimit: max user processes: cannot modify limit
错误说明: Linux系统为每个用户都设置了一个最大进程数, 这个特性可以让我们控制服务器上现有用户可以创建的进程数量.

(2) 查看max user processes:

# 与查看max open files类似, 可使用 ulimit -u查看max user processes:
ulimit -u
(3) 修改max user processes:

① 方案一: 修改/etc/security/limits.conf文件, 在文件最后添加下述内容:

* soft nproc 131072
* hard nproc 131072
② 方案二: 修改/etc/security/limits.d/90-nproc.conf文件, 在文件最后添加下述内容:

# 用户进程数的默认限制, 下面这个是对root外的其他用户限制max user processes, 要注释掉:
# * soft nproc 1024
root soft nproc 131072
(4) 关于nproc配置信息的扩展说明:

对max user processes的配置, Linux系统默认先读取/etc/security/limits.conf 中的信息, 如果/etc/security/limits.d/目录下还有配置文件的话, 也会依次遍历读取, 最终, /etc/security/limits.d/中的配置会覆盖/etc/security/limits.conf 中的配置.

另外, max open files和max user processes是不能配置unlimited的 —— 极不安全的设置, 此时系统会使用默认的配置值. 对nproc而言, 默认值的计算方法为:

# 计算公式为:
default_nproc = max_threads / 2;
# 其中, max_threads = mempages / (8 * THREAD_SIZE / PAGE_SIZE);
# mempages是机器的物理页面个数, THREAD_SIZE=8K, 所以, 计算公式为:
default_nproc = max_threads / 2
= (mempages * PAGE_SIZE) / ( 2 * 8 *THREAD_SIZE )
= total_memory / 128K;

# 计算本机默认nproc配置:
cat /proc/meminfo | grep MemTotal
MemTotal: 115571480 kB

echo "115571480 / 128" | bc
902902

ulimit -u
902682
# 算出来default_nproc = 902902, 和实际的902682很接近,
# 因为物理页面会存储一些关键数据, 所以实际的比计算出来的要小一些.
4 附录: ulimit命令说明
(1) 列出所有当前资源极限, 命令为: ulimit -a, 其他命令可参考输出信息中括号内的提示:

# ulimit -a 命令的输出信息:
core file size (blocks, -c) 0
data seg size (kbytes, -d) unlimited # 一个进程的数据段的最大值
scheduling priority (-e) 0
file size (blocks, -f) unlimited # Shell创建文件的最大体积, 1block = 512bytes
pending signals (-i) 1031426 # 最多允许多少个待处理的信号
max locked memory (kbytes, -l) 64 # 每个进程可以锁住的物理内存的最大值
max memory size (kbytes, -m) unlimited # 每个进程可以使用的常驻内存的最大值
open files (-n) 65535 # 每个进程可以同时打开的最大文件数, 不能是unlimited
pipe size (512 bytes, -p) 8 # 管道的最大值, 1block = 512bytes
POSIX message queues (bytes, -q) 819200 # POSIX的消息队列的最大值
real-time priority (-r) 0
stack size (kbytes, -s) 10240 # 单个进程能够使用的最大栈大小
cpu time (seconds, -t) unlimited # 单个进程的最大CPU时间, 也就是可使用CPU的秒数, 到硬极限时, 这个进程就会立即自杀; 到软极限时, 每秒发送一次限制超时信号SIGXCPU
max user processes (-u) 131072 # 单个用户可同时运行的最大进程数, 不能是unlimited
virtual memory (kbytes, -v) unlimited # 每个进程可使用的最大虚拟内存
file locks (-x) unlimited # 每个进程能锁住的最大文件个数
(2) ulimit的其他命令:

-H 设置某个给定资源的硬极限. 如果用户拥有root权限, 可以增大硬极限. 任何用户均可减少硬极限
-S 设置某个给定资源的软极限, 软极限可增大到硬极限的值
(3) 注意事项:

① 其中, unlimited是指不限制用户可以使用的资源, 但这个设置对系统可打开的最大文件数(max open files)和各个用户可同时运行的最大进程数(max user processes)无效.

② 如果某个指标没有明确指定-H和-S限制, 那么当前的极限值就是 -H 和 -S 两者的极限值.

 

 

linux快捷键(适合SecureCRT和Xshell客户端)

Ctrl+a 光标回到行首
Ctrl+e 光标回到行尾

Ctrl+Insert 复制
Shift+Insert 粘帖

Ctrl+k 剪切(删除)光标处到行尾的字符
Ctrl+u 剪切(删除)光标处到行首的字符
Ctrl+y 粘帖

Ctrl+l 清除屏幕的内容

Ctrl+d 退出当前shell命令行

 

分类:

技术点:

相关文章: