Shell基本的命令
ubuntu 中文乱码 如果使用的是 PuTTY,可以通过修改 font, character set 设置来解决。 Window -> Appearance -> Font settings 选择宋体或新宋体: Window -> Translation -> Character set translation on received data 选择 UTF-8: --ubuntu --设置root密码 sudo passwd root sudo /etc/init.d/ssh star startx--启动图形界面 cal 2002--查看2002年日历 man date/info date --查询date指令的使用 who --查看当前用户 netstate-a --查看当前网络情况 ps -aux --查看后台执行的程序 shutdown/reboot --关机 reboot -f 强制重启 --改变一个文件的群组 chgrp 群组名 文件 chown -R tomcat /home/tomcat/ --8080端口映射到80端口 iptables -t nat -A PREROUTING -p tcp --dport 80 -j REDIRECT --to-port 8000 --设置ip地址 10.8.6.247 cat /etc/sysconfig/network-scripts/ifcfg-eth0 --列子 DEVICE=eth0 BOOTPROTO=static HWADDR=E4:1F:13:38:5E:60 IPADDR=10.26.88.205 NETMASK=255.255.255.192 GATEWAY=10.26.88.254 ONBOOT=yes TYPE=Ethernet --重启ip设置 /etc/init.d/network restart --查看这个目录下的文件大小 du -m /home/tomcat --修改linux启动默认 /etc/inittab 的id:5:initdefault: init[012356] 0: 关机 1:单用户 2:多用户网络没有网络服务 3:多用户网络有网络服务 5:图形界面 6:系统重启 --切换账户 报open to many su: /bin/bash: Too many open files in system vi /etc/sysctl.conf fs.file-max = 6553600 最后退出输入回车 --vi使用 复制:yy 粘贴:p 删除:dd --服务器间的数据copy scp jdk-6u16-linux-x64.bin root@10.26.88.204:/usr --代码更新 cp -r src/* target/xxt 修改文件名: mv 原来文件名,修改后的文件名 --启动ftp service vsftpd start service sshd start chkconfig sshd on ftp ip get 文件名 --下载文件 delete 文件名 --删除文件 bye --退出 linux jdk设置 chmod +x jdk-6u17-linux-i586.bin cat /etc/profile export JAVA_HOME=/usr/jdk1.6.0_17 export CLASSPATH=.:$JAVA_HOME/lib/tools.jar:$JAVA_HOME/lib/dt.jar export PATH=$JAVA_HOME/bin:$JAVA_HOME/jre/bin:$PATH export LANG='zh_CN' /usr/java --创建账户 useradd 账户名 useradd -G dba vas passwd 账户名 usermod 修改用户 passwd root killall 进程名 --查看字符集 locale --创建文件 touch filename --创建文件夹 mkdir filename --查看ip,mac地址 /sbin/ifconfig --修改时间 date -s 2011-01-25 date -s 02:23:30 clock -w clock -r clock -hwtosys --挂载文件 mount --挂载光盘 mount /mnt/cdrom unmount --查看分区 fdisk -l window linux 安装系统删除linux fdisk /mbr --查看当前运行的shell env --切换shell chsh -s /bin/csh --追踪路由命令 tracert www.sina.com --安装tar.gz文件 tar -zxvf qbittorrent-2.4.4.tar.gz tar -zxvf apache-tomcat-5.5.33.tar.gz --rpm 安装 --安装软件: rpm -ivh MySQL-clinet-community-5.1.52-1.rhel3.i386.rpm MySQL-server-community-5.1.52-1.rhel3.i386.rpm --查询是否有该软件 rpm -qa|grep name rpm -qa name --卸载软件 rpm -e name --强制卸载 rpm -e --nodeps name --任务调度 --启动任务调度 一般不需要手动调用下面 /sbin/service crond start //启动服务 /sbin/service crond stop //关闭服务 /sbin/service crond restart //重启服务 /sbin/service crond reload //重新载入配置 --任务编辑 crontab -e --任务删除 crontab -r --任务列表 crontab -l --网络命令 netstat -anp --显示本机到远程主机的历程名称 tracerout netstat -anp | grep '8000' | wc -l --建立超链接 ln -s 源 目标 --字符查找 grep -n "java" /home/tomcat/* grep 参数: -i 大小写 -v 显示不匹配的行 --宏定义 alias l='ll -t' 查看物理CPU的个数 cat /proc/cpuinfo |grep "physical id"|sort |uniq|wc -l 查看逻辑CPU的个数 cat /proc/cpuinfo |grep "processor"|wc -l 查看CPU是几核 cat /proc/cpuinfo |grep "cores"|uniq --cpu信息 more /proc/cpuinfo --位数 getconf LONG_BIT --wc 统计文本数 行数(line),字数(word),字符数(character) --安装ssh sudo apt-get install openssh-server 负载里面的 1分钟、5分钟、15分钟的数字 ,1分钟 当前的数字 除以 核数>=5 就表示 服务器需要升级 或者优化 释放内存:echo 3 >/proc/sys/vm/drop_caches --shell脚本文件的常用命令 幻行,使用该sh #!/bin/sh #不可变变量 readonly 变量名 #删除变量,函数 unset 变量名 #数组 a[0]='a0' a[1]='a1' a[2]='a2' #访问索引1 echo "${a[1]}" #访问数组中的所有变量 echo "${a[*]}" echo "${a[@]}" #变量置换 #缺省值置换 param为空或未赋值,word取代param,param不变 ${param:-word} #缺省值赋值 param为空或未赋值,word赋值param ${param:=word} #空值错误 如果为空,错误提示信息 ${param:? 'msg'} #有值置换 ${parame:+msg} #命令置换 命令获取的数据存放到变量中 DATE=`date` #算式置换 完成简单的运算 echo $(( 5*2 )) #输出命令的路径 type cmd #睡眠时间 单位:秒 sleep 2 #find cd ~ && find .. -name memcached -print 2>/dev/null -name 文件名 可用正则 -type 类型 f 通常文件 d 目录 b 块设备 c 字符设备 l 符号链接 p 命名管道 -mtime 修改时间 -atime 访问时间 -ctime 改变时间 +n 大于n天 -n 小于n天 n 等于n天 -size 磁盘块 -exec 后面执行命令 得到的查询结果{} cd ~ && find /home/zyl/tmp -name a.txt 2>/dev/null -print -exec rm -rf {} \; find . ! \( -name memcached -o -type f \) -print 2>/dev/null find ./ -size +100000k -print --xargs 数据传递给后面执行命令充当参数 --expr 简单的整数运算 expr 1 + 2 #需要有空格 不然当成一个字符串 --expr 使用正则,返回匹配的字符数 abc=12345abc expr $abc : '[0-9]*' $(( 1+2 )) --bc 计算器 bc obase :输出进制 ibase :输入进制 printf s:字符串 c:字符 d:十进制 x:十六进制 o:八进制 e:指数 f:固定浮点数 g:紧密浮点数 默认右对齐,-左对齐 printf "%16s\t%16s\n" "name" "user name" printf "%16s\t%16s\n" "str1" "ranga" printf "%16s\t%16s\n" "str2" "zhang" { date; uptime; who; } > a.txt --同时在控制台和文件中输入 cmd | tee a.txt ls << aa -l aa --用户输入 read name echo $name --表示不输出输入的字符串 stty -echo read name stty echo #输出输入的字符串 --文件描述符 重定向 date 1>a.txt 2>&1 0:stdin 1:stout 2:sterr >dev/null 表示丢弃输入文件 --定向到同一个文件 1>a.txt 2>&1 --关闭定向 6>- --查看文件信息 file fileName --超级链接 硬链接 ln src target 符号链接 ln -s src target -- 前台进程变成后台进程,进程 ctrl+z 后输入bg变成后台运行。bg %1 -- 后台进程变成前台进程, fg %1 --一些不好后台运行的,关闭终端时候自动结束可以用 nohup 运行 nohup ls & 输出日志到 nohup.out [tomcat@wxxyweb ~]$ ps -f UID PID PPID C STIME TTY TIME CMD tomcat 9545 9379 0 May29 pts/1 00:00:00 -bash tomcat 9597 9545 0 00:07 pts/1 00:00:00 ps -f uid:运行程序的账户 pid:进程标识符 ppid:parent pid c:cpu占有率 unlabeled:精确值,优先级 STIME:启动时间 cmd 执行的命令 --shell 版本 echo $BASH_VERSION echo $PWD;--路径 echo $UID;--用户编号 echo $SHLVL;--自动加1 echo $REPLY;--读到输入的第一行 echo $RANDOM;--0到32767的随机数 echo $SECONDS;--shell 启动的花费的时间 echo $IFS; --分离,不清楚 echo $PATH; --path路径 echo $HOME; --home if [ "$a" = "start" ];then echo "Start" elif [ "$a" = "start2" ];then echo "start2" else echo "no start" fi --判断文件 if [ -f /home/zyl/zyl.sh ];then -b file 存在并且是块文件 -c file 存在并且是字符文件 -d path 存在并且是一个目录 -e path 文件或目录 -f file 存在并且是正规文件 -g path 存在文件夹并且设置了sgid -h file 存在并且是链接 -k path 文件或目录存在,并且设置了粘泻位 -p file 存在并且是命名管道 -r path 文件或目录可读 -s file 文件大小大于0 -u path 设置了suid -w path 可写 -x path 可执行 -o path 当前进程有效用户id所拥有 --字符判断 = 两边需要有空格 if [ "$a" = "$b" ];then -z str 长度为0 -n str 长度不0 str1=str2 str1!=str2 --数字比较 if [ $a -eq $b ];then int1 -eq int2 等于 int1 -nq int2 不等于 int1 -lt int2 小于 int1 -le int2 小于等于 int1 -gt int2 大于 int1 -ge int2 大于等于 --判断上一个命令是否执行成功,临时变量写入 $? pwdd if [ $? -eq 0 ];then 复合比较 !expr expr1 && expr2 expr1 || expr2 --列子 ! [ $a -eq $b ] [ ! $a -eq $b ] # -a = and # -o = or [ -d "$a" -a "$a" = "$b" ] [ -d "$a" ] && [ "$a" = "$b" ] --case语法 case "$a" in "a") echo "aa";; "b") echo "bb";; *a*) echo "*a*";; *) echo "default";; esac --while 语法 x=0 while [ $x -lt 10 ] do echo $x x=`expr $x + 1` #`符号是在~按键上 done 输入重定向 while read LINE do case $LINE in *root*) echo "root $LINE";; esac done < /etc/passwd while : #无限循环 break,countinue --until 直到 true 结束 和while相反 x=0 until [ $x -gt 10 ] do echo $x x=`expr $x + 1` done --for 语法 for p in $* do echo "$i=$p" i=`expr $i + 1` done for i in /home/tomcat/* --select PS3="select menu" #提示菜单 select com in c1 c2 c3 all none do case $com in c1|c2|c3) echo "$com";; all) echo "c1 c2 c3";; none) break;; *) echo "erro ";; esac done --awk BEGIN:awk开始执行,运行一次 END:awk运行到最后执行 --关键字 FILENAME:文件名 NR:行数 NF:字段数 OFS:输出字段分隔符 默认空格 FS:输出 默认空格和制表符号 OFMT:数字输出格式 ORS:输出记录分隔符 默认新起一行 RS:输入记录分隔符 默认新起一行 $1 表字段1 类推 USER_INPUT_PRICE=$1 awk ' BEGIN { FS=":"} ($2>price) && (1==1) { printf "%s %s %s\n", $1,",>",price; next} $2<=price { printf "%s %s %s\n", $1,",<=",price; } ' price="$USER_INPUT_PRICE" b.txt --awk if USER_INPUT_PRICE=$1 awk -FS=":" '{ if(($2>price) && (1==1)) { printf "%s %s %s\n", $1,",>",price; next }else{ printf "%s %s %s\n", $1,",<=",price; } }' price="$USER_INPUT_PRICE" b.txt --while 不推荐使用do while while(x<NF){ printf "%s\n",$x; x+=1; } --for for(x=0;x<NF;x+=1){ printf "%s\n",$x; } awk 的while if for 类c设计 --特殊参数 $0 命令名称 $n 参数 从1开始 $# 参数个数 $* 所有的参数被双重应用 $@ 独立的双重应用 $? 最后一个执行命令的推出状态 $$ 进程号 $!最后一个后台命令的进程号 $- 输出字符包含 i 表示交互式脚本 #获取命令输入的参数 # ./zyl.sh -f a -o b -v c verbose=false while getopts f:o:v OPTION ; do case "$OPTION" in f) echo "f=$OPTARG";; o) echo "0=$OPTARG";; v) echo "v=$OPTARG";; \?) echo "????";; esac done #别名 alias lsa="ls -a" lsa #取消别名 unalias lsa --指定局部变量 typeset x=1 --输出唯一字符 uniq -c a.txt --排序 sort -rk 1,2 b.txt k:排序字段 1到2 -r:按逆序输出 -n:依照数值的大小排序。 -c:检查文件是否已经按照顺序排序。如果没有回提示。 -b:忽略每行前面开始出的空格字符。 -- -d 排序时,处理英文字母、数字及空格字符外,忽略其他的字符。 -f 排序时,将小写字母视为大写字母。 -i 排序时,除了040至176之间的ASCII字符外,忽略其他的字符。 -m 将几个排序好的文件进行合并。 -M 将前面3个字母依照月份的缩写进行排序。 -o<输出文件> 将排序后的结果存入指定的文件。 -r 以相反的顺序来排序。 -t<分隔字符> 指定排序时所用的栏位分隔字符。 +<起始栏位>-<结束栏位> 以指定的栏位来排序,范围由起始栏位到结束栏位的前一栏位。 --help 显示帮助。 --version 显示版本信息。 --多个词的替换 sed '/zyl/ s/1/2/; /tomcat/ s/1/3/' b.txt --d 表删除 sed '/tomcat/ d' a.txt --q退出 top | sed '1,5 !d;5q' --分隔 cut cut -f1- -s --output-delimiter='|' -d, b.txt -[b,c,f] 分别是:byte,char,field -d,:以分隔符号:逗号 -s:去除没有分隔符的数据 --output-delimiter 输出的分隔符 --join 联合 join -1 1 -2 2 -o 1.1 -a 1 -o1.2 -o 2.1 -t, a.txt b.txt -1 1 -2 2:相当于a.txt文件中的第一个字段,和b.txt表中的第二个字段 -o 1.1 -o1.2 -o 2.1 表示显示a.txt 中的第一二个字段,b.txt表中的第一个字段 -t,表示以逗号分隔 -a 1 表示不匹配的 join -1 1 -2 2 -o 1.1 -a 1 -o1.2 -o 2.1 -t, a.txt b.txt --单个字符的处理 查询替换 tr '源字符' '' < a.txt > b.txt tr '\r' '\n' < a.txt tr 'a-z' 'A-Z' < a.txt tr -s 'e' 连续e,替换成单个e echo "a b"| tr '[:blank:]' ',' [:blank:] 表转义字符有 alnum 字母或数字 alpha 字母 blank 空格 cntrl 控制符 digit 数字 graph 可印刷字符,不包括空格 lower 小写字符 print 可印刷字符,包括空格 punct 标点符号 space 空格 upper 大写字符 xdigit 十六进制 --eval output="> b.txt" eval echo hell "$output" --信号 SIGHUP 1 控制终端发起被挂着或控制进程死亡 SIGINT 2 键盘中断 SIGQUIT 3 来自键盘的推出信号 SIGKILL 9 杀死进程的信号 SIGLRM 14 定时时钟中断 SIGTERM 15 终止信号 --语法检测 /bin/sh -nv ./zyl.sh --init 0 :关机 1 :单用户模式 2 :多用户模式 3 :网络多用户模式 4 :未用 5 :图像多用户模式或停机 6 :重启 --uname a 所有信息 m 硬件类型 n 系统的主机名 r 发布的级别 s 操作系统的名称