目录
从一台linux上发送一个远程指令给另一台远程linux去执行
Linux指令学习技巧
善于查看man help等帮助文档
利用好Tab键 自动补全
掌握好一些快捷键
ctrl + c(停止当前进程)
ctrl + z 挂起当前进程,放后台
ctrl + r(查看命令历史) history
ctrl + l(清屏,与clear命令作用相同)
方向箭头 上 下 可以查看执行过的命令
Linux注意事项
linux下严格区分大小写
在Linux命令行下,输入字符后,按两次Tab键,shell就会列出以这些字符打头的所有可用命令。如果只有一个命令匹配到,按一次Tab键就自动将这个命令补全。比如,想更改密码,但只记得这个命令前几个字母是pass。这时候,按Tab键,shell就自动输出 passwd 命令,非常方便。当然,除了命令补全,还有路径、文件名补全。这个在我们 cd 到特定目录时特别好用。
在linux下配置环境变量,使用$ 追加路径是:而不是分号
文件显示的第一列会显示文件的信息,是一个文件还是一个文件夹
文件开头是-
文件夹开头是dr
Linux 常用指令:
../上一级目录 ./当前目录
关机/重启机器
shutdown
-r 关机重启
-h 关机不重启
now 立刻关机
halt 关机
reboot 重启
Ifconfig:
检查ip地址信息
Reboot:
重启虚拟机
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就可以把它弄到前台来
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)
mkdir
简述:创建目录。
-> mkdir /data 在根目录下创建data目录
-> mkdir -p /aa/bb/cc:递归创建目录
cd
简述:切换目录
-> cd /etc 从当前目录切换到/etc路径下
Cd - 返回到执行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
简述:vi编辑器。
I意识是insert的开头字母意思是进入编辑模式
Esc进入命令格式
退出Vi
当编辑完文件,准备退出Vi返回到shell时,可以使用以下几种方法之一。
在命令模式中,连按两次大写字母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相反,倒序读取文件。最后一行先输出,然后倒数第二行……
简述:每行倒读
-> 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: 若原文件为链接文件,则复制链接文件属性而非档案本身
ps -ef|grep详解
ps命令将某个进程显示出来
grep命令是查找
中间的|是管道命令 是指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"
find
简述:顾名思义。查找文件
-> find /data –type f –name “test.txt” –exec rm {} \;
先找到/data下面名字叫test.txt的文件,然后执行删除操作。
-> find /data –type f –name “test.txt” |xargs rm -f: 用管道和xargs进行删除。
用xargs的目的是将找到的内容变为1行。
-type :文件类型 f(file),d(directory),c(character),b(block)s(sockey),l(link)
-name :文件名称。
-mtime :参考考试题,删除7天之前的文件
more,less,clear
n more,less命令
这两个命令用于查看文件,如果一个文件太长,显示内容超出一个屏幕,用cat命令只能看到最后的内容,用more和less两个命令可以分页查看。more指令可以使超过一页的文件内容分页暂停显示,用户按键后才继续显示下一页。而less除了有more的功能以外,还可以用方向键往上或往下的滚动文件,更方便浏览阅读。
less的常用动作命令:
less 在查看之前不会加载整个文件。可以尝试使用 less 和 vi 打开一个很大的文件,你就会看到它们之间在速度上的区别。
在 less 中导航命令类似于 vi。本文中将介绍一些导航命令以及使用 less 的其它一些技巧。
当使用命令 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 /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删出
ln
英文: link 命令路径:/bin/ln 执行权限:所有用户
作用:产生链接文件 创建快捷方式
ln -s [源文件] [目标文件] 创建软链接 源文件 使用 绝对路径
ln [源文件] [目标文件] 创建硬链接
软连接指向原文件原文件删除,无法再使用
而硬链接类似于复制原本文件,原文删除还可以使用删除前原文件里面的内容
同时,原文件的改变,软连接,和硬链接都会随之改变。
eg:ln -s /etc/service .service.soft
创建文件/etc/service的软链接.service.soft
eg:/etc/service /service.hard
创建文件/etc/service的硬链接/service.hard
软连接类似于windows下的快捷方式
软连接文件格式:
lrwxrwxrwx. 1 root root 13 Jul 20 07:50 service -> /etc/services
硬链接数量,如果该文件没有硬链接,就只有本身一个硬链接。
13链接文件的长度
格式解析(特征):
1, 软连接的文件类型是 l(软连接),软连接文件的权限 都是 lrwxrwxrwx
2,-> 箭头指向到源文件
真正的权限取决于对源文件的权限
时间值为创建软连接的时间
软连接可以跨文件系统生成
硬链接特征
1,相当于 cp -p +同步更新
2,通过i节点识别,与源文件有相同的idnode节点
3,硬链接不能跨分区,ln /home/test/issuels /boot/test (错误)
4,不能针对目录使用 ln /tmp/ aa.hard (无法将目录/tmp 生成硬链接)
删除软连接
rm -rf symbolic_name 注意不是rm -rf symbolic_name/
~线下的`
可以转移指令,
例如 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.cn 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.com
会显示 这次请求经过的所有的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匹配了多少次
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:虚拟机占用百分比
进程管理命令
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 [选项]
-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.net 把issue.net里的内容广播出去
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 号输出关闭
>&- 表示将标准输出关闭
wc [option] filename 统计文件字数
功能:统计文件中的文件行数、字数和字符数。
选项:
-l lines 统计文件的行数
-w words 统计文件的单词数 (英文单字)
-c bytes 统计文件的字节数
-m chars 统计文件字符数
注释:若缺省文件名则指标准输入
eg:#wc
输入字符,按ctrl+d结束,输出统计结果
eg:# wc /etc/services
10774 58108 641020 /etc/services
依次为:行数 单词数 字符数 文件名
eg:#wc << hello
输入字符,直到输入hello才结束并统计
eg:cat test.txt |wc -l 用wc命令做到只打印统计数字不打印文件名
注意事项:
a:一个汉字占三个字节,一个回车符等不可见字符也占一个字节
b:一行的末尾如果没有回车符,则不算是一行,也就是说,如果一个文件的最后一行末尾没有换行符,wc命令统计的行数会比实际行数少一,所谓实际行数是你所看到的行数,实际上,没有回车符,确实不能算作一行
c:所谓一个字就是连续的字符,即不被空字符分割的连续的字母或者汉字算作是一个字
统计文件中,字符串出现的行数
eg:统计aaa.txt文件中,unix出现的行数
# grep -o "unix" aaa.txt | wc -l
# cat aaa.txt | grep unix|wc -l
# grep -c "unix" aaa.txt
管道符
格式: 命令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
通配符
通配符 |
作用 |
? |
匹配一个任意字符 |
* |
匹配0个或任意多个任意字符 |
[abc] |
匹配括号中任意一个字符 |
[a-z] |
匹配范围内的任意一个字符 |
[^] |
逻辑非,匹配不是中括号内的一个字符 |
其他特殊符号
符号 |
作用 |
'' |
单引号,单引号中所有的特殊符号,如$等都没有特殊含义 |
"" |
双引号,双引号中特殊符号没有特殊含义,但是"$","`"和"\"是例外, 拥有"调用变量的值","引用命令"和"转义符"的特殊含义。 |
`` |
反引号,反引号括起来的内容是系统命令,在bash中会先执行。 |
$() |
和反引号作用一样,用来引用系统命令 |
# |
在shell脚本中,#开头的行代表注释 |
$ |
用于调用变量的值,如需要调用变量name的值, 使用$name就能得到变量的值 |
\ |
转义符,跟在\之后的特殊符号将失去特殊含义,变为普通字符。 如\$将输出$符号,而不当做是变量引用 |
如果打压缩文件的时候,不小心把文件名弄成以-开头的了,再使用sz 传输文件时,会报错,因为linux把-视作命令的开头,怎么解决呢?
使用sz ./-file-name
时间管理
查看时间
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.org
注意: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分钟后关机
30 17 * * 1-5 /usr/bin/wall < /etc/issue
45 17 * * 1-5 /sbin/shutdown -h now
eg:学校的计划任务, 12点14点,检查apache服务是否启动
*/2 12-14 * 3-6,9-12 1-5
eg:再添加一个备份,把/etc目录备份到/backup下,然后把错误的情况也记录下来,正确的文件都丢到/dev/null下,看不见(相当于一个黑洞)
*/2 12-14 * 3-6,9-12 1-5 /bin/cp -r /etc /backup/etc.20170407 2> /backup/etc.bak.err
/dev/null
eg:每月 1、1 0、2 2日的4:45运行/apps/bin目录下的backup.sh
45 4 1,10,22 * * /apps/bin/backup.sh
eg:每周六、周日的 1 : 10运行一个find命令
10 1 * * 6,0 /bin/find -name "core" -exec rm {} \;
eg:在每天 18:00至23 :00之间每隔30分钟运行/apps/bin目录下的dbcheck.sh
Jps
可以看做是JavaVirtual Machine Process Status Tool的缩写。非常简单实用。
命令格式:jps [options ] [ hostid ]
[options]选项 :
-q:仅输出VM标识符,不包括classname,jar name,arguments in main method
-m:输出main method的参数
-l:输出完全的包名,应用主类名,jar的完全路径名
-v:输出jvm参数
-V:输出通过flag文件传递到JVM中的参数(.hotspotrc文件或-XX:Flags=所指定的文件
-Joption:传递参数到vm,例如:-J-Xms512m
[hostid]:
[protocol:][[//]hostname][:port][/servername]
命令的输出格式 :
lvmid [ [ classname| JARfilename | "Unknown"] [ arg* ] [ jvmarg* ] ]
1)jps
2)jps –l:输出主类或者jar的完全路径名
3)jps –v :输出jvm参数
4)jps –q :仅仅显示java进程号
5)jps -mlv10.134.68.173
注意:如果需要查看其他机器上的jvm进程,需要在待查看机器上启动jstatd。
Linux管道解析
简介
管道是一种两个进程间进行单向通信的机制。因为管道传递数据的单向性,管道又称为半双工管道。管道的这一特点决定了器使用的局限性。管道是Linux支持的最初Unix IPC形式之一,具有以下特点:
*** 数据只能由一个进程流向另一个进程(其中一个读管道,一个写管道);如果要进行双工通信,需要建 立两个管道。
*** 管道只能用于父子进程或者兄弟进程间通信。,也就是说管道只能用于具有亲缘关系的进程间通信。
注意:从管道读数据是一次性操作,数据一旦被读,它就从管道中被抛弃,释放空间以便写更多的数据。
管道命令
操作符是:”|”,它只能处理经由前面一个指令传出的正确输出信息,对错误信息信息没有直接处理能力。然后,传递给下一个命令,作为标准的输入.
【提醒注意】:
1. 管道命令只处理前一个命令正确输出,不处理错误输出;
2. 管道命令右边命令,必须能够接收标准输入流命令才行;
管道应用
1.
读出logcat.log文件的内容,通过管道转发给grep作为输入内容,查找含有 hello的日志
cat logcat.log | grep –n ‘hello’
2.
将/etc/issue文件中的内容转换为大写后保存至/tmp/issue.out文件中
我们用cat /etc/issue命令(Issue文件保存的是系统登录前的提示信息),其次是转换为大写,我们用转换命令tr来实现,tr [a-z] [A-Z]。最后用重定向保存到文件即可。
cat /etc/issue |tr [a-z] [A-Z] > /tmp/issue.out