1.shell
Shell是一种程序设计语言。作为命令语言,它交互式解释和执行用户输入的命令或者自动地解释和执行预先设定好的一连串的命令;作为程序设计语言,它定义了各种变量和参数,并提供了许多在高级语言中才具有的控制结构,包括循环和分支。
在排序算法中,Shell是希尔排序的名称。
操作系统与外部最主要的接口就叫做shell。shell是操作系统最外面的一层。shell管理你与操作系统之间的交互:等待你输入,向操作系统解释你的输入,并且处理各种各样的操作系统的输出结果。
Shell基本上是一个命令解释器,类似于DOS下的command。
XShell是Windows下一款功能非常强大的安全终端模拟软件,支持Telnet、Rlogin、SSH、SFTP、Serial 等协议,可以访问远端不同系统下的服务器,非常方便的对linux主机进行远程管理。
2.Xshell的快捷键
tab补全:自动补全命令或文件名,未输入状态下连按两次 Tab 列出所有可用命令
up 方向键上(可以调出输入历史执行记录,快速执行命令)
down 方向键下(配合 up 选择历史执行记录)
Home 移动光标到本行开头,End 移动光标到本行结尾
PgUp 向上翻页,PaDN 向下翻页
Ctrl + C 终止当前程序
Ctrl + L 清屏 = clear命令
Ctrl + Insert复制,Shift + Insert粘贴
ctrl + shift + = 放⼤终端窗⼝的字体显示
ctrl + - 缩⼩终端窗⼝的字体显示
3.Linux命令行
命令行的格式:command [-options] [parameter] ([ ] 代表可选)
command :命令名,相应功能的英⽂单词或单词的缩写;
[-options] :选项,可⽤来对命令进⾏控制,也可以省略;
parameter :传给命令的参数,可以是 零个、⼀个 或者 多个;
每两个部分间有空格,每个命令行最多256个字符,区分大小写,不同命令提示符,使用分隔符为/
常用命令行如下:
cd(cd = Change Directory) | 切换工作目录,即进入指定文件夹, cd /进入根目录,cd -返回进入此目录之前所在的目录,cd ..返回上级目录, cd ../..返回上两级目录,cd !$把上个命令的参数作为cd参数使用 | $ cd logs/ |
pwd(pwd = print working Directory) | 查看当前工作目录:pwd命令以绝对路径的方式显示用户当前工作目录。 | |
ls | ls是英⽂单词list的简写,其功能为列出⽬录的内容,是⽤户最常⽤的命令之⼀,它类似于DOS下的dir命令 | $ ls |
ls -l或ll | 列出当前目录下的所有文件,包括每个文件的详细信息 | |
history history 个数 | 查看历史命令 | $ history $ history 20 |
rm | rm -rf * 删除当前目录下的所有文件,这个命令很危险,应避免使用; rm 命令删除一个目录中的一个或者多个文件或者目录, -f, --force 忽略不存在的文件,从不给出提示; -i, --interactive 进行交互式删除; -r, -R, --recursive 指示rm将参数中列出的全部目录和子目录均递归地删除; -v, --verbose 详细显示进行的步骤;--help 显示此帮助信息并退出;--version 输出版本信息并退出 | |
grep(global search regular expression(RE) and print out the line) | 全面搜索正则表达式并把行打印出来,是一种强大的文本搜索工具,它能使用正则表达式搜索文本,并把匹配的行打印出来。 grep [-选项] ‘搜索内容串’ ⽂件名 -v 显示不包含匹配⽂本的所有⾏(相当于求反) -n 显示匹配⾏及⾏号 -i 忽略⼤⼩写 搜索内容串可以是正则表达式。 | |
ps命令(Process Status) | 进程查看命令,会显示所有进程的状态,通常结合grep命令查看某进程的状态。 ps [options] -l 长格式输出; -u 按用户名和启动时间的顺序来显示进程; -j 用任务格式来显示进程; -f 用树形格式来显示进程; -a 显示所有用户的所有进程(包括其它用户); -x 显示无控制终端的进程; -r 显示运行中的进程; -ww 避免详细参数被截断; 我们常用的选项是组合是 aux( 显示所有包含其他使用者的行程) 或 lax,还有参数 f 的应用 | |
ps aux: 显示所有包含其他使用者的行程 | 输出格式:USER PID %CPU %MEM VSZ RSS TTY STAT START TIME COMMAND USER: 行程拥有者 PID: pid %CPU: 占用的 CPU 使用率 %MEM: 占用的记忆体使用率 VSZ: 占用的虚拟记忆体大小 RSS: 占用的记忆体大小 TTY: 终端的次要装置号码 (minor device number of tty) STAT: 该行程的状态,linux的进程有5种状态: D 不可中断 uninterruptible sleep (usually IO) R 运行 runnable (on run queue) S 中断 sleeping T 停止 traced or stopped Z 僵死 a defunct (”zombie”) process 注: 其它状态还包括W(无驻留页), <(高优先级进程), N(低优先级进程), L(内存锁页). START: 行程开始时间 TIME: 执行的时间 COMMAND:所执行的指令 | |
ps aux | grep 或 ps -ef | grep 进程关键字 ps aux功能同ps -ef | 显示特定的进程和其状态 | $ ps aux | grep zsypool* |
less [参数] 文件 | less 与 more 类似,less 可以随意浏览文件,支持翻页和搜索,支持向上翻页和向下翻页。 查看文件内容:less log2013.log 浏览多个文件:less log2013.log log2014.log ps查看进程信息并通过less分页显示:ps -ef |less 查看命令历史使用记录并通过less分页显示:history | less | |
more [-dlfpcsu] [-num] [+/pattern] [+linenum] [fileNames..] | 类似 cat ,不过会以一页一页的形式显示,更方便使用者逐页阅读,而最基本的指令就是按空白键(space)就往下一页显示,按 b 键就会往回(back)一页显示,按下q键退出显示,按下h键可以获取帮助 | |
cat [-AbeEnstTuv] [--help] [--version] fileName | 查看或者合并⽂件内容。 查看当前文件下的内容:cat 1.txt 查看绝对路径下的文件内容:cat /etc/samba/2.txt 把两个文件的内容映射到3.txt:cat 1.txt 2.txt > 3.txt (>表示先清空,再添加) cat 1.txt 2.txt > > 3.txt (>>表示直接添加) | |
tail -f 日志名 | 查看日志 | |
jps | 是java提供的一个显示当前所有java进程pid的命令,适合在linux/unix平台上简单查看当前java进程的一些简单情况 | jps -v:输出jvm参数 |
alias | 查看系统存在的别名:alias 定义一个别名:alias 别名='系统认可的命令' 取消一个别名:unalias 别名 | $ alias wjpwd= 'pwd' |
联机帮助:man 和 --help | 联机查询获得命令的一些帮助,man 是 manual 的缩写,是 Linux 提供的⼀个 ⼿册,包含了绝⼤部分的命令、函数的详细使⽤说明。 使用man时的操作键:空格键:翻屏或翻页;Enter:翻行;b 向前翻一屏或一页;f 向后翻一屏或一页;q 退出;/word:搜索 word 字符串 | man ls,查阅ls命令的使用手册 command --help,显示 command 命令的帮助信息 |
rz | 运行该命令会弹出一个文件选择窗口,从本地选择文件上传到服务器(receive) | |
sz | 将选定的文件发送(send)到本地机器 | |
cp:将给出的⽂件或⽬录复制到另⼀个⽂件或⽬录中(同一台服务器),相当于 DOS下的copy命令 | -a 该选项通常在复制目录时使用,它保留链接、文件属性,并递归地复制目录,简单而言,保持文件原有属性。 -f 覆盖已经存在的目标文件而不提示 -i 交互式复制,在覆盖目标文件之前将给出提示要求用户确认 -r 若给出的源文件是目录文件,则cp将递归复制该目录下的所有目录和文件,目标文件必须为一个目录名。 -v 显示copy进度 | |
scp(secure copy ):两台服务器之间传输 | scp [可选参数] file_source file_target -1: 强制scp命令使用协议ssh1 -2: 强制scp命令使用协议ssh2 -4: 强制scp命令只使用IPv4寻址 -6: 强制scp命令只使用IPv6寻址 -B: 使用批处理模式(传输过程中不询问传输口令或短语) -C: 允许压缩。(将-C标志传递给ssh,从而打开压缩功能) -p:保留原文件的修改时间,访问时间和访问权限。 -q: 不显示传输进度条。 -r: 递归复制整个目录。 -v:详细方式显示输出。scp和ssh(1)会显示出整个过程的调试信息。这些信息用于调试连接,验证和配置问题。 -c cipher: 以cipher将数据传输进行加密,这个选项将直接传递给ssh。 -F ssh_config: 指定一个替代的ssh配置文件,此参数直接传递给ssh。 -i identity_file: 从指定文件中读取传输时使用的密钥文件,此参数直接传递给ssh。 -l limit: 限定用户所能使用的带宽,以Kbit/s为单位。 -o ssh_option: 如果习惯于使用ssh_config(5)中的参数传递方式, -P port:注意是大写的P, port是指定数据传输用到的端口号 -S program: 指定加密传输时所使用的程序。此程序必须能够理解ssh(1)的选项。 |
|
mv:为文件、目录移动、重命名 | -b: 当目标文件或目录存在时,在执行覆盖前,会为其创建一个备份。 -i: 如果指定移动的源目录或文件与目标的目录或文件同名,则会先询问是否覆盖旧文件,输入 y 表示直接覆盖,输入 n 表示取消该操作。 -f: 如果指定移动的源目录或文件与目标的目录或文件同名,不会询问,直接覆盖旧文件。 -n: 不要覆盖任何已存在的文件或目录。 -u:当源文件比目标文件新或者目标文件不存在时,才执行移动操作。 | mv source_file(文件) dest_file(文件) 将源文件名 source_file 改为目标文件名 dest_file mv source_file(文件) dest_directory(目录) 将文件 source_file 移动到目标目录 dest_directory 中 mv source_directory(目录) dest_directory(目录) 目录名 dest_directory 已存在,将 source_directory 移动到目录名 dest_directory 中;目录名 dest_directory 不存在则 source_directory 改名为目录名 dest_directory mv source_directory(目录) dest_file(文件) 出错 |
uname:用于显示系统信息 | -a或--all 显示全部的信息。 -m或--machine 显示电脑类型。 -n或--nodename 显示在网络上的主机名称。 -r或--release 显示操作系统的发行编号。 -s或--sysname 显示操作系统名称。 -v 显示操作系统的版本。 --help 显示帮助。 --version 显示版本信息 | ubuntu@VM-0-12-ubuntu:~$ uname -a 显示Linux系统的信息 ubuntu@VM-0-12-ubuntu:~$ uname -m uname -r 显示Kernel的信息
|
apt:提供了查找、安装、升级、删除某一个、一组甚至全部软件包的命令 | apt [options] [command] [package ...] options:可选,选项包括 -h(帮助),-y(当安装过程提示选择全部为"yes"),-q(不显示安装的过程)等等 command:要进行的操作 package:安装的包名 | 列出所有可更新的软件清单命令:sudo apt update 升级软件包:sudo apt upgrade 列出可更新的软件包及版本信息:apt list --upgradeable 升级软件包,升级前先删除需要更新软件包:sudo apt full-upgrade 安装指定的软件命令:sudo apt install <package_name> 安装多个软件包:sudo apt install <package_1> <package_2> <package_3> 更新指定的软件命令:sudo apt update <package_name> 显示软件包具体信息,例如:版本号,安装大小,依赖关系等等:sudo apt show <package_name> 删除软件包命令:sudo apt remove <package_name> 清理不再使用的依赖和库文件: sudo apt autoremove 移除软件包及配置文件: sudo apt purge <package_name> 查找软件包命令: sudo apt search <keyword> 列出所有已安装的包:apt list --installed 列出所有已安装的包的版本信息:apt list --all-versions |
chmod:控制用户对文件的权限 | Linux/Unix 的文件调用权限分为三级 : 文件所有者(Owner)、用户组(Group)、其它用户(Other Users)。 + 表示增加权限、- 表示取消权限、= 表示唯一设定权限 r 读 设置为可读权限 | |
find:在特定的⽬录下搜索符合条件的⽂件 | find path -option [ -print ] [ -exec -ok command ] {} \
| find / -name httpd.conf #在根目录下查找文件httpd.conf,表示在整个硬盘查找 find ./ -name test.sh 查找当前目录下所有名为test.sh的文件 将当前目录及其子目录下所有文件后缀为 .c 的文件列出来:find . -name "*.c" |
cat、more、less比较:
cat是一次性显示整个文件的内容,还可以将多个文件连接起来显示,它常与重定向符号配合使用,适用于文件内容少的情况;
more和less一般用于显示文件内容超过一屏的内容,并且提供翻页的功能。more比cat强大,提供分页显示的功能,less比more更强大,提供翻页,跳转,查找等命令。而且more和less都支持:用空格显示下一页,按键b显示上一页。
查看Linux版本:
cat /proc/version
查看CentOS版本:
cat /etc/redhat-release
查看磁盘使用:
df -h
参看当前目录下所有目录的大小:
du -sh *
查看内存使用:
free -h
查看top:
M 按照内存大小排序
c 显示具体路径
文件夹大小:
du -lh --max-depth=1 【统计当前文件夹(目录)大小,并按文件大小排序】
搜索大文件:
find ./ -type f -size +1024M 此命令可以查询指定目录下(包括子目录)大于1024M的文件。利器
根据端口查看:
netstat -anp | grep 8085
根据进程名称查看:
ps -aux | grep SpatialServer
top命令使用:
c :显示详细路径
xb , <和> :选中不同的列进行排序显示 RES是实际使用的内存
4.linux命令使用
4.1查看日志
Linux查看命令有多种:tail,head,cat,tac,more
tail
参数:
1)-f 循环读取,该参数用于监视File文件增长
2)-q 不显示处理信息
3)-v 显示详细的处理信息
4)-c<数目> 显示的字节数
5)-n<行数> 显示行数
tail -f test.log | 查看实时日志 |
tail -100f test.log | 实时查看最后100行日志记录,如果你需要停止,按Ctrl+C退出 |
tail -n 10 test.log | 查询日志尾部最后10行的日志 |
tail -n +10 test.log | 查询10行之后的所有日志 |
tail -fn 100 test.log | 循环实时查看最后100行记录 |
①进入日志文件所在的文件目录,比如: cd /opt/tomcat7/logs
②通过命令打开日志,分析需求场景打开需要的日志,比如:tail -f catalina.out
head
跟tail是相反的,tail是查看后多少行日志,head是查看前面多少行日志
-
应用
命令 | 含义 |
---|---|
head -n 10 test.log | 查询日志文件中的前10行日志 |
head -n -10 test.log | 查询日志文件除了最后10行的其他所有日志 |
cat
- 一次显示整个文件: cat filename
- 创建一个文件:cat > filename
- 将几个文件合并为一个文件: cat file1 file2 > file
参数:
1)-n 由1开始对所有输出的行数编号
2)-b 和-n相似,只不过对于空白行不编号
3)-s 当遇到有连续两行以上的空白行,就代换为一行的空白行
4)-c<数目> 显示的字节数
5)-n<行数> 显示行数
1)cat test.log | tail -n 1000 #输出test.log 文件最后1000行
2)cat -n test.log |grep “debug” #过滤出关键字附近的日志
3)cat filename | tail -n +3000 | head -n 1000 #从第3000行开始,显示1000行。即显示3000~3999行
4)cat filename| head -n 3000 | tail -n +1000 #显示1000行到3000行
5)cat -n textfile1 > textfile2 #把 textfile1 的档案内容加上行号后输入 textfile2 这个档案里
6)cat -b textfile1 textfile2 >> textfile3 #把 textfile1 和 textfile2 的档案内容加上行号(空白行不加)之后将内容附加到 textfile3 里
tac
tac是将cat反写过来,它的功能跟cat相反,cat是由第一行到最后一行连续显示,而tac是由最后一行到第一行反向显示。
more
类似cat,不过以一页一页形式显示。基本指令按空白键(space)往下一页显示,按返回键(back)往上一页显示,还有字符搜索功能(与vi相似)。
参数:
1)-num 一次显示的行数
2)-d 提示使用者,在画面下方显示 [Press space to continue, ‘q’ to quit.] ,如果使用者按错键,则会显示 [Press ‘h’ for instructions.] 而不是 ‘哔’ 声
3)-l 取消遇见特殊字元 ^L 时会暂停的功能
4)-f 计算行数时,以实际上的行数,而非自动换行过后的行数
5)-p 不以卷动的方式显示每一页,而是先清除萤幕后再显示内容
6)-c 跟 -p 相似,不同的是先显示内容再清除其他旧资料
7)-s 当遇到有连续两行以上的空白行,就代换为一行的空白行
8)-u 不显示下引号 (根据环境变数 TERM 指定的 terminal 而有所不同)
9)+/pattern 在每个文档显示前搜寻该字串(pattern),然后从该字串之后开始显示
10)+num 从第 num 行开始显示
应用:
命令 含义
more -s test.log 逐页显示日志,如有连续两行以上空白行则以一行空白行显示
more +20 test.log 从第 20 行开始显示日志内容
grep
查找文件时,我们往往需要通过某些关键字查找,grep命令就可以帮助我们实现快速查找。
more joint.log | grep ‘60007746’ #根据某退货号查询日志
很多时候,我们都需要看到上下几行的日志,可以通过加相关参数实现:
2)more joint.log | grep -5 ‘60007746’ #打印匹配行的前后5行
3)more joint.log | grep -C 5 ‘60007746’ #打印匹配行的前后5行
4)more joint.log | grep -A 5 ‘60007746’ #打印匹配行的后5行
5)more joint.log | grep -B 5 ‘60007746’ #打印匹配行的前5行
sed
场景:根据日期查日志
sed -n '/2014-12-17 16:17:20/,/2014-12-17 16:17:36/p' test.log
特别说明:上面的两个日期必须是日志中打印出来的日志,否则无效,先 grep '2014-12-17 16:17:20' test.log 来确定日志中是否有该时间点。
multitail
multitail
实用程序可以实时监视和跟踪多个文件。
要同时显示两个日志文件的输出,举例:
multitail /
var
/log/apache2/access.log /
var
/log/apache2/error.log
Lnav
Lnav实用程序可以观看和跟踪多个文件并实时显示其内容。
sudo lnav /
var
/log/apache2/access.log /
var
/log/apache2/error.log