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	%16s
" "name"  "user name"
printf "%16s	%16s
" "str1"  "ranga"
printf "%16s	%16s
" "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
", $1,",>",price; next}
  $2<=price { printf "%s %s %s
", $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
", $1,",>",price; next
  }else{ 
   printf "%s %s %s
", $1,",<=",price; 
  }
}' price="$USER_INPUT_PRICE" b.txt
 
--while 不推荐使用do while
while(x<NF){
 printf "%s
",$x;
 x+=1;
}
 
--for
for(x=0;x<NF;x+=1){
 printf "%s
",$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 '
' '
' < 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  操作系统的名称

  

原文地址:https://www.cnblogs.com/fengkui/p/6122035.html