Linux常用命令与shell函数总结
2019年08月07日 22:30:21 前方一片光明 阅读数 74更多
所属专栏: Linux技术
知识共享许可协议 版权声明:署名,允许他人基于本文进行创作,且必须基于与原先许可协议相同的许可协议分发本文 (Creative Commons)
一、主机相关命令
查看主机名:hostname 或者 export
修改主机名:vi /etc/sysconfig/network
查看ip地址:ifconfig
修改ip地址:vi /etc/sysconfig/network-scripts/ifcfg-eth0
修改ip与主机名的映射关系:vi /etc/hosts
关闭iptables并设置其开机启动/不启动:service iptables stop
重启:reboot
关机:halt
二、防火墙
查看防火墙状态:service iptables status
查看防火墙状态:/etc/init.d/iptables status
查看防火墙是否开机启动:chkconfig iptables –list
设置防火墙开机启动:chkconfig iptables on
设置防火墙开机不启动:chkconfig iptables off
关闭防火墙指令:/etc/init.d/iptables stop
永久关闭防火墙指令:chkconfig iptables off
开启防火墙指令:/etc/init.d/iptables start
永久开启防火墙指令:chkconfig iptables on
重启服务:service iptables restart
三、修改开机等待时间
vi /boot/grub/menu.lst
四、启动Linux默认进入命令行模式
修改/etc/inittab,
将id:5:initdefault:修改为id:3:initdefault:
设置后台服务的自启配置
chkconfig 查看所有服务器自启配置
开源的,安全的系统,通常使用命令行界面,
命令名称 --help:列出该命令的使用方式
man 命令名称:列出该命令的使用方式
cd 目录:切换到某个目录下
cd …:切换到父目录
pwd:查看当前目录(print working directory)
五、文件查询命令
find / -name my*:在根目录(/)下查找以my开头的文件
whereis :查询某个命令所在目录
grep:查询某个字符串所在行(列出本行所有内容)
六、文件操作命令
ls :列出所有目录和文件的名字
ls -l:竖着列出所有文件详细信息
ll:ls -l 的缩写
cp:复制文件
touch:创建文件
mkdir:创建文件夹
rm:删除文件
rmdir:删除空的文件夹
rm -r:递归删除文件,询问
rm -rf:直接删除文件,不询问(f:force)
rm命令慎用,可能会毁掉一个公司!解决方案mv 文件(夹) /tmp
mv:移动文件
rename:重命名(批量命名:rename .repo.bak .repo *)
七、文件显示命令
more:分页查询(空格 下翻一页 b 上翻一页 q 退出)
less:分页查询 (空格 下翻一页 b 上翻一页 q 退出 ↑上翻一行 ↓下翻一行 /…搜索)
cat:列出文件全部内容
tac:逆序列出文件内容
head -n 文件名:列出前n行
tail -n 文件名:列出后n行(查日志用)
tail -f install.log ---->只在同一个文件跟踪(文件大于64M会产生新文件)
tail -F install.log---->按照文件名跟踪
wc:打印出多少字节,多少字符,多少行
八、文件编辑命令
vi:编辑文件,如果没有文件就创建文件并编辑
从编辑模式切换到命令模式使用“esc”键,
连续两次大写Z退出命令模式
从命令模式切换到编辑模式使用“A”、“a”、“O”、“o”、“I”、“i”键
a:即append,添加内容,在当前字符后添加文本;
A:在行末添加文本;
i:在当前字符前插入文本;
I:在行首插入文本;
o:在当前行后面插入一空行;
O:在当前行前面插入一空行;
:wq:在命令模式下,执行存盘退出操作;
:w:在命令模式下,执行存盘操作;
:w!:在命令模式下,执行强制存盘操作;
:q:在命令模式下,保存修改执行退出vi操作;
:q!:在命令模式下,不保存修改执行强制退出vi操作;
dd:删除一行
ln 3.txt 4:为3.txt创建链接4(硬链接,相当于复制了一份,删除3.txt后,4依然存在)
ln -s 3.txt 5:为3.txt创建链接5(软链接,相当于快捷方式,删除3.txt后,5不存在)
九、权限:
r是读,w是写,x是可执行
chmod +x 文件名:给文件添加可执行权限(所有用户都加)
chmod -x 文件名:给文件去掉可执行权限(所有用户都去掉)
chmod u+x 文件名:只给自己加权限
chmod g+x 文件名:给同组其他人加权限
chmod o+x 文件名:给其他人加权限
chmod 755 文件名:755转为2进制为111101101对应的为 rwxr-xr-x,从而修改所有用户的权限
十、用户:
useradd 用户名:添加用户(添加之后在home目录下面多一个用户目录)
passwd 用户名:设置密码
groupadd:添加一个组
useradd testuser -g group:在某个组下添加用户
usermod -g group testuser :修改用户所在的组
userdel:删除用户(home下的目录没有删除)
su:切换用户
exit:返回上一目录
chown 用户名 文件名:改变文件的所有者:
为用户配置sudo权限:
用root编辑 vi /etc/sudoers
在文件的如下位置为shuhao添加一行
root ALL=(ALL) ALL
shuhao ALL=(ALL) ALL
然后shuhao用户就可以用sudo来执行系统级别的指令
十一、SSH
两个linux系统远程复制文件:
scp 文件名 用户名@主机ip:目标文件夹
ssh免密登录命令:
第一步:ssh-keygen (生成密钥对,提示时回车即可)
第二步:ssh-copy-id 192.168.1. (复制公钥到目标主机)
linux与其他机器之间共享文件:
在Linux中创建ftp server,通过windows往上传
开启ftp服务:service vsftpd start
停止ftp服务:service vsftpd stop
判断是否开启:ftp localhost
退出服务:bye
查询linux的IP:ifconfig
关闭linux防火墙:service iptables stop
ftp登录:anonymous
设置vsftpd开机自启动:chkconfig vsftpd on
远程管理服务器:通过ssh管理,可以加密
十二、下载命令
wget http://
十三、上传安装包到服务器
上传:如果不cd到指定目录,则上传到当前用户的主目录\root\
可以使用图形化工具,如filezilla
可以使用sftp工具:alt+p调出后,用put命令上传
下载:lcd到本地的目标路径
sftp> lcd d:/
sftp> get /home/jdk-7u45-linux-x64.tar.gz
十四、查看网络端口
netstat -nltp
十五、yum
yum install 全部安装
yum install package1 安装指定的安装包package1
yum groupinsall group1 安装程序组group1
yum update 全部更新
yum update package1 更新指定程序包package1
yum list 显示所有已经安装和可以安装的程序包
yum list package1 显示指定程序包安装情况package1
yum clean packages 清除缓存目录下的软件包
yum clean headers 清除缓存目录下的 headers
yum clean oldheaders 清除缓存目录下旧的 headers
yum clean, yum clean all (= yum clean packages; yum clean oldheaders) 清除缓存目录下的软件包及旧的headers
十六、Shell变量定义
定义变量和常量不能有空格,用到空格时用双引号
系统变量:echo $HOME $PWD $SHELL $USER
查看环境变量:echo $path
显示当前shell中所有变量:set
unset:撤销当前变量
双引号不会脱意,单引号会脱意
export 可以把变量提升为全局变量,如export JAVA_HOME=/usr/local/jdk1.7
source /etc/profile 重新把变量执行一遍
A=ls -la
反引号:运行里面的命令,并把结果返回给变量A
A=$(ls -la)等价于反引号
$? 表示上一个命令退出的状态,true是0,false是1
$$表示当前进程编号
$0表示当前脚本名称
$n表示位置变量(n代表数字,n>=1)
$#表示变量的个数,常用语循环
∗ 和 *和 ∗和@都表示参数列表
区别:当他们被双引号包含时,”$*”会将所有的参数作为一个整体,以”$1 2... 2... 2...n”的形式输出所有参数;”$@”会将各个参数分开,以”$1”” 2 ” . . . ” 2”...” 2”...”n”的形式输出所有参数
运算符:
格式:expr m + n
或 $((m+n))
注意:expr运算符之间要有空格
如:a=$(((2+3)*4))
for循环:
第一种
for N in 1 2 3
do
echo $N
done
或 for N in 1 2 3;do echo $N;done
或 for N in {1…3};do echo $N;done
第二种:
for ((i = 0;i <= 5;i ++))
do
echo “welcome $i times”
done
或for((i = 0;i <= 5;i ++));do echo “welcome $i times”;done
While循环
第一种
while true
do
echo aaa
sleep 1
done
第二种
int=1
while((int<=3))
do
echo $int
let int++
done
Case语句
case $1 in
start)
echo “starting”
;;
stop)
echo “stoping”
;;
*)
echo “Usage: {start|stop}”
esac
read -p(提示语句)-n(字符个数)-t(等待时间)
read -p "please input your your name: " c
If判断(注意[]左右两边都要有空格)
If condition
Then
Statements
[ elif condition
Then statements. …]
[ else
statements ]
fi
判断语句(注意condition左右两边都要有空格)
[condition]
非空返回true,可使用$?验证(0位true,>1为false)
[ ] 空返回false
[ condition ] && echo OK || echo not OK
= 字符串比较
-lt 小于
-le 小于等于
-eq 等于
-gt 大于
-ge 大于等于
-ne 不等于
-f 判断目标是否存在并且为正规文件
-s 判断目标是否存在并且不为空
-d 判断目标是否存在并且为目录
-L 判断目标是否存在并且为符号链接
-r 判断目标是否可读
-w 判断目标是否可写
-x 判断目标可否执行
Shell自定义函数
语法
[ function ] funname [()]
{
action;
[ return int; ]
}
Function start() / function start / start()
例如:
#!/bin/bash
fSum 3 2;
function fSum()
{
echo $1,$2;
return $(($1+$2))
}
total=$?;
echo “第一次调用后的返回结果:”$total
fSum 5 7;
total=$?;
echo t o t a l , total, total,?;
return后面跟数值0-255
脚本调试
sh -vx fun.sh
或者在脚本中增加set -x
十七、高级命令行文本处理工具
cut
PATH:/usr/local/sbin:/usr/local/bin:/sbin:/bin:/usr/sbin:/usr/bin:/apps/jdk1.7.0_45/bin:/root/bin
echo $PATH | cut -d ‘:’ -f 5 (将path变量取出,找到用:分割的第5个路径)
echo $PATH | cut -d ‘:’ -f 3,5 (将path变量取出,找到第3和第5个路径)
echo $PATH | cut -d ‘:’ -f 3-5 (将path变量取出,找到第3-5个路径)
echo $PATH | cut -d ‘:’ -f 3- (将path变量取出,找到第3到最后一个路径)
echo $PATH | cut -d ‘:’ -f 1-3,5 (将path变量取出,找到第1到3和第5路径)
例子:只显示/etc/passwd的用户和shell
cat /etc/passwd | cut -d ‘:’ -f 1,7
sort
cat /etc/passwd | sort 默认首字母来排序
cat /etc/passwd | sort -t ‘:’ -k 3 默认用:分割的第3列 首字母来排序
cat /etc/passwd | sort -t ‘:’ -k 3n 默认用:分割的第3列 数字来排序
cat /etc/passwd | sort -t ‘:’ -k 7 -u 去重
uniq 可以取出排序过的文件中的重复行,与sort合用
cat testfile | sort |uniq
cat testfile | sort |uniq -c 统计每行出现的次数
wc
wc -l /etc/passwd 统计行数
wc -w /etc/passwd 统计单词出现次数
wc -m /etc/passwd 统计文件的字符数
sed(物理删除、替换)
删除:d
sed ‘2d’ testfile 删除testfile的第二行
sed ‘2,$d’ testfile 删除testfile的第二行到末尾的所有行
sed ‘$d’ testfile 删除testfile的最后一行
sed '/test/'d testfile 删除testfile的所有包含test的行
替换:s
sed ‘s/test/mytest/g’ testfile 在整行范围内把test替换为mytest,如果没有g标记,则只有每行第一个匹配的test被替换成mytest;
sed -n ‘s/^test/mytest/p’ testfile ^表示以test开头,(-n)选项与p标志一起使用,表示只打印那些发生替换的行,也就是说,如果某一行的开头的test被替换成mytest,就打印他
sed ‘s/^192.168.0.1/&localhost/’ testfile &表示追加,某一行的开头的192.168.0.1被替换成192.168.0.1localhost
sed -n ‘s/loveable/\1rs/p’ testfile love被标记为第一组,所有loveable会被替换成lovers,而且被替换的行会被打印
awk
last -n 5 取出最近登录的5个记录
last -n 5 | awk ‘{print $1}’ 取出最近登录的5个记录,并打印出第1列。$0表示所有域,$1表示第1列
cat /etc/passwd | awk -F ‘:’ ‘{print $1}’ -F为指定分隔符为:
cat /etc/passwd | awk -F ‘:’ ‘{print $1"\t"$7}’ "\t"表示tab键,打印出第1列和第7列
十八、可执行文件:
a.sh
#!/bin/bash
while true
do
echo “han shu hao”
sleep 1
done
十九、其他
管道:
ls -rl /etc | more:把上一个命令执行的结果交给下一个命令
wall :把字符警告所有人
wall ‘date’:把结果警告给所有人
重定向:
例如ls > a.txt
把结果放到a.txt中,覆盖原来的结果
例如ls >> a.txt
把结果放到a.txt中,不覆盖原来结果
2> 例如lssss 2>a.txt
把错误结果放到a.txt中
清屏:clear
ctrl+c 或者ctrl+z来终止ping命令的执行。
挂载:mount
mkdir /mnt/cdrom 创建一个目录,用来挂载
将设备/dev/cdrom挂载到挂载点:/mnt/cdrom/中
mount -t iso9660 -o ro /dev/cdrom /mnt/cdrom/
umount /mnt/cdrom 解除挂载
统计文件或文件夹的大小
du -h /mnt/cdrom/Package
du -sh *
service network status 查看指定服务的状态
service network stop 停止指定服务(不要轻易敲)
service network start 启动指定服务
service network restart 重启指定服务
service --status-all 查看系统中所有的后台服务