在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信息
hostname # 查看计算机名
lspci -tv # 列出所有PCI设备
lsusb -tv # 列出所有USB设备
lsmod # 列出加载的内核模块
env # 查看环境变量
echo $变量名称 #显示变量名称的值 如:echo $PATH
例:根据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命令行