目录
md5sum
su与su - 的区别
从windows上传下载文件
rz参数
sz参数
Linux命令行中的 符号 '\' ,' --'的作用
profile、bash_profile、bashrc的用途与区别
/和~的区别
Ifconfig:
Ping
查看端口占用情况
查看端口属于哪个程序
lsof命令详解
ls
linux多命令的顺序执行
文件下载
mkdir
cd
pwd
touch
vi/vim
echo
cat
tac
cp
软连接与硬链接
硬链接(Hard Link)
软链接
区别
挂载点
目录
ulimit
java程序相关的Linux指令
jps
jstack
jstack查找高度占用CPU的java代码步骤
Jmap
总结
ps -ef|grep详解
rm
重定向(> />>/<<)
man
xargs
清空文件
more,less,clear
搜索 /
Tail和head命令
wc [option] filename统计文件字数
文件的拷贝,剪贴 ,重命名
~线下的`
Linux 通配符
打包 压缩与解压
解包:
压缩:
解压:
从windows上传文件指令和安装指令文件
Yum指令
网络指令:
修改主机名
修改映射关系
防火墙操作
find
grep命令
which
whereis
磁盘空间命令
free 内存
top
ldconfig
ps常用参数
根据用户过滤进程
通过cpu和内存使用来过滤进程
通过cpu和内存使用来过滤进程
进程管理命令
nohup和&后台运行,进程查看及终止
&
&2 2>&1 的区别
ps
pstree
kill
权限管理
快速 设置权限
普通方法设置权限
用户管理命令
突出当前用户 回到root用户
useradd
passwd
userdel(user delete)
Linux 命令行快捷键
常用指令
移动光标
编辑命令
Bang(!)命令
查找历史命令
Bash基本使用
命令别名
管道
xargs
5、xargs与管道|的区别
时间管理查看时间
设置时间
网络时间同步
SSH 知识点
在linux中远程登录另一台linux
从一台linux上发送一个远程指令给另一台远程linux去执行
java程序在linux如何启动
发送远程指令执行java程序示范:
从一台linux远程拷贝文件到另一台linux
定时任务
linux 高级指令
tr
linux中sort命令
diff 文件差异的对比
linux命令 grep、sed、awk三剑客
Linux指令学习技巧
- 善于查看man help等帮助文档
- ctrl + d 退出当前shell命令
- ctrl + c(停止当前进程)
- ctrl + z 挂起当前进程(暂停),放后台
- ctrl + r(查看命令历史) history
- ctrl + l(清屏,与clear命令作用相同)
- 方向箭头 上 下 可以查看执行过的命令
- Linux注意事项 linux下严格区分大小写
在linux下配置环境变量,使用$ 追加路径是:而不是分号
文件显示的第一列会显示文件的信息,是一个文件还是一个文件夹
文件开头是- 文件夹开头是dr
md5sum
背景
在网络传输、设备之间转存、复制大文件等时,可能会出现传输前后数据不一致的情况。这种情况在网络这种相对更不稳定的环境中,容易出现。那么校验文件的完整性,也是势在必行的。
注意事项
md5sum命令用于生成和校验文件的md5值。它会逐位对文件的内容进行校验。是文件的内容,与文件名无关,也就是文件内容相同,其md5值相同。md5值是一个128位的二进制数据,转换成16进制则是32(128/4)位的进制值。
md5校验,有很小的概率不同的文件生成的md5可能相同。比md5更安全的校验算法还有SHA*系列的。
重要的选项
- -b 以二进制模式读入文件内容
- -t 以文本模式读入文件内容
- -c 根据已生成的md5值,对现存文件进行校验
- --status 校验完成后,不生成错误或正确的提示信息,可以通过命令的返回值来判断。
案例:
-C
-c选项来对文件md5进行校验。校验时,根据已生成的md5来进行校验。生成当前文件的md5,并和之前已经生成的md5进行对比,如果一致,则返回OK,否则返回错误信息
md5sum –c old.md5 old.md5 是之前的MD5值
1: [root@master lianxi]# md5sum -c d.md5 2: data: OK
--status
--status,不显示校验信息,以命令返回值来判断, 校验一致返回0,不一致返回1
1: [root@master lianxi]# md5sum -c --status data.md5
2: [root@master lianxi]# echo $?
su与su - 的区别
su只是切换了root身份,但Shell环境仍然是普通用户的Shell;而su -连用户和Shell环境一起切换成root身份了。只有切换了Shell环境才不会出现PATH环境变量错误,报command not found的错误。su切换成root用户以后,pwd一下,发现工作目录仍然是普通用户的工作目录;而用su -命令切换以后,工作目录变成root的工作目录了。
注意:要从当前用户切换到其它用户也一样,应该使用su -命令。
- su 需要输入的密码是你将切换后的账户的密码。
- su -账户名,可以任意切换到你所需要的账户。不写账户名,默认切换到root。
- sudo 需要输入的密码是你当前正在使用的账户的密码。它能暂时获得root用户权限,但有时间限制。所以我们也称sudo 是受限制的su 。
从windows上传下载文件
sz:将选定的文件发送(send)到本地机器
rz:运行该命令会弹出一个文件选择窗口,从本地选择文件上传到服务器(receive)
rz参数
-a, –ascii
-b, –binary 用binary的方式上传下载,不解释字符为 ascii
-e, –escape 强制escape 所有控制字符,比如 Ctrl+x,DEL 等
-ary –o-sync
-a 表示使用ascii码格式传输文件,如果是Dos格式的文件,会转换为unix格式
-r 使用 Crash recovery mode. 即文件传输中断会重传
-y 表示文件已存在的时候会覆盖
–o-sync 采用同步写模式,以处理从缓存写到磁盘时中断丢失的情况
sz参数
-a 以文本方式传输(ascii)。
-b 以二进制方式传输(binary)。
-e 对控制字符转义(escape),这可以保证文件传输正确。
-c command
-i command 在接收端(本地)执行命令,但我没有尝试成功。
如果能够确定所传输的文件是文本格式的,使用 sz -a files,如果是二进制文件,使用 sz -be files
批量下载文本文件
ze支持模糊匹配的,本例演示了下载文本文件,比如c源代码。
[root@web src]# ls *.c
httptunnel_codec.c s_agent2.c s_conf.c s_htserv.c s_pop3.c s_smtp.c s_tcpfwd.c s_telnet.c s_user.c s_xort.c
iSurf.c s_agent.c s_ftp.c s_http.c s_run.c s_socks.c s_tcpgum.c s_term.c s_via3.c
proxycfg.c s_bridge.c s_host.c s_mime.c s_server.c s_task.c s_tcphub.c surf.c s_via.c
[root@web src]# sz -a *.c
下载完了之后文件在哪个地方呢?
SecureCRT中,选择菜单项“选项(O)”下的“会话选项(S)”,左边切到“Xmodem/Zmodem”,即可看到上传和下载目录设置,也可更改。默认上传目录为 C:\Program Files\SecureCRT\upload,下载目录为 C:\Program Files\SecureCRT\download。
但在Vista下,到C:\Program Files\SecureCRT\download去看的时候并没有找到下载的文件,搜索了一下发现它们在下面的目录中:C:\Users\***\AppData\Local\VirtualStore\Program Files\SecureCRT\download,其中***为用户名。
Linux命令行中的 符号 '\' ,' --'的作用
之前不清楚符号的作用,害的自己命令执行出错,费了一番周折,澄清下认知,这俩符号一般在命令行中出现,\一般出现在行尾,是因为当前行中字符太多,在行尾尚有未写完的字符串,加上该符号后就可以下行行首的字符相连,相当于替换\n的作用,如果在行中间加上该字符,则该字符即成为前边字符串的一部分,在命令行中进行测试验证,
在命令中间加上 \后,下边提示No such file or directory,表示\被认为是ls命令中路径参数的一部分,那么将其放在行尾再试下
所以在命令行中参数比较多时,通过在每个参数后边加上\符号进行换行,保证了代码的可读性,检查起来比较方便。
至于--符号,在命令行中,每个参数前边都会加上--表示该参数的开始,相当于参数间的分隔符。
profile、bash_profile、bashrc的用途与区别
profile文件
profile(/etc/profile),用于设置系统级的环境变量和启动程序,在这个文件下配置会对所有用户生效。当用户登录(login)时,文件会被执行,并从/etc/profile.d目录的配置文件中查找shell设置。添加环境变量后,需要重新登录才能生效,也可以使用source命令强制立即生效: source /etc/profile
bashrc文件
bashrc文件用于配置函数或别名。bashrc文件有两种级别:
系统级的位于/etc/bashrc、用户级的位于~/.bashrc,两者分别会对所有用户和当前用户生效。
bashrc文件只会对指定的shell类型起作用,bashrc只会被bash shell调用。
bash_profile文件
bash_profile只对单一用户有效,文件存储位于~/.bash_profile,该文件是一个用户级的设置,可以理解为某一个用户的profile目录下。这个文件同样也可以用于配置环境变量和启动程序,但只针对单个用户有效。和profile文件类似,bash_profile也会在用户登录(login)时生效,也可以用于设置环境变理。但与profile不同,bash_profile只会对当前用户生效。
总结
修改所有用户的环境变量:/etc/profile文件
只修改root用户的环境变量:~/.bashrc文件
只修改某个非root用户的环境变量:/home/非root用户名/.bashrc文件
/和~的区别
/是指根目录:就是所有目录最顶层的目录
~是当前用户的主目录:如果是root用户就是/root/目录, 如果是其他用户就是/home/下用户名命名的用户
Ifconfig:
检查ip地址信息
Ping
Ping -C n
设置返回信息的行数
Ping是Windows、Unix和Linux系统下的一个命令。ping也属于一个通信协议,是TCP/IP协议的一部分。利用“ping”命令可以检查网络是否连通,可以很好地帮助我们分析和判定网络故障。应用格式:Ping空格IP地址。该命令还可以加许多参数使用,具体是键入Ping按回车即可看到详细说明。
结束ping
ctrl+c 可以停止ping
ctrl+z可以暂停ping,ctrl+z是把进程放到后台去, 你只需要fg就可以把它弄到前台来
查看端口占用情况
netstat -tln | grep 8080
查看端口属于哪个程序
lsof -i :8080
lsof命令详解
简介
lsof(list open files)是一个列出当前系统打开文件的工具。在linux环境下,任何事物都以文件的形式存在,通过文件不仅仅可以访问常规数据,还可以访问网络连接和硬件。所以如传输控制协议 (TCP) 和用户数据报协议 (UDP) 套接字等,系统在后台都为该应用程序分配了一个文件描述符,无论这个文件的本质如何,该文件描述符为应用程序与基础操作系统之间的交互提供了通用接口。因为应用程序打开文件的描述符列表提供了大量关于这个应用程序本身的信息
参数解析
列出所有的网络连接
lsof -i
列出所有tcp 网络连接信息
lsof -i tcp
列出所有udp网络连接信息
lsof -i udp
列出谁在使用某个端口
lsof -i :3306
特定的tcp端口
lsof -i tcp:80
查看谁正在使用某个文件
lsof /filepath/file
递归查看某个目录的文件信息
lsof +D /filepath/filepath2/
备注: 使用了+D,对应目录下的所有子目录和文件都会被列出
列出某个用户打开的文件信息
lsof -u username
备注: -u 选项,u其实是user的缩写
列出某个程序所打开的文件信息
lsof -c mysql
备注: -c 选项将会列出所有以mysql开头的程序的文件,其实你也可以写成lsof | grep mysql,但是第一种方法明显比第二种方法要少打几个字符了
列出多个程序多打开的文件信息
lsof -c mysql -c apache
列出某个用户以及某个程序所打开的文件信息
lsof -u test -c mysql
列出除了某个进程号,其他进程号所打开的文件信息
lsof -p ^1
列出某个用户的所有活跃的网络端口
lsof -a -u test -i
ls
-> ls 默认列出当前目录下的所有非隐藏文件。
-> ls -l(long)以长格式查看文件。 简写ll
-> ls -d(directorys)查看目录。简写 ld 下面的以此类推
-> ls -F:给不同文件的结尾加标识。例如目录结尾会加"/"
-> ls -p:只给目录结尾加标识"/"
-> ls -a:显示所有文件,包括隐藏文件,默认点开头的文件是隐藏文件
-> ls -r:倒排序
-> ls -t:按修改时间排序,一般rt结合,查看最近被修改的文件。
-> \ls --color=auto:显示颜色,默认已经设置到别名里
-> ls -i /data/:显示inode,文件索引
-> ls -lh /data/:h参数表示人类可读,会将文件大小换成k、M等易读方式
-> ls -l --time-style=long-iso /data:规范时间显示(2016-03-04)
linux多命令的顺序执行
当我们需要一次执行多个命令的时候,命令之间需要用连接符连接,不同的连接符有不同的效果。
(1) ; 分号,没有任何逻辑关系的连接符。当多个命令用分号连接时,各命令之间的执行成功与否彼此没有任何影响,都会一条一条执行下去。
(2) || 逻辑或,当用此连接符连接多个命令时,前面的命令执行成功,则后面的命令不会执行。前面的命令执行失败,后面的命令才会执行。
(3) && 逻辑与,当用此连接符连接多个命令时,前面的命令执行成功,才会执行后面的命令,前面的命令执行失败,后面的命令不会执行,与 || 正好相反。
(4) | 管道符,当用此连接符连接多个命令时,前面命令执行的正确输出,会交给后面的命令继续处理。若前面的命令执行失败,则会报错,若后面的命令无法处理前面命令的输出,也会报错。
文件下载
wget http://file.tgz
mac下安装wget命令
curl http://file.tgz
mkdir
简述:创建目录。
-> mkdir /data 在根目录下创建data目录
-> mkdir -p /aa/bb/cc:递归创建目录
cd
简述:切换目录
-> cd /etc 从当前目录切换到/etc路径下
Cd - 返回到执行cd之前的目录
pwd
简述:打印工作目录。注意 pwd要大写
-> pwd (print work directory) 显示当前所在路径
-> echo $PWD:可以看到这个变量的值
touch
简述:不存在就创建文件,存在则更新文件时间戳信息。
-> touch /data.txt 直接在/目录下创建data.txt文件。
Touch 后面可以一次创建多个文件夹或文件 文件或文件夹之间用空格隔开
例如 touch 1.txt 2.txt 3.txt
-> cd /; touch data.txt 切换到/目录下,创建data.txt文件
vi/vim
Esc进入命令格式
退出Vi的几种方法
在命令模式中,连按两次大写字母Z,若当前编辑的文件曾被修改过,则Vi保存该文件后退出,返回到shell;若当前编辑的文件没被修改过,则Vi直接退出, 返回到shell,在末行模式下,输入命令 :w
Vi保存当前编辑文件,但并不退出,而是继续等待用户输入命令。在使用w命令时,可以再给编辑文件起一个新的文件名。 :w newfile
此时Vi将把当前文件的内容保存到指定的newfile中,而原有文件保持不变。若newfile是一个已存在的文件,则Vi在显示窗口的状态行给出提示信息:
File exists (use ! to override)
此时,若用户真的希望用文件的当前内容替换newfile中原有内容,可使用命令
:w! newfile
否则可选择另外的文件名来保存当前文件。
在末行模式下,输入命令 :q
系统退出Vi返回到shell。若在用此命令退出Vi时,编辑文件没有被保存,则Vi在显示窗口的最末行显示如下信息:
No write since last change (use ! to overrides)
提示用户该文件被修改后没有保存,然后Vi并不退出,继续等待用户命令。若用户就是不想保存被修改后的文件而要强行退出Vi时,可使用命令 :q!
Vi放弃所作修改而直接退到shell下。
在末行模式下,输入命令 :wq
Vi将先保存文件,然后退出Vi返回到shell。
在末行模式下,输入命令 :x
该命令的功能同命令模式下的ZZ命令功能相同。
-> vi /data.txt 打开data文件,打开默认为命令模式不可编辑。点击a或i进入插入状态,点击Esc退出编辑状态进入命令状态可以执行以:冒号后面执行以下命令。
命令状态按:wq保存退出。(wq为write quit)
dd:光标点住哪一行直接删除一行或剪切一行
n dd 删除或剪切从光标开始的n行
p 粘贴
yy复制
Ctrl +z 挂起在后台 ,相当于最小化
Fg 取消挂起 ,相当于最大化
> set nu显示行号 记住不带/
-> set nonu 不显示行号
-> G或]]或:$ 光标移动到文件的最后一行
-> gg或[[或:0 光标移动到文件的第一行-
-> o 开启新一行
I 光标调到开头
A 光标调到结尾
:n 第你
-> $或end键:从光标位置移动到当前行的结尾
-> u:取消上一次的动作->
/:向下搜索,继续搜索按n,配置文件时,可以搜索关键字
反向搜索按N-> ?:向上搜索,继续搜索按n,反向搜索按N
替换:%s/旧字符串/新的字符串/g
其中 % 匹配所有 s 从开始的地方开始 g 是全部的意思
S:start g:globle
echo
简述:打印。
-> echo ‘I like linux’ 打印后边的字符串
-> echo -n "abc"; echo "456":不换行输出
-> echo -e "123\t456":加特殊符号,比如制表符\t,换行\n等
注意 -n和-e要和echo之间有空格或制表符
cat
简述:查看文件内容。
-> cat /data.txt 查看data.txt文件中的内容-> cat >>/test/test.txt<<EOF I like Linux.
You like linux too.
EOF
此用法即可>>和<<,可以追加多行内容,内容用EOF包裹,EOF可以用任意重复字符替代,但内容中不存在此重复字符即可。
此方法也会自动创建文件。
-> cat -n /data.txt:显示行号-> cat test{1,2}.txt >/tmp/aa.txt:将test1.txt和test2.txt文件内容合并到aa.txt里面-> cat -T test.txt:区分tab键和空格,tab键会被^I替代-> cat -E test.txt:会在行尾加$符号,空行也会有
tac
简述:和cat相反,倒序读取文件。最后一行先输出,然后倒数第二行……
rev
简述:每行倒读
-> echo 1234|rev:输出是4321
简述:显示行号
-> nl /data.txt:显示行号
cp
简述:拷贝命令,可以拷贝文件或目录。
-> cp /data/aa.txt /test/ :将/data/aa.txt文件拷贝到/test/目录下。-> cp –r /data /test/ :将/data目录递归拷贝到/test/下面。-> cp –a /data /test/ :-a参数相当于-pdr
-p:连同档案属性一块拷贝,而非默认属性。
-d: 若原文件为链接文件,则复制链接文件属性而非档案本身】
软连接与硬链接
什么是目录
Linux 文件系统是树状结构的。根目录下存在一系列子目录。目录里边有文件或者子目录。 但问题在于:
- 目录是什么?
- 文件又是什么?
文件是:数据 + 属性(比如名字、创建时间、所有者之类)
目录是:一个列表,列表中的每一项是:inode –> filename
Linux 文件系统把硬盘分为三个部分:超级块、inode 列表、数据区
inode 指示:该文件的数据存放在数据区的哪些块内。因为这个“映射”关系不能变更,因此,inode 相当于代表着文件本身。(值得注意的是,文件名与文件本身不是直接映射起来的,中间隔着 inode)
硬链接(Hard Link)
硬链接指通过索引节点来进行连接,在 Linux 为文件系统中,保存在磁盘分区中的文件不管是什么类型都给它分配一个编号,称为索引节点号;
硬链接指的就是在 Linux 中,多个文件名指向同一索引节点;
常见用途:通过建立硬链接到重要文件,防止误删,删除其实对应的是删除其中的一个硬链接,当文件对应的硬链接都被删除了,该文件才真正被删除;
注意: 默认情况下,ln 命令产生硬链接;
创建硬链接命令:cp -l 1.txt 2.txt
等同于ln 1.txt 2.txt
# 为 1.txt 建立硬链接 2.txt
[root@centos7 home]# vi 1.txt
hello, this is 1.txt!
[root@centos7 home]# cp -l 1.txt 2.txt # 为1.txt建立硬链接2.txt,等同于ln 1.txt 2.txt
[root@centos7 home]# more 2.txt # 查看2.txt文件中的内容和1.txt文件内容一样
hello, this is 1.txt!
这两个文件的索引节点号,可以看见索引号(inode)一样:
[root@centos7 home]# ls -li
总用量 69868
33845219 -rw-r--r--. 2 root root 44 1月 21 10:12 1.txt
33845219 -rw-r--r--. 2 root root 44 1月 21 10:12 2.txt
[root@centos7 home]# vi 2.txt # 编辑2.txt,在末未添加:
hello, this is 2.txt!
[root@centos7 home]# more 1.txt # 查看1.txt中是否内容改动
hello, this is 1.txt!
hello, this is 2.txt!
[root@centos7 home]# rm -f 1.txt # 删除1.txt
[root@centos7 home]# more 2.txt # 查看2.txt的内容
hello, this is 1.txt!
hello, this is 2.txt!
软链接
也成为符号链接(Symbolic Link),类似于 Windows 的快捷方式,其中包含的是另一个文件的位置信息;
软连接就是一个文件的快捷方式,源文件删了 软连接也就失效了 ,创建软连接 会产生一个带有 ->标志,而应,硬链接却没有。
cp -s 2.txt sLink (sLink不用手动创建 会自定生成)
为2.txt文件建立符号链接sLink,等同于ln –s 2.txt sLink
[root@centos7 home]# cp -s 2.txt sLink # 为2.txt文件建立符号链接sLink,等同于ln –s 2.txt sLink
[root@centos7 home]# ls –li # 可以看到两个文件有不同的索引节点号
总用量 69864
33845219 -rw-r--r--. 1 root root 44 1月 21 10:12 2.txt
36830246 lrwxrwxrwx. 1 root root 5 1月 21 10:21 sLink -> 2.txt
[root@centos7 home]# more sLink
hello, this is 1.txt!
hello, this is 2.txt!
[root@centos7 home]# rm -f sLink # 删除符号链接,不影响源文件
[root@centos7 home]# more 2.txt
hello, this is 1.txt!
hello, this is 2.txt!
[root@centos7 home]# rm -f 2.txt # 删除2.txt
[root@centos7 home]# ls -li
总用量 69860
36830246 lrwxrwxrwx. 1 root root 5 1月 21 10:21 sLink -> 2.txt
[root@centos7 home]# more sLink
sLink: 没有那个文件或目录
创建符号链接命令:cp -s 2.txt sLink
等同于ln –s 2.txt sLink
# 为 2.txt 文件建立符号链接 sLink
符号连接相当于快捷方式。这意味着什么呢?
- 符号连接是一个文件,一个与被它连接的文件不一样的文件。它有自己的 inode。
- 符号连接的内容应该是一个路径,该路径指示着它连接的文件。这意味着如果该路径的文件被删除了、改名字了,它即将访问不到。如果该路径下的文件被掉包了,它将访问错误的文件。
区别
挂载点
只能在同种存储媒体上的文件之间创建硬链接(Hard Link),不能在不同挂载点下的文件间创建硬链接,对于后一种情况,可以使用软链接;(区分不同挂载点与同一挂载点不同目录)
如跨不同的挂载点建立硬链接的报错信息:
[root@centos7 home]# ln 2.txt /dev/hLink
ln: 无法创建硬链接"/dev/hLink" => "2.txt": 无效的跨设备连接
目录
软连接就相当于 win 中的快捷方式即如果软链接一个目录只是一个目录的快捷方式到指定位置,操作系统找这个快捷方式会直接找到真实目录下的文件。但是硬链接的话,相当于镜像的方式,创建一个目录的硬链接之后,操作系统需要把这个目录下所有的文件都要做一次硬链接(复制一份过去),这样操作系统在访问这个链接的时候要不断去遍历,大大增加复杂度,而且很容易进入死循环。
硬链接不能对目录创建受限于文件系统的设计。Linux 文件系统中的目录均隐藏了两个特殊的目录,当前目录和父目录。其实是两个硬链接,若系统运行对目录创建硬链接,则会产生目录环。
ulimit
ulimit -a 用来显示当前的各种用户进程限制
Linux对于每个用户,系统限制其最大进程数,为提高性能,可以根据设备资源情况,
设置Linux用户的最大进程数,一些需要设置为无限制:
数据段长度:ulimit -d unlimited
最大内存大小:ulimit -m unlimited
堆栈大小:ulimit -s unlimited
选项 [options] 含义 例子
-H 设置硬资源限制,一旦设置不能增加。 ulimit – Hs 64;限制硬资源,线程栈大小为 64K。
-S 设置软资源限制,设置后可以增加,但是不能超过硬资源设置。 ulimit – Sn 32;限制软资源,32 个文件描述符。
-a 显示当前所有的 limit 信息。 ulimit – a;显示当前所有的 limit 信息。
-c 最大的 core 文件的大小, 以 blocks 为单位。 ulimit – c unlimited; 对生成的 core 文件的大小不进行限制。
-d 进程最大的数据段的大小,以 Kbytes 为单位。 ulimit -d unlimited;对进程的数据段大小不进行限制。
-f 进程可以创建文件的最大值,以 blocks 为单位。 ulimit – f 2048;限制进程可以创建的最大文件大小为 2048 blocks。
-l 最大可加锁内存大小,以 Kbytes 为单位。 ulimit – l 32;限制最大可加锁内存大小为 32 Kbytes。
-m 最大内存大小,以 Kbytes 为单位。 ulimit – m unlimited;对最大内存不进行限制。
-n 可以打开最大文件描述符的数量。 ulimit – n 128;限制最大可以使用 128 个文件描述符。
java程序相关的Linux指令
jstat
命令格式
jstat -<option> [-t] [-h<lines>] <vmid> [<interval> [<count>]]
参数解释:
Option — 选项,我们一般使用 -gcutil 查看gc情况
vmid — VM的进程号,即当前运行的java进程号
interval– 间隔时间,单位为秒或者毫秒
count — 打印次数,如果缺省则打印无数次
参数interval和count代表查询间隔和次数,如果省略这两个参数,说明只查询一次。假设需要每250毫秒查询一次进程5828垃圾收集状况,一共查询5次,那命令行如下:
jstat -gc 5828 250 5
option
选项option代表这用户希望查询的虚拟机信息,主要分为3类:类装载、垃圾收集和运行期编译状况,具体选项及作用如下:
常见术语
1、jstat –class<pid> :
显示加载class的数量,及所占空间等信息。
Loaded
装载的类的数量Bytes
装载类所占用的字节数Unloaded
卸载类的数量Bytes
卸载类的字节数Time
装载和卸载类所花费的时间
2、jstat -compiler <pid>
显示VM实时编译的数量等信息。
Compiled
编译任务执行数量Failed
编译任务执行失败数量Invalid
编译任务执行失效数量Time
编译任务消耗时间FailedType
最后一个编译失败任务的类型FailedMethod
最后一个编译失败任务所在的类及方法
jps
参数说明
-q 只显示pid,不显示class名称,jar文件名和传递给main 方法的参数
hollis@hos:/tmp/hsperfdata_hollis$ jps -q
2679
11421
-m 输出传递给main 方法的参数,在嵌入式jvm上可能是null, 在这里,在启动main方法的时候,我给String[] args传递两个参数。hollis,chuang,执行jsp -m
:
hollis@hos:/tmp/hsperfdata_hollis$ jps -m
12062 JpsDemo hollis,chuang
-l 输出应用程序main class的完整package名 或者 应用程序的jar文件完整路径名
hollis@hos:/tmp/hsperfdata_hollis$ jps -l
12356 sun.tools.jps.Jps
2679 /home/hollis/tools/eclipse//plugins/org.eclipse.equinox.launcher_1.3.0.v20130327-1440.jar
12329 com.JavaCommand.JpsDemo
-v 输出传递给JVM的参数 在这里,在启动main方法的时候,我给jvm传递一个参数:-Dfile.encoding=UTF-8,执行jps -v
:
hollis@hos:/tmp/hsperfdata_hollis$ jps -v
2679 org.eclipse.equinox.launcher_1.3.0.v20130327-1440.jar -Djava.library.path=/usr/lib/jni:/usr/lib/x86_64-linux-gnu/jni -Dosgi.requiredJavaVersion=1.6 -XX:MaxPermSize=256m -Xms40m -Xmx512m
13157 Jps -Denv.class.path=/home/hollis/tools/java/jdk1.7.0_71/lib:/home/hollis/tools/java/jdk1.7.0_71/jre/lib: -Dapplication.home=/home/hollis/tools/java/jdk1.7.0_71 -Xms8m
13083 JpsDemo -Dfile.encoding=UTF-8
PS:jps命令有个地方很不好,似乎只能显示当前用户的java进程,要显示其他用户的还是只能用unix/linux的ps命令。
jps是我最常用的java命令。使用jps可以查看当前有哪些Java进程处于运行状态。如果我运行了一个web应用(使用tomcat、jboss、jetty等启动)的时候,我就可以使用jps查看启动情况。有的时候我想知道这个应用的日志会输出到哪里,或者启动的时候使用了哪些javaagent,那么我可以使用
jps -v
查看进程的jvm参数情况。
jstack
stack用于生成java虚拟机当前时刻的线程快照。线程快照是当前java虚拟机内每一条线程正在执行的方法堆栈的集合,生成线程快照的主要目的是定位线程出现长时间停顿的原因,如线程间死锁、死循环、请求外部资源导致的长时间等待等。 线程出现停顿的时候通过jstack来查看各个线程的调用堆栈,就可以知道没有响应的线程到底在后台做什么事情,或者等待什么资源
jstack查找高度占用CPU的java代码步骤
第一步:执行top
命令 ,找到最耗CPU的java线程
找到最耗CPU的java线程
ps -mp pid -o THREAD,tid,time
#或者
#ps -Lfp pid
执行ps -mp 7957 -o THREAD,tid
USER %CPU PRI SCNT WCHAN USER SYSTEM TID
webuser 85.6 - - - - - -
webuser 0.0 19 - futex_ - - 7987
webuser 0.0 19 - futex_ - - 7988
webuser 0.0 19 - futex_ - - 7989
webuser 0.0 19 - futex_ - - 7990
webuser 0.0 19 - futex_ - - 7991
webuser 74.3 19 - - - - 7992
webuser 0.5 19 - futex_ - - 7993
可以看出是在id为7957的进程中id为7992的线程高度占用cpu。
这个时候我们就找到具体哪段代码有问题!
我们先使用jstack命令把java堆栈信息打印到一个文件中。
jstack 7957 > test.txt
接着执行:
grep `printf "%x\n" 7992` test -A 30
Jmap
jmap是JDK自带的工具软件,主要用于打印指定Java进程(或核心文件、远程调试服务器)的共享对象内存映射或堆内存细节
用法摘要
Usage:
jmap [option] <pid>
(to connect to running process)
jmap [option] <executable <core>
(to connect to a core file)
jmap [option] [server_id@]<remote server IP or hostname>
(to connect to remote debug server)
where <option> is one of:
<none> to print same info as Solaris pmap
-heap to print java heap summary
-histo[:live] to print histogram of java object heap; if the "live"
suboption is specified, only count live objects
-permstat to print permanent generation statistics
-finalizerinfo to print information on objects awaiting finalization
-dump:<dump-options> to dump java heap in hprof binary format
dump-options:
live dump only live objects; if not specified,
all objects in the heap are dumped.
format=b binary format
file=<file> dump heap to <file>
Example: jmap -dump:live,format=b,file=heap.bin <pid>
-F force. Use with -dump:<dump-options> <pid> or -histo
to force a heap dump or histogram when <pid> does not
respond. The "live" suboption is not supported
in this mode.
-h | -help to print this help message
-J<flag> to pass <flag> directly to the runtime system
总结
1.如果程序内存不足或者频繁GC,很有可能存在内存泄露情况,这时候就要借助Java堆Dump查看对象的情况。
2.要制作堆Dump可以直接使用jvm自带的jmap命令
3.可以先使用jmap -heap
命令查看堆的使用情况,看一下各个堆空间的占用情况。
4.使用jmap -histo:[live]
查看堆内存中的对象的情况。如果有大量对象在持续被引用,并没有被释放掉,那就产生了内存泄露,就要结合代码,把不用的对象释放掉。
5.也可以使用 jmap -dump:format=b,file=<fileName>
命令将堆信息保存到一个文件中,再借助jhat命令查看详细内容
6.在内存出现泄露、溢出或者其它前提条件下,建议多dump几次内存,把内存文件进行编号归档,便于后续内存整理分析。
ps -ef|grep详解
ps命令将某个进程显示出来
grep命令是查找
linux 命令行grep查询带双引号的字符串可以放在''里面当做关键字查询
./kafka-console-consumer.sh --bootstrap-server 10.3.32.47:9092,10.3.32.8:9092,10.3.32.4:9092 --topic zsc_abtest_log |grep '"abtest_key":"exo9rmbqq"'
中间的|是管道命令 是指ps命令与grep同时执行
PS是LINUX下最常用的也是非常强大的进程查看命令
grep命令是查找,是一种强大的文本搜索工具,它能使用正则表达式搜索文本,并把匹配的行打印出来。
grep全称是Global Regular Expression Print,表示全局正则表达式版本,它的使用权限是所有用户。
以下这条命令是检查java 进程是否存在:ps -ef |grep java
字段含义如下:
UID PID PPID C STIME TTY TIME CMD
zzw 14124 13991 0 00:38 pts/0 00:00:00 grep --color=auto dae
UID :程序被该 UID 所拥有
PID :就是这个程序的 ID
PPID :则是其上级父程序的ID
C :CPU使用的资源百分比
STIME :系统启动时间
TTY :登入者的终端机位置
TIME :使用掉的CPU时间。
CMD :所下达的是什么指令
rm
简述:删除命令,remove。使用rm命令要格外小心。因为一旦删除了一个文件,就无法再恢复它,少用。一般结合find删除。
d:直接把欲删除的目录的硬连接数据删除成0,删除该目录;
-f:强制删除文件或目录;
-i:删除已有文件或目录之前先询问用户;
-r或-R:递归处理,将指定目录下的所有文件与子目录一并处理;
--preserve-root:不对根目录进行递归操作;
-v:显示指令的详细执行过程。
-> rm /test/aa.txt :删除/test/aa.txt文件。 不加参数会提示确认删除。
-> rm –f /test/aa.txt :强制删除,不会出提示。
-> rm –r /test :删除目录,目录下若有文件,则每个文件都会提示,可以加f参数
重定向(> />>/<<)
注意:有时候写脚本 文件删除了 重定向文件文件不会出现了
简述:标准输出/输入,结合echo会创建文件覆盖文件内容或追加内容。
>覆盖文件
>> 追加内容到文件
-> echo ‘I like linux’>/data.txt 如果data.txt不存在则创建 并把内容输入进文件。如果文件存在则覆盖内容。
-> echo ‘I like linux’>>/data.txt 追加内容到文件尾部。
-> echo ‘aa
bb
cc’>>/data.txt 追加多行内容。
-> cat >>/data.txt<<EOF
I like linux
you like linux
EOF :此用法结合了cat和>>和<<,可以追加多行内容,内容用EOF包裹,EOF可以用任意重复字符替换,只要内容不存在就可以。文件不存在会自动创建文件
重定向概念
-> >或1> 输出重定向:把前面输出的东西输入到后边的文件中,会清除文件原有内容。-> >>或1> 追加重定向:把前面输出的东西追加到后边的文件尾部,不会清除文件原有内容。-> 0<或<< 输入重定向:输入重定向用于改变命令的输入,后面指定输入内容,前面跟文件名。-> 2> 错误重定向:把错误信息输入到后边的文件中,会删除文件原有内容。-> 2>> 错误追加重定向:把错误信息追加到后边的文件中,不会删除文件原有内容。 箭头的指向就是数据的流向。
数字0表示标准输入(stdin),默认可以不用写。
数字1表示正常输出(stdout)。
数字2表示标准错误输出(stderr)
-> echo 1 2 3 4 >/data.txt xargs –n 2 </data.txt 其中2表示两个一组。输出如下:
1 2
3 4
-> echo girl >a.txt 2>a.txt 将正确或者错误信息都输入到 a.txt。echo girl >a.txt 2>&1 和上面的意思一样,不同的写法,这个常用。
echo girl &>a.txt 和上面意思一样,正确和错误信息都放入a.txt
man
简述:查看命令的帮助信息。
-> man mv:查看mv命令的帮助信息
xargs
简述:从标准输入获取内容创建和执行命令。
-n 接数字相当于分组。
-> echo 1 2 3 4 >/data.txt
xargs –n 2 </data.txt 其中2表示两个一组。输出如下:
1 2
3 4
清空文件
“: > test.log“或"echo "" > test.log"或"echo > test.log"
more,less,clear
n more,less命令
这两个命令用于查看文件,如果一个文件太长,显示内容超出一个屏幕,用cat命令只能看到最后的内容,用more和less两个命令可以分页查看。more指令可以使超过一页的文件内容分页暂停显示,用户按键后才继续显示下一页。而less除了有more的功能以外,还可以用方向键往上或往下的滚动文件,更方便浏览阅读。
less的常用动作命令:
less 在查看之前不会加载整个文件。可以尝试使用 less 和 vi 打开一个很大的文件,你就会看到它们之间在速度上的区别。
在 less 中导航命令类似于 vi。
当使用命令 less file-name 打开一个文件后,可以使用下面的指令操作所打开的文件。
搜索 /
/关键字 就可以搜索关键字 ,比如 /MAIL表示在文件中搜索MAIL单词
回车键 向下移动一行;
y 向上移动一行;
空格键 向下滚动一屏;
下面的,命令要和shift一起使用
b 向上滚动一屏;
d 向下滚动半屏;
h less的帮助;
u 向上洋动半屏;
w 可以指定显示哪行开始显示,是从指定数字的下一行显示;比如指定的是6,那就从第7行显示;
g 跳到第一行;
G 跳到最后一行;
p n% 跳到n%,比如 10%,也就是说比整个文件内容的10%处开始显示;
v 调用vi编辑器;
q 退出less
!command 调用SHELL,可以运行命令;比如!ls 显示当前列当前目录下的所有文件;
n clear命令
clear命令是用来清除当前屏幕显示的,不需任何参数,和dos下的cls命令功能相同。
Tail和head命令
head命令是用来查看具体文件的前面几行的内容,具体格式如下:
head <filename>:
你可以通过head命令查看具体文件最初的几行内容,该命令默认是前10行内容,如果你想查看前面更多内容,你可以通过一个数字选项来设置,head-20 例如
head -20 install.log
通过上面命令你可以查看install.log这个文件前面20行的内容
与head命令相反,tail命令是用来查看具体文件后面几行的内容,默认情况下,是查看该文件尾10行的内容,同样,如果想查看后面更多内容,也是通过数字选项来设置,例如
tail -20 install.log
tail -n 100 查看文件的最后100行
你还可以使用 tail 来观察日志文件被更新的过程。使用 -f 选项,tail 会自动实时
-F删除后 重新创建名字相同的文件也可以继续监视。
地把打开文件中的新消息显示到屏幕上。例如,要即时观察 /var/log/messages的变化,以根用户身份在 shell 提示
下键入以下命令:
tail -f /var/log/messages
wc [option] filename统计文件字数
功能:统计文件中的文件行数、字数和字符数。
选项:
-l lines 统计文件的行数
Wc -l 1.txt 回车
-w words 统计文件的单词数 (英文单字)
-c bytes 统计文件的字节数
-m chars 统计文件字符数
文件的拷贝,剪贴 ,重命名
拷贝
拷贝文件: cp 文件目录 粘贴的文件目录/[重命名]
拷贝文件夹 cp 文件夹目录 粘贴的文件目录/[重命名] -r
剪切
mv 剪切 文件目录 粘贴的文件目录/[重命名]
其中MV 默认递归
Rename 重命名
rename支持通配符
? 可替代单个字符
* 可替代多个字符
把一txt结尾的文件后缀改成tar
rename .txt .txt.bar *
Linux下对文件重命名有两种命令: mv ,rename
mv很简单,move文件移动
mv /dir/file1 /dir2/file1
两个参数,第一个是源文件,第二个是目的地,如果第二个参数文件名不一样,则会重命名。
当两个参数不带目录,只有文件名时,那就是重命名了。这是单个文件的重命名。
rename arg1 arg2 arg3
rename才是真正的批量重命名命令。而且他是3个参数,不是2个。
arg1:旧的字符串
arg2:新的字符串
arg3:匹配要重命名的文件,可以使用3种通配符,*所有文件、?满足某个字符匹配的文件、[char],*表示任意多个字符,?表示单个字符,[char]匹配char单个自定的精确字符,可以填写任意字符,foo[a]*表示只匹配fooa开头的文件名,如果一个文件是foobcc.txt,是不会被匹配的。
值的注意的是,此命令在不同的linux版本也有不同,Debian一系的操作系统别有用法。举例说明:
比如/home下有两个文件 abbcc.txt, addbb.txt , a.txt
我想把a替换为xxx,命令是这样的 : rename “a” “xxx” *.txt
那么它会首先去匹配有哪些文件需要修改,这里凡是.txt后缀的文件都会被匹配,如果改成?.txt则只会匹配到一个文件,那就是a.txt。然后把匹配到的文件中的a字符替换为xxx,注意测试时abab.txt这样的,只会替换第一个a,有待再了解。
rename支持正则表达式
字母的替换
rename "s/AA/aa/" * //把文件名中的AA替换成aa
S 从开头 开始 *匹配所有
修改文件的后缀
rename "s//.html//.php/" * //把.html 后缀的改成 .php后缀
批量添加文件后缀
rename "s/$//.txt/" * //把所有的文件名都以txt结尾
批量删除文件名
rename "s//.txt//" * //把所有以.txt结尾的文件名的.txt删出
~线下的`
可以转移指令,
例如 echo `ll` >> a.txt
一般用于 把一个指令的结果写到文件中
Linux 通配符
*:匹配所有
?:匹配单个字符
打包 压缩与解压
打包tar:将多个文件打入一个包文件(tar文件; tar ball)
打包:
格式 tar -cf 打包到的文件夹 需要打包的文件 可以多个 用空格隔开
tar -cf doc.tar ./a.txt ./b.txt ./*.dat ## 将a.txt,b.txt *.dat打入doc.tar包
解包:
tar -xf 要解包的文件
tar -xf doc.tar
压缩:
gzip a.txt
gzip doc.tar ## 得到 doc.tar.gz
解压:
gzip -d doc.tar.gz ## 得到doc.tar
打包和压缩可以一次性完成:
tar -zcf doc.tar.gz ./a.txt ./b.txt ./c.txt ## 将abc三个文件打包,然后压缩
解包和解压缩可以一次性完成:
tar -zxvf doc.tar.gz ## 将doc.tar.gz解压,然后解包
tar -zxvf doc.tar.gz -C /home/ ## 将doc.tar.gz解压到/home目录下去
注意:有的文件可能不经过打包直接压缩的,此时解压只能使用gzip -d
从windows上传文件指令和安装指令文件
ALT +P
可以直接把文件从windows下托过去
Rz
上传文件
如果无法使用说明没有安装rz软件
使用 yum list | grep rz 找到re的安装软件
然后安装
yum -y install lrzsz
可以试着安装其他的 如man 一样的方式 先搜 再按
Yum指令
Yum list
Yum list |gerp 关键字
从yum中搜索安装包
Yum -y install 安装包名字
安装软件
Yum info 安装包名字
显示安装包信息
网络指令:
Ping
用于确定主机能不能和另一台主机进行数据包交换
Ping 后面加要测试的主机ip
修改主机名
临时生效:
hostname 主机名
永久生效:修改配置文件
vim /etc/sysconfig/network
显示主机名:
# hostname
linmu100
此主机的主机名是linmu100,不加参数是用来显示当前主机的主机名;
临时设置主机名:
# hostname test100
# hostname 注:显示主机名
test100
通过hostname 工具来设置主机名只是临时的,下次重启系统时,此主机名将不会存在;
显示主机IP:
# hostname -i
192.168.1.100
修改映射关系
修改主机名和ip地址之间的映射关系
vim /etc/hosts
192.168.2.120 node-1.edu node-1
可配置别名
Chkconfig --list
查看所有linux下的所有服务
Ipconfig
查询本地ip 默认网关,子网掩码等信息
netstat
显示每个网络接口设备的连接状态信息
Netstat -ltnp 查看tcp的所有的网络端口
L 监听 t tcp n 数字 p port
查看具体某一个端口使用状态
Netstat -ltnp | grep 8080
防火墙操作
防火墙无法启动
iptables -F
service iptables save
service iptables restart
Service iptables status 查看防火墙的状态
service iptables stop 关闭防火墙
service iptables start 开启防火墙
Chkconfig iptables off 开机就关掉防火墙Chkconfig iptables on 开机重启防火墙
Tracert
追踪每个网点经过的每一个ip地址
如 tracert www.baidu
会显示 这次请求经过的所有的ip地址,最后一个是百度地址。第一是本地地址。
find
命令路径:/bin/find 执行权限:所有用户
作用:查找文件或目录
语法:find [搜索路径] [匹配条件]
在哪里搜 怎么搜 搜索匹配
如果没有指定搜索路径,默认从当前目录查找
find命令选项
-name 按名称查找 精准查找
eg:find /etc -name “init” 在目录/etc中查找文件init
-iname 按名称查找
find查找中的字符匹配:
*:匹配所有
?:匹配单个字符
eg:find /etc -name “init???” 在目录/etc中查找以init开头的,且后面有三位的文件
-size 按文件大小查找
以block为单位,一个block是512B,0.5K +大于 -小于 不写是等于
eg:find /etc -size -204800 在etc目录下找出大于100MB的文件
100MB=102400KB=204800block
-type 按文件类型查找
f 二进制文件 l 软连接文件 d 目录
eg: find /dev -type c
find查找的基本原则:
占用最少的系统资源,即查询范围最小,查询条件最精准
eg:
如果明确知道查找的文件在哪一个目录,就直接对指定目录查找,不查找根目录/
grep命令
命令路径:/bin/grep 执行权限:所有用户
作用:在文件中搜寻字串匹配的行并输出 就是一般用于查找关键字。
常和 yum ps du 等命令查找某个命令的具体大属性
ps aux | grep sam 查看用户sam执行的进程
语法:grep [-cinv] '搜寻字符串' filename
选项与参数:
-c :输出匹配行的次数(是以行为单位,不是以出现次数为单位)
-i :忽略大小写,所以大小写视为相同
-n :显示匹配行及行号
-v :反向选择,显示不包含匹配文本的所有行。
eg:grep ftp /etc/services
eg:#grep -v ^# /etc/inittab 去掉文件行首的#号
eg:# grep -n “init”/etc/inittab 显示在inittab文件中,init匹配行及行号
eg:# grep -c“init”/etc/inittab 显示在inittab文件中,init匹配了多少次
grep 搜索本身带有双引号的字符串,需要对双引号转义,在"前面加上 "\
比如 :搜索"type":"2" grep "\"type"\":"\"2"\"
which
命令路径:/usr/bin/which 执行权限:所有用户
作用:显示系统命令所在目录(绝对路径及别名)
which命令的作用是,在PATH变量指定的路径中,搜索某个系统命令的位置,并且返回第一个搜索结果。也就是说,使用which命令,就可以看到某个系统命令是否存在,以及执行的到底是哪一个位置的命令
# which ls
alias ls='ls --color=auto'
/bin/ls
# which zs
/usr/bin/which: no zs in (/usr/local/bin:/usr/bin:/bin:/usr/local/sbin:/usr/sbin:/sbin:/home/ch/bin)
whereis
命令路径:/usr/bin/whereis 执行权限:所有用户
作用:搜索命令所在目录 配置文件所在目录 及帮助文档路径
eg: which passwd 和 whereis passwd
eg:查看/etc/passwd配置文件的帮助,就用 man 5 passwd
在linux系统查找jdk的安装路径:whereis java
which java (java执行路径)
磁盘空间命令
df命令 系统的磁盘空间
作用:用于查看Linux文件系统的状态信息,显示各个分区的容量、已使用量、未使用量及挂载点等信息。看剩余空间
语法:df [-hkam]
-h(human-readable)根据磁盘空间和使用情况 以易读的方式显示 KB,MB,GB等
-k 以KB 为单位显示各分区的信息,默认
-M 以MB为单位显示信息
-a 显示所有分区包括大小为0 的分区
du命令 文件大小
作用:用于查看文件或目录的大小(磁盘使用空间)
语法:du [-ahs] [文件名目录]
-a 显示子文件的大小
-h以易读的方式显示 KB,MB,GB等
-s summarize 统计总占有量
eg:
du -a(all) /home 显示/home 目录下每个子文件的大小,默认单位为kb
du -h /home 以K,M,G为单位显示/home 文件夹下各个子目录的大小
du -sh /home 以常用单位(K,M,G)为单位显示/home 目录的总大小 -s summarize
df命令和du命令的区别:
df命令是从文件系统考虑的,不仅考虑文件占用的空间,还要统计被命令或者程序占用的空间。
du命令面向文件,只计算文件或目录占用的空间。
#df –h /
作用:查看内存及交换空间#du –sh /
free 内存
使用状态
语法: free [-kmg]
-k: 以KB为单位显示,默认就是以KB为单位显示
-m: 以MB为单位显示
-g: 以GB为单位显示
清理缓存命令:
echo 1 > /proc/sys/vm/drop_caches
top
top命令是Linux下常用的性能分析工具,能够实时显示系统中各个进程的资源占用状况,类似于Windows的任务管理器
常用操作:
top //每隔5秒显式所有进程的资源占用情况
top -d 2 //每隔2秒显式所有进程的资源占用情况
top -c //每隔5秒显式进程的资源占用情况,并显示进程的命令行参数(默认只有进程名)
top -p 12345 -p 6789//每隔5秒显示pid是12345和pid是6789的两个进程的资源占用情况
top -d 2 -c -p 123456 //每隔2秒显示pid是12345的进程的资源使用情况,并显式该进程启动的命令行参数
参数含义
top - 01:06:48 up 1:22, 1 user, load average: 0.06, 0.60, 0.48
Tasks: 29 total, 1 running, 28 sleeping, 0 stopped, 0 zombie
Cpu(s): 0.3% us, 1.0% sy, 0.0% ni, 98.7% id, 0.0% wa, 0.0% hi, 0.0% si
Mem: 191272k total, 173656k used, 17616k free, 22052k buffers
Swap: 192772k total, 0k used, 192772k free, 123988k cached
PID USER PR NI VIRT RES SHR S %CPU %MEM TIME+ COMMAND
1379 root 16 0 7976 2456 1980 S 0.7 1.3 0:11.03 sshd
14704 root 16 0 2128 980 796 R 0.7 0.5 0:02.72 top
1 root 16 0 1992 632 544 S 0.0 0.3 0:00.90 init
2 root 34 19 0 0 0 S 0.0 0.0 0:00.00 ksoftirqd/0
3 root RT 0 0 0 0 S 0.0 0.0 0:00.00 watchdog/0
统计信息区前五行是系统整体的统计信息。第一行是任务队列信息,同 uptime 命令的执行结果。其内容如下:
01:06:48 当前时间
up 1:22 系统运行时间,格式为时:分
1 user 当前登录用户数
load average: 0.06, 0.60, 0.48 系统负载,即任务队列的平均长度。三个数值分别为 1分钟、5分钟、15分钟前到现在的平均值。
第二、三行为进程和CPU的信息。当有多个CPU时,这些内容可能会超过两行。内容如下:
total 进程总数
running 正在运行的进程数
sleeping 睡眠的进程数
stopped 停止的进程数
zombie 僵尸进程数
Cpu(s):
0.3% us 用户空间占用CPU百分比
1.0% sy 内核空间占用CPU百分比
0.0% ni 用户进程空间内改变过优先级的进程占用CPU百分比
98.7% id 空闲CPU百分比
0.0% wa 等待输入输出的CPU时间百分比
0.0%hi:硬件CPU中断占用百分比
0.0%si:软中断占用百分比
0.0%st:虚拟机占用百分比
平均负载和cpu使用率很容易混淆,平均负载是指单位时间内,处于可运行状态和不可中断状态的进程数。
简单来说,平均负载是指单位时间内,系统处于可运行状态和不可中断状态的平均进程数,也就是平均活跃进程数,它和 CPU使用率没有直接的关系。所谓可运行状态的进程,是指正在使用 CPU 或者正在等待 CPU 的进程,也就是我们常用 ps 命令看到的,处于 R 状态(Running 或 Runnable)的进程。不可中断状态的进程则是正处于内核态关键流程中的进程,并且这些流程是不可打断的,比如最常见的是等待硬件设备的 I/O 响应,也就是我们在 ps 命令中看到的 D 状态(Uninterruptible Sleep,也称为 Disk Sleep)的进程。所以,它不仅包括了正在使用 CPU 的进程,还包括等待 CPU 和等待 I/O 的进程。而 CPU 使用率,是单位时间内 CPU 繁忙情况的统计,跟平均负载并不一定完全对应。比如CPU 密集型进程,使用大量 CPU 会导致平均负载升高,此时两者是一致的I/O 密集型进程,等待 I/O 也会导致平均负载升高,但CPU使用率不一定高大量等待 CPU 的进程调度也会导致平均负载升高,此时的 CPU 使用率也会比较高。
ldconfig
参考:http://man.linuxde/ldconfig
https://blog.csdn/chenzixun0/article/details/56278632
主要是在默认搜寻目录/lib
和/usr/lib
以及动态库配置文件/etc/ld.so.conf
内所列的目录下,搜索出可共享的动态链接库(格式如lib*.so*
),进而创建出动态装入程序(ld.so
)所需的连接和缓存文件,缓存文件默认为/etc/ld.so.cache
,此文件保存已排好序的动态链接库名字列表。linux下的共享库机制采用了类似高速缓存机制,将库信息保存在/etc/ld.so.cache
,程序连接的时候首先从这个文件里查找,然后再到ld.so.conf
的路径中查找。为了让动态链接库为系统所共享,需运行动态链接库的管理命令ldconfig
,此执行程序存放在/sbin目录下。
ldconfig命令参数:
- -v或–verbose:ldconfig将显示正在扫描的目录及搜索到的动态链接库,还有它所创建的连接的名字
- -f CONF:此选项指定动态链接库的配置文件为CONF,系统默认为/etc/ld.so.conf
- -p或–print-cache:此选项指示ldconfig打印出当前缓存文件所保存的所有共享库的名字。
- -V:此选项打印出ldconfig的版本信息,而后退出。
从以上可知:
- 在
/lib
和/usr/lib
里面添加库文件,是无需将路径添加到/etc/ld.so.conf
中去的,但是需要使用命令sudo ldconfig
,否则无法找到库文件。在上述两个目录之外的路径添加库文件,需要先将将库文件的路径追加入/etc/ld.so.conf
,假设库文件在/usr/local/mysql/lib
中,可以使用命令:
echo "/usr/local/mysql/lib" >> /etc/ld.so.conf
sudo ldconfig -v | grep mysql # 查看mysql库文件是否被找到。
- 1若在
/lib
和/usr/lib
之外的目录中添加库文件,而又不在/etc/ld.so.conf
中写入路径,此时可以用添加环境变量LD_LIBRARY_PATH
的做法让系统识别到库文件。
export LD_LIBRARY_PATH=$LD_LIBRARY_PATH:/usr/local/mysql/lib
- 可以在
/etc/ld.so.conf.d/
目录下创建.conf
文件来添加库路径。在默认的/etc/ld.so.conf
文件中,可以看到有如下内容:
include /etc/ld.so.conf.d/*.conf
说明/etc/ld.so.conf.d/
目录下所有的.conf
文件都被包含,文件中所有的路径都会被搜索到。
例如:
touch opencv.conf
echo "/user/local/lib" > opencv.conf
sudo ldconfig
ps常用参数
根据用户过滤进程
在需要查看特定用户进程的情况下,我们可以使用 -u 参数。比如我们要查看用户'pungki'的进程,可以通过下面的命令:
$ ps -u pungki
通过cpu和内存使用来过滤进程
也许你希望把结果按照 CPU 或者内存用量来筛选,这样你就找到哪个进程占用了你的资源。要做到这一点,我们可以使用 aux 参数,来显示全面的信息:
$ ps -aux | less
显示全面信息
当结果很长时,我们可以使用管道和less命令来筛选。
默认的结果集是未排好序的。可以通过 --sort命令来排序。
根据 CPU 使用来升序排序
$ ps -aux --sort -pcpu | less
根据cpu使用排序
根据 内存使用 来升序排序
$ ps -aux --sort -pmem | less
通过cpu和内存使用来过滤进程
也许你希望把结果按照 CPU 或者内存用量来筛选,这样你就找到哪个进程占用了你的资源。要做到这一点,我们可以使用 aux 参数,来显示全面的信息:
- $ ps -aux | less
显示全面信息
当结果很长时,我们可以使用管道和less命令来筛选。
默认的结果集是未排好序的。可以通过 --sort命令来排序。
根据 CPU 使用来升序排序
- $ ps -aux --sort -pcpu | less
根据cpu使用排序
根据 内存使用 来升序排序
$ ps -aux --sort -pmem | less
进程管理命令
stat 显示指定文件的详细信息,比ls更详细
who 显示在线登陆用户
whoami 显示当前操作用户
hostname 显示主机名
uname 显示系统信息
top 动态显示当前耗费资源最多进程信息
ps 显示瞬间进程状态 ps -aux
查看具体某个进程的状态
Ps aux | grep java 查看java程序的进程状态
du 查看目录大小 du -h /home带有单位显示目录信息
du 文件 -sh 查看文件大小并计算总和。
du 1.txt -h 显示1.txt 文件的大小
df 查看磁盘大小 df -h 带有单位显示磁盘信息
ifconfig 查看网络情况
ping 测试网络连通
netstat 显示网络状态信息
man 命令不会用了,找男人 如:man ls
clear 清屏
alias 对命令重命名 如:alias showmeit="ps -aux" ,另外解除使用unaliax showmeit
nohup和&后台运行,进程查看及终止
用途:不挂断地运行命令。
语法:nohup Command [ Arg … ] [ & ]
无论是否将 nohup 命令的输出重定向到终端,输出都将附加到当前目录的 nohup.out 文件中。
如果当前目录的 nohup.out 文件不可写,输出重定向到 $HOME/nohup.out 文件中。
如果没有文件能创建或打开以用于追加,那么 Command 参数指定的命令不可调用。
退出状态:该命令返回下列出口值:
126 可以查找但不能调用 Command 参数指定的命令。
127 nohup 命令发生错误或不能查找由 Command 参数指定的命令。
否则,nohup 命令的退出状态是 Command 参数指定命令的退出状态。
&
用途:在后台运行
一般两个一起用
nohup command &
eg:
1 | nohup /usr/local/node/bin/node /www/im/chat.js >> /usr/local/node/output.log 2>&1 & |
&2 2>&1 的区别
0 是一个文件描述符,表示标准输入(stdin)
1 是一个文件描述符,表示标准输出(stdout)
2 是一个文件描述符,表示标准错误(stderr)
一般来说, "1>" 通常可以省略成 ">".
& 是一个描述符,如果1或2前不加&,会被当成一个普通文件。
1>&2 意思是把标准输出重定向到标准错误.
2>&1 意思是把标准错误输出重定向到标准输出。
&>filename 意思是把标准输出和标准错误输出都重定向到文件filename中
例子
ls nodir 1> filename.txt 2>&1
cat filename.txt
ls: nodir: No such file or directory
&> 与 >的区别上面例子把 标准输出 重定向到文件 filename.txt,然后把 标准错误 重定向到 标准输出,所以最后的错误信息也通过标准输出写入到了文件中
linux &> 与 >的区别(也可以说成是linux stdout(标准输出) stderr(标准错误)的区别)
&>可以将stderr错误信息重定向输出
>可以将stdout标准输出信息重定向输出
下面是实际在linux命令行的测试结果:
[root@Dev_yang shellScript]# lll
-bash: lll: command not found //由于Linux没有lll这个命令所以会显示错误信息,这个就是stderr输出的错误信息
[root@Dev_yang shellScript]# lll>test
-bash: lll: command not found //由于这个是错误信息 所以不能使用标准输出>将信息重定向到test文件中,所以错误信息直接在控制台打印出来了
[root@Dev_yang shellScript]# lll&>test //使用&>重定向 错误信息没有输出到控制台了,表示错误信息正确重定向到了test文件
[root@Dev_yang shellScript]# cat test
-bash: lll: command not found //通过cat命令确实看到了 保存的错误信息
总结:>只能将正常信息重定向
&>可以将错误信息或者普通信息都重定向输出
查看运行的后台进程
(1)jobs -l
jobs命令只看当前终端生效的,关闭终端后,在另一个终端jobs已经无法看到后台跑得程序了,此时利用ps(进程查看命令)
ps
作用:查看系统中的进程信息
语法:ps [-auxle]
常用选项
a:显示所有用户的进程
u:显示用户名和启动时间
x:显示没有控制终端的进程
e:显示所有进程,包括没有控制终端的进程
l:长格式显示
查看系统中所有进程
# ps aux #查看系统中所有进程,使用BSD操作系统格式,unix
# ps -le #查看系统中所有进程,使用Linux标准命令格式
ps应用实例
# ps -u or ps -l 查看隶属于自己进程详细信息
# ps aux | grep sam 查看用户sam执行的进程
# ps -ef | grep init 查看指定进程信息
pstree
作用:查看当前进程树
语法:pstree [选项]
-p 显示进程PID
-u 显示进程的所属用户
top
作用:查看系统健康状态
显示当前系统中耗费资源最多的进程,以及系统的一些负载情况。
语法:top [选项]
-d 秒数,指定几秒刷新一次,默认3秒(动态显示)
kill
作用:关闭进程
语法:kill [-选项] pId
kill -9 进程号(强行关闭) 常用
kill -1 进程号(重启进程)
权限管理
不同用户(不同的用户的组)对不同的文件具有不同的操作权利叫做权限
一般安装软件尽量在user/local这个共享目录下 ,因为放在root目录下 别的用户是没有权限操作的。
三种基本权限
r 读权限(read) 可读
w 写权限(write) 可写
x 执行权限 (execute) 可执行
权限说明
快速 设置权限
把 文件的权限列 列好 有权写的标1 无标0
然后就可以转化成 十进制 ,777表示所有权限都有
7**表示对这个文件有所有权限。
普通方法设置权限
权限更改-chmod
英文:change mode (change the permissions mode of a file)
作用:改变文件或目录权限
语法:
chmod [{ugoa}{+-=}{rwx}] [文件名或目录]
-取消权限 + 增加权限
加减号后面可以一次操作多个权限
也可以
chmod [mode=421] [ 文件或目录]
参数:-R 下面的文件和子目录做相同权限操作(Recursive递归的)
思考:一个文件的权限谁可以更改? root 所有者
root
文件所有者
例如:chmod u+x a.txt
chmod u+x,o-x a.txt
用数字来表示权限(r=4,w=2,x=1,-=0)
例如:chmod 750 b.txt
rwx和数字表示方式能随意切换
注意:root用户是超级用户,不管有没有权限,root都能进行更改。用普通用户测试权限。
不能用一个普通用户去修改另一个普通用户的权限。
更改所有者-chown
英文:change file ownership
作用:更改文件或者目录的所有者
语法 : chown user[:group] file...
-R : 递归修改
参数格式 :
user : 新的档案拥有者的使用者 ID
group : 新的档案拥有者的使用者群体(group)
eg:#chown lee file1 把file1文件的所有者改为用户lee
eg:#chown lee:test file1 把file1文件的所有者改为用户lee,所属组改为test
eg:#chown –R lee:test dir 修改dir及其子目录的所有者和所属组
改变所属组chgrp
英文:change file group ownership
作用:改变文件或目录的所属组
语法 : chgrp [group] file...
eg:chgrp root test.log 把test.log的所属组修改为root
文件:
r-cat,more,head,tail,less
w-echo,vi
x-命令,脚本
目录:
r-ls
w -touch,mkdir,rm,rmdir
x-cd
能删除文件的权限是对该文件所在的目录有wx权限。
所有者 所属组 其他人
第1位:文件类型(d 目录,- 普通文件,l 链接文件) (文件的类型)
第2-4位:所属用户(所有者)权限,用u(user)表示(用户的权限)
第5-7位:所属组权限,用g(group)表示(用户所在组的权限)
第8-10位:其他用户(其他人)权限,用o(other)表示(不在组中的其他人)
第2-10位:表示所有的权限,用a(all)表示 所有人
类型: f 二进制文件 l 软连接文件 d 目录
字符 | 权限 | 对文件的含义 | 对目录的含义 |
r | 读权限 | 可以查看文件内容 | 可以列出目录的内容(ls) |
w | 写权限 | 可以修改文件内容 | 可以在目录中创建删除文件( mkdir,rm ) |
x | 执行权限 | 可以执行文件 | 可以进入目录(cd) |
用户管理命令
Exit
突出当前用户 回到root用户
useradd
添加用户
语法:useradd [选项] 用户名
passwd
修改密码命令
语法:passwd [选项] [用户名]
Passwd reba 回车输入密码
518189
用户密码:生产环境中,用户密码长度8位以上,设置大小写加数字加特殊字符,要定期更换密码。
ys^h_L9t
userdel(user delete)
删除用户
-r 删除账号时同时删除宿主目录(remove)
一定要使用 —r这样能彻底删除
Linux 命令行快捷键
涉及在linux命令行下进行快速移动光标、命令编辑、编辑后执行历史命令、Bang(!)命令、控制命令等。让basher更有效率。
常用指令
ctrl+左右键:在单词之间跳转
ctrl+a:跳到本行的行首
ctrl+e:跳到页尾
Ctrl+u:删除当前光标前面的文字 (还有剪切功能)
ctrl+k:删除当前光标后面的文字(还有剪切功能)
Ctrl+L:进行清屏操作
Ctrl+y:粘贴Ctrl+u或ctrl+k剪切的内容
Ctrl+w:删除光标前面的单词的字符
Alt – d :由光标位置开始,往右删除单词。往行尾删
说明
Ctrl – k: 先按住 Ctrl 键,然后再按 k 键;
Alt – k: 先按住 Alt 键,然后再按 k 键;
M – k:先单击 Esc 键,然后再按 k 键。
移动光标
在主界面的时候vi区分开
Ctrl – a :移到行首
Ctrl – e :移到行尾 end
Ctrl – b :往回(左)移动一个字符
Ctrl – f :往后(右)移动一个字符
Alt – b :往回(左)移动一个单词
Alt – f :往后(右)移动一个单词
Ctrl – xx :在命令行尾和光标之间移动
M-b :往回(左)移动一个单词
M-f :往后(右)移动一个单词
编辑命令
Ctrl – h :删除光标左方位置的字符
Ctrl – d :删除光标右方位置的字符(注意:当前命令行没有任何字符时,会注销系统或结束终端)
Ctrl – w :由光标位置开始,往左删除单词。往行首删
Alt – d :由光标位置开始,往右删除单词。往行尾删
M – d :由光标位置开始,删除单词,直到该单词结束。
Ctrl – k :由光标所在位置开始,删除右方所有的字符,直到该行结束。
Ctrl – u :由光标所在位置开始,删除左方所有的字符,直到该行开始。
Ctrl – y :粘贴之前删除的内容到光标后。
ctrl – t :交换光标处和之前两个字符的位置。
Alt + . :使用上一条命令的最后一个参数。
Ctrl – _ :回复之前的状态。撤销操作。
Ctrl -a + Ctrl -k 或 Ctrl -e + Ctrl -u 或 Ctrl -k + Ctrl -u 组合可删除整行。
Bang(!)命令
!! :执行上一条命令。
^foo^bar :把上一条命令里的foo替换为bar,并执行。
!wget :执行最近的以wget开头的命令。
!wget:p :仅打印最近的以wget开头的命令,不执行。
!$ :上一条命令的最后一个参数, 与 Alt - . 和 $_ 相同。
!* :上一条命令的所有参数
!*:p :打印上一条命令是所有参数,也即 !*的内容。
^abc :删除上一条命令中的abc。
^foo^bar :将上一条命令中的 foo 替换为 bar
^foo^bar^ :将上一条命令中的 foo 替换为 bar
!-n :执行前n条命令,执行上一条命令: !-1, 执行前5条命令的格式是: !-5
查找历史命令
Ctrl – p :显示当前命令的上一条历史命令
Ctrl – n :显示当前命令的下一条历史命令
Ctrl – r :搜索历史命令,随着输入会显示历史命令中的一条匹配命令,Enter键执行匹配命令;ESC键在命令行显示而不执行匹配命令。
Ctrl – g :从历史搜索模式(Ctrl – r)退出。
控制命令
Ctrl – l :清除屏幕,然后,在最上面重新显示目前光标所在的这一行的内容。
Ctrl – o :执行当前命令,并选择上一条命令。
Ctrl – s :阻止屏幕输出
Ctrl – q :允许屏幕输出
Ctrl – c :终止命令
Ctrl – z :挂起命令
重复执行操作动作
M – 操作次数 操作动作 : 指定操作次数,重复执行指定的操作。
Bash基本使用
命令别名
alias 别名="命令名" 临时生效
eg:alias copy =cp alias xrm=”rm -r”
#alias 查看别名信息
unalias 别名 删除别名
eg: unalias copy
让别名永久生效 #vi /root/.bashrc 添加别名
命令执行时顺序
1,第一顺位执行用绝对路径或相对路径执行的命令。
2,第二顺位执行别名。
3,第三顺位执行bash的内部命令。
4,第四顺位执行按照$PATH环境变量定义的目录查找顺序找到的第一个命令。
输入输出重定向
同标准I/O一样,Shell对于每一个进程预先定义3个文件描述字(0,1,2)。
分别对应于:0:STDIN 标准输入 1:STDOUT 标准输出 2:STDERR 标准错误输出。
默认地,标准的输入为键盘,但是也可以来自文件或管道(pipe |)。设备文件名为/dev/stdin。
默认地,标准的输出为终端(terminal),但是也可以重定向到文件,管道或后引号(backquotes `)。设备文件名为/dev/stdout。
默认地,标准的错误输出到终端,但是也可以重定向到文件。设备文件名为/dev/stderr。
标准的输入,输出和错误输出分别表示为STDIN,STDOUT,STDERR,也可以用0,1,2来表示。
还有3~9也可以作为文件描述符。3~9你可以认为是执行某个地方的文件描述符,常被用来作为临时的中间描述符。
>或>> 输出重定向 >会替换;>>会累加,不会替换之前的内容
eg: #ls -l /tmp > /tmp.msg (替换)
eg:#date >> /tmp.msg (追加)
可以这么创建文件: echo "hehe" >> /home/test1.txt
< 输入重定向
eg:wall < /etc/issue 把issue里的内容广播出去
eg:tr "a-z" "A-Z" < /etc/passwd 将小写转为大写(输入重定向),在屏幕输出
自动创建文件
cat > log.txt << EXIT (这里的EXIT只是一个标志,可变动,再输入这个标志或ctrl+d 即可结束写入)
> ccc
> ddd
> EXI
按ctrl+d 结束输出
2> 错误输出重定向
eg:cp -R /usr /backup/usr.bak 2> /bak.error
(0和1的输入输出重定向把数字省略了)
正确输出和错误输出同时保存
命令 > 文件 2>&1 覆盖方式,把正确输出和错误输出都保存到同一个文件当中。
命令 >> 文件 2>&1 追加方式,把正确输出和错误输出都保存到同一个文件当中。
命令 &> 文件 覆盖方式,把所有输出都保存到同一个文件当中。
命令 &>> 文件 追加方式,把所有 输出都保存到同一个文件当中。
命令 >> 文件1 2>>文件2 正确输出追加到文件1中,错误输出追加到文件2中。
& 把程序放到后台执行,但是当终端关闭时,程序可能关闭
nohup 能保证 终端关闭时,进程依然存在
分析 2>&1 以>/dev/null 2>&1 为例:
分解这个组合:
1:> 代表重定向到哪里,例如:echo '123' > /home/123.txt
2:/dev/null 代表空设备文件
3:2> 表示重定向stderr标准错误
4:& 表示等同于的意思,2>&1,表示2的输出重定向等同于1
5:1 表示stdout标准输出,系统默认值是1,所以'>/dev/null'等同于 '1>/dev/null'
因此,>/dev/null 2>&1也可以写成“1> /dev/null 2> &1”
那么>/dev/null 2>&1语句执行过程为:
1>/dev/null :首先表示标准输出重定向到空设备文件,也就是不输出任何信息到终端,说白了就是不显示任何信息。
2>&1 :接着,标准错误输出重定向到标准输出,因为之前标准输出已经重定向到了空设备文件,所以标准错误输出也重定向到空设备文件。
在Linux下最常用的方式有两种:
command > file 2>file 与command > file 2>&1
首先command > file 2>file 的意思是将命令所产生的标准输出信息,和错误的输出信息送到file 中。command > file 2>file 这样的写法,stdout和stderr都直接送到file中, file会被打开两次,这样stdout和stderr会互相覆盖,这样写相当使用了FD1和FD2两个同时去抢占file 的管道。
而command >file 2>&1 这条命令就将stdout直接送向file, stderr 继承了FD1管道后,再被送往file,此时,file 只被打开了一次,也只使用了一个管道FD1,它包括了stdout和stderr的内容。
从IO效率上,前一条命令的效率要比后面一条的命令效率要低,所以在编写shell脚本的时候,较多的时候我们会command > file 2>&1 这样的写法。
扩展一下
另外一个非常有用的重定向操作符是 '-',请看下面这个例子:
$ (cd /source/directory && tar cf - . ) | (cd /dest/directory && tar xvfp -)
该命令表示把 /source/directory 目录下的所有文件通过压缩和解压,快速的全部移动到/dest/directory 目录下去,这个命令在/source/directory 和 /dest/directory 不处在同一个文件系统下时将显示出特别的优势。
下面还几种不常见的用法:
n<&- 表示将 n 号输入关闭
<&- 表示关闭标准输入(键盘)
n>&- 表示将 n 号输出关闭
>&- 表示将标准输出关闭
管道
格式: 命令1 | 命令2 将命令1的正确输出作为命令2的操作对象。
管道命令
可以多个管道命令一起使用
管道命令操作符是:”|”,它只能处理经由前面一个指令传出的正确输出信息,对错误信息信息没有直接处理能力。然后,传递给下一个命令,作为标准的输入.
管理命令的输出说明:
【指令1】正确输出,作为【指令2】的输入 然后【指令2】的输出作为【指令3】的输入 ,【指令3】输出就会直接显示在屏幕上面了。
通过管道之后【指令1】和【指令2】的正确输出不显示在屏幕上面
【提醒注意】:
1. 管道命令只处理前一个命令正确输出,不处理错误输出;
2. 管道命令右边命令,必须能够接收标准输入流命令才行
eg: ls -l /etc|more more下查看/etc 下的文件
eg:ls -l /etc|grep init 查看etc目录下与init相关的文件
eg:wc -l /etc/services 查看 /etc/services文件有多少行
命令连接符
; 命令1;命令2 用分号;间隔的各命令按顺序依次执行,命令之间没有逻辑联系 eg:pwd;ls;date
&& 命令1&&命令2 逻辑与关系,命令1执行成功后,命令2才被执行,命令1失败,命令2不执行
|| 命令1||命令2 逻辑或关系,命令1执行失败,命令2才被执行;命令1执行正确,命令2不执行
dd if=输入文件 of=输出文件 bs=字节数 count=个数
选项:
if=输出文件 指定源文件或源设备
of=输出文件 指定目标文件或目标设备
bs=字节数 指定一次输入/输出多少字节,即把这些字节看做一个数据块
count=个数 指定输入/输出多少个数据块
eg:date;dd if=/dev/zero of=/root/testfile bs=1k count=100000 ;date
创建文件,并查看复制使用的时间
eg:mkdir test && echo "aaa" >test/a.txt && more a,txt
创建test目录 ,并且向test目录下文件a.txt写入aaa,然后查看a.txt的文件内容
eg:#命令 && echo yes || echo no 判断一条命令是否正确执行了
命令替换符
将一个命令的输出作为另外一个命令的参数。
格式为: 命令1 `命令2`(数字键1左边的符号)
eg:ls -l `which touch`
把which touch 的输出作为 ls的参数,执行结果为:-rwxr-xr-x. 1 root root 52656 6月 22 2012 /bin/touch
xargs
1、作用:
(1)将前一个命令的标准输出传递给下一个命令,作为它的参数,xargs的默认命令是echo,空格是默认定界符
(2)将多行输入转换为单行
2、使用模式:front command | xargs -option later command
front command: 前一个命令
-option: xargs的选项
later command: 后一个命令
3、xargs常用选项
-n: 指定一次处理的参数个数
-d: 自定义参数界定符
-p: 询问是否运行 later command 参数
-t : 表示先打印命令,然后再执行
-i : 逐项处理
...更多参数查看man xargs
4、使用实例
测试文本:xargs.txt
[python] view plain copy
a b c d e f g
h i j k l m n
o p q
r s t
u v w x y z
(1)多行输入单行输出
[python] view plain copy
cat xargs.txt | xargs
( 2)指定一次处理的参数个数:指定为5,多行输出
[python] view plain copy
cat xargs.txt | xargs -n 5
(3)自定义参数界定符:指定界定符为'm'
[python] view plain copy
cat xargs.txt | xargs -d m
(4)询问是否运行 later command 参数
[python] view plain copy
cat xargs.txt | xargs -n 5 -p
(5)将所有文件重命名,逐项处理每个参数
[python] view plain copy
ls *.txt |xargs -t -i mv {} {}.bak
更多参数选项查看man xargs
5、xargs与管道|的区别
| 用来将前一个命令的标准输出传递到下一个命令的标准输入,xargs 将前一个命令的标准输出传递给下一个命令,作为它的参数。
[python] view plain copy
#使用管道将ls的结果显示出来,ls标准输出的结果作为cat的标准输出
ls | cat
#使用xargs将ls的结果作为cat的参数,ls的结果为文件名,所以cat 文件名即查看文件内容
ls | xargs cat
6、xargs与exec的区别
(1)exec参数是一个一个传递的,传递一个参数执行一次命令;xargs一次将参数传给命令,可以使用-n控制参数个数
[python] view plain copy
#xargs将参数一次传给echo,即执行:echo begin ./xargs.txt ./args.txt
find . -name '*.txt' -type f | xargs echo begin
#exec一次传递一个参数,即执行:echo begin ./xargs.txt;echo begin ./args.txt
find . -name '*.txt' -type f -exec echo begin {} \;
(2)exec文件名有空格等特殊字符也能处理;xargs不能处理特殊文件名,如果想处理特殊文件名需要特殊处理
[python] view plain copy
#find后的文件名含有空格
find . -name '*.txt' -type f | xargs cat
find . -name '*.txt' -type f -exec cat {} \;
原因:默认情况下, find 每输出一个文件名, 后面都会接着输出一个换行符 ('\n'),因此我们看到的 find 的输出都是一行一行的,xargs 默认是以空白字符 (空格, TAB, 换行符) 来分割记录的, 因此文件名 ./t t.txt 被解释成了两个记录 ./t 和 t.txt, cat找不到这两个文件,所以报错,为了解决此类问题, 让 find 在打印出一个文件名之后接着输出一个 NULL 字符 ('') 而不是换行符, 然后再告诉 xargs 也用 NULL 字符来作为记录的分隔符,即 find -print0 和 xargs -0 ,这样就能处理特殊文件名了。
[python] view plain copy
#xargs处理特殊文件名
find . -name '*.txt' -type f -print0 | xargs -0 cat
时间管理
查看时间
Date 按照默认的时间格式显示时间
date + ”%Y-%m-%d %H:%M:%S”
按照自己设置的格式显示时间
date -d “1 day ago” +%Y-%m-%d ## 获取前一日的日期
date -d “+1 day” +%Y-%m-%d ## 获取后一日的日期
设置时间
date -s "2017-12-25 09:38:40" ## 修改时间
网络时间同步
ntpdate 0.asia.pool.ntp
注意:ntpdate在系统中默认没有安装,需要先安装:
yum search ntpdate 搜索出软件包,再 yun install xxx... 安装
SSH 知识点
第一步安装客户端
yum
ssh linux02 (ip)
exit
免密登录
比如A机器想要控制机器
1 A生成公钥和私钥
ssh-keygen 注意没有空格
2 将公钥发送给需要免密登录的机器
ssh-copy-id B 注意没有空格
反之 吧B想控制A一样的过程
- ssh加强
SSH是linux中,远程登录会话的一种安全协议
linux服务器上,一般都已经集成了ssh的服务端软件,并自启;
如果需要在linux上用ssh客户端去登录别的linux服务器,则需要安装ssh的客户端:
yum install openssh-clients.x86_64 -y
在linux中远程登录另一台linux
ssh cts02 ## 没有指定登录者身份,默认用当前会话的身份
用户名@主机名 注定用户名去远程登录主机
ssh baby@cts02 ## 指定以baby用户来登录远程的cts02
从一台linux上发送一个远程指令给另一台远程linux去执行
格式 ssh 主机名 “命令”
用英文双引号引命令
ssh cts02 “command”
例: ssh cts02 “mkdir /root/xyz”
java程序在linux如何启动
java -cp x.jar:y.jar:z.jar top.ganhoo.App
没有包 直接写类名
可执行的jar包:使用 java -jar
同时在执行java程序时可以设置jvm的参数
java -Xms128M -Xmx256M -Xss1024K -XX:PermSize=128m -XX:MaxPermSize=256m -cp x.jar:y.jar:z.jar top.ganhoo.App
发送远程指令执行java程序示范:
ssh cts02 "/root/apps/jdk1.8.0_60/bin/ java -cp /root/x.jar HelloWorld > /root/hello.log"
或者 ssh cts02 "source /etc/profile;java -cp /root/x.jar HelloWorld"
注意: java -cp使用空格的
java -cp /root/x.jar HelloWorld"
java -cp 指令要和后面的有空格 不然默认是一个字符串了
也就是 所有指令 都要和执行的内容直接有空格
从一台linux远程拷贝文件到另一台linux
scp ## 远程拷贝,前提是,两台linux上都必须有这个scp程序
拷贝文件:
scp ./a.txt root@cts02:/root/
注意root@cts02 是全写 直接cts02也行
拷贝文件夹:需要递归:
scp -r ./aaa/ cts02:/root/
SSH免密验证(密钥)配置
ssh会话一定会验证登陆者的身份!
验证的机制有两种:
- 用户名+密码验证
- 密钥验证
请求方需要事先创建一对密钥(公钥,私钥; 私钥自己持有,公钥交给目标机器)
定时任务
crontab -e
crontab -l
crontab -r
serivce crond restart
crontab 命令允许用户提交、编辑或删除相应的作业。每一个用户都可以有一个crontab 文件来保存调度信息。可以使用它运行任意一个 s h e l l 脚本或某个命令。
crontab命令格式
作用:用于生成cron进程所需要的crontab文件
crontab的命令格式
crontab [-u user] {-l|-r|-e}
-u 用户名
-l 显示当前的crontab
-r 删除当前的crontab
-e 使用编辑器编辑当前的crontab文件。
crontab文件格式
minute hour day-of-month month-of-year day-of-week commands
分< >时< >日< >月< >星期< >要运行的命令 < >表示空格
其中
Minute 一小时中的哪一分钟 [0~59]
hour 一天中的哪个小时 [0~23]
day-of-month 一月中的哪一天 [1~31]
month-of-year 一年中的哪一月 [1~12]
day-of-week 一周中的哪一天 [0~6] 0表示星期天
commands 执行的命令
书写注意事项
1,全都不能为空,必须填入,不知道的值使用通配符*表示任何时间
2,每个时间字段都可以指定多个值,不连续的值用,间隔,连续的值用-间隔。
3,命令应该给出绝对路径
4,用户必须具有运行所对应的命令或程序的权限
如何使用crontab 运行多个任务:
方法1:在crontab -e 里 写多个
输入命令 crontab –e
敲回车
开始编写任务:
方法2:把所有的任务,写入到一个可执行的文件
再在crontab -e里面配置执行任务
分钟 小时 天 月 星期 命令/脚本
eg:1到3月份,每周二周五,下午6点的计划任务
0 18 * 1-3 2,5
eg:周一到周五下午,5点半提醒学生15分钟后关机
linux 高级指令
tr
tr 替换字符 被替换的字符与替换的字符数必须是相等的
用法:tr 旧字符 新字符
cat a.txt | tr 20 89 将cat a.txt结果中的20替换成89
linux中sort命令
功能说明:将文本文件内容加以排序,sort可针对文本文件的内容,以行为单位来排序。
参 数:
-b 忽略每行前面开始出的空格字符。
-c 检查文件是否已经按照顺序排序。
-d 排序时,处理英文字母、数字及空格字符外,忽略其他的字符。
-f 排序时,将小写字母视为大写字母。
-i 排序时,除了040至176之间的ASCII字符外,忽略其他的字符。
-m 将几个排序好的文件进行合并。
-M 将前面3个字母依照月份的缩写进行排序。
-n 依照数值的大小排序。
-o<输出文件> 将排序后的结果存入指定的文件。
-r 以相反的顺序来排序。
-t<分隔字符> 指定排序时所用的栏位分隔字符。
+<起始栏位>-<结束栏位> 以指定的栏位来排序,范围由起始栏位到结束栏位的前一栏位。
--help 显示帮助。
--version 显示版本信息
diff 文件差异的对比
diff 文件1 文件2
vimdiff pas3 pas5 说明: 用:q退出
注:在vimdiff中可以按i键进入vim的编辑模式修改文件内容。按Esc键退出编辑模式,用:wq保存并退出vim编辑器。(用ctrl+w+w在窗口之间切换)
linux命令 grep、sed、awk三剑客
一、grep
grep命令主要用于文本内容的查找。它支持正则表达式查找,命令格式为:
grep [option] pattern filename
例如:在filename文本中查找包含”text”的行:
grep "text" filename
这条命令默认只输出匹配的文本行
option为-o时,命令行只输出匹配的文本
option为-v时,命令行只输出没有匹配的文本行
option为-R -r时,匹配目录下的所有文件
二、sed
sed命令主要用于文本内容的编辑。默认只处理模式空间,不处理原数据,而且sed是针对一行行数据来进行处理的。
sed的命令格式为: sed [option] 'command' filename
option常用选项有以下:
-n:使用安静(silent)模式。
在一般sed的用法中,所有来自stdin的数据一般都会被列出到终端上。
但如果加上-n参数后,则只有经过sed特殊处理的那一行(或者动作)才会被列出来。
-e:直接在命令列模式上进行sed的动作编辑。
-i:直接修改读取的文件内容,而不是输出到终端。
command可以分为以下几种:
a:追加,a的后面可以接字串,而这些字串会在新的一行出现(目前的下一行)
i:插入,i的后面可以接字串,而这些字串会在新的一行出现(目前的上一行)
d:以行为单位的删除
c:以行为单位的替换,c的后面可以接字串
s:在行中搜寻并替换
p:以行为单位的显示,通常p会与参数sed -n一起运行
案例
1、在filename文本最后一行追加hello world:
sed '$a hello world' filename
2、在filename文本第一行插入hello world:
sed '1i hello world' filename
3、既要在最后一行追加hello world,又要在第一行插入hello world:
sed -e '$a hello world' -e '1i hello world' filename
[root@localhost ruby] # sed '1,2d' ab #删除第一行到第二行
[root@localhost ruby] # sed -n '1,2p' ab #显示第一行到第二行
[root@localhost ruby] # sed -n '/ruby/p' ab #查询包括关键字ruby所在所有行
另外,sed比较常用的就是文本替换,它也支持正则表达式,功能强大。
例如:
1、表示将filename文本的每行中的oldstring替换为newstring:
sed 's/oldstring/newstring/g' filename
2、删除空白行:
sed '/^\s*$/d' filename
PS:正则表达式中\s表示空白字符(包括,空格,制表符等)
三、awk (将一行分为多个字段做处理)
awk [-F field-separator] 'commands' input-file(s)
其中,commands 是真正awk命令,[-F 用来指定域分隔符]是可选的。 input-file(s) 是待处理的文件。 在awk中,文件的每一行中,由域分隔符分开的每一项称为一个域。通常,在不指名-F域分隔符的情况下,默认的域分隔符是空格。
$0则表示所有域,$1表示第一个域,$n表示第n个域。默认域分隔符是"空白键"
案例:
#cat /etc/passwd |awk -F ':' '{print $1}' #-F 指定分隔符为 :
root
daemon
bin
sys
#cat /etc/passwd |awk -F ':' '{print $1"\t"$7}' #显示第1、7个字段
root /bin/bash
daemon /bin/sh
bin /bin/sh
sys /bin/sh
更多推荐
linux 指令使用大全
发布评论