这篇是迁移过程中,从linux编程中摘出的一篇,主要是刚接触linux时的一些基础的命令
linux命令
基本指令
压缩与解压
1、tar
tar cvfz /tmp/root.tar.gz ./* 压缩当前文件间到root.tar.gz
tar xvfz /tmp/root.tar.gz -C /tmp/add 解压root.tar.gz到/tmp/add
2、 zip
zip -r src.zip src
unzip -x a.zip ;-x 内层的压缩文件也能被解压出来
综上:压缩时, des <-- src; 解压时 src --> des
IP地址与主机名
1、 修改ip地址
方法1:# ifconfig eth0 192.168.0.20 netmask 255.255.255.0
方法2:/etc/sysconfig/network-scripts/ifcfg-eth0,编辑:
DEVICE=eth0
IPADDR=192.168.0.254
2、 修改主机名hostname
方法1:# hostname fc2
方法2:/etc/sysconfig/network
/etc/hosts
注意:方法1为临时修改,方法2为永久修改,若需生效需要重启服务Service network restart
问题:Sendmail启动时间过长的原因,可能是/etc/hosts下的主机名与ip名有问题,可能是与相应的配置文件不对应,127:0:0:0必须存在。也有可能是域名问题。系统sendmail的时候在查询你设置的主机名的A记录或反向域名记录。
环境变量设置
1、 修改系统启动文件
/etc/profile,或者/etc/bashrc
JAVA_HOME=/usr/share/jdk1.5.0_05
export JAVA_HOME
2.修改用户启动文件
/home/用户/.bashrc
JAVA_HOME=/usr/share/jdk1.5.0_05
export JAVA_HOME
3.直接在shell下设置
export JAVA_HOME=/usr/share/jdk1.5.0_05
注:IESBASE是在/etc/bashrc中设置,也可能在/home/root/.profile下设置的
vi查找与替换
1、指令模式下“/搜索内容”来查找
2、%s/查找内容/替换内容/g
cron
Crontab与crond.d两种配置方法
Crontab自动扫描cron.daily cron.week cron.month等目录下的文件
Crond.d目录下,需要手动控制命令/程序运行的周期。
* * * * * commond/shell
分 时 日 月 周
0-60 0-24 0-31 0-12 0-7
/2 每隔的意思
回车与换行的故事
这个是有历史原因的,故事大致如下,早期的打印机在重写启动一行时所有的时间,正好是打印两个字符的时间,如果在换行时,接受到了字符,这两个字符就会丢失。早期的科学家为了解决这个问题,就出现了回车与换行符/n/r,两个字符来补充这个空白期。
Windows系统,继承了这个传统,对于回车换行,还是这种2字符处理方式。随着科技的进步,打印机的换行不再是2个字符的时间,为了表示需要换行,只用一个字符就可以表示,所以unix下,回车与换行就变成了一个字符。
这样,当文件从windows下复制到unix下时,对于换行时就会多出一个字符来^M。而从unix复制到Windows下时,就会出现换行符消失的情况。
FTP传输时Ascii和binary模式的区别是回车换行的处理。binary模式不对数据进行任何处理,asci模式将回车换行转换为本机的回车字符,比如Unix下是\n,Windows下是\r\n,Mac下是\r。unix系统下行结束符是一个字节,即十六进制的0A,而ms的系统是两个字节,即十六进制的0D0A。
删除M符号(CTRL+V,然后CTRL+M)
1.sed -e 's/M//g' filename s为替换
2.在Vi中,使用:%s/^M//g
GDB调试
1、core文件
ulimit -c size(50000)
执行程序
Gdb 程序名 core文件名
2、命令
gdb se 启动gdb
list 列出下边将要执行的程序
br 文件名:37 设断点
run -d 2 开始运行,参数 –d 2
step/next 单步执行,step进入函数,next不进入
finish 函数返回
continue 接续执行
print 显示变量的值
watch/rwatch/watch –d 监视被写、被读变量
bt 看堆栈
回车 执行上一命令
注意: Linux调试注意使用日志来完成
strace -f -o /temp/1.txt tfserver -d
FTP命令
启动ftp
在执行之前需要将目标机启动起相应服务、
启动ftp服务:
在/etc/rc.d/init.d/目录下:命令 service vsftpd start
启动ssh服务,sftp服务
在/etc/init.d/目录下: 命令 /etc/init.d/sshd start
注意这里需要在绝对路径下执行sshd start
安装vsftpd服务器
rpm –qa | grep vsftpd
若显示“vsftpd-1.1.3-8”,则说明vsftpd服务器已经安装
到网上下载vsftpd-1.1.3-8.i386.rpm,并放在/media下,cd到/media下rpm -ivh vsftpd-1.1.3-8.i386.rpm进行安装。
开启root可以通过ftp软件连接的功能
默认有一些用户是不能通过ftp连接服务器的,比如root。如果需要开启这些用户,就需要做一些修改才可以。
(1)编辑/etc/vsftp/ftpusers文件,去掉里面root一行 也可以是/etc/vsftpd.ftpusers中
这个文件里存放的是被禁止的登录名
(2)编辑/etc/vsftp/user_list文件,去掉里面root一行 也可能在/etc/vsftpd.user_list中
win7下启动ftp
Windows 7的话进入控制面板-->程序和功能
在左边点“打开或关闭Windows功能”
勾选"Telnet服务器"
然后展开“Internet 信息服务器”
勾选“FTP服务器”
确定,等待安装完毕
linux/unix脚本
ftp –in filename #filename为文件名
cat > filename <<EOF
open ip
user $username $userpasswd
lcd 本地目录
cd 目标机目录
bin 二进制方式
prompt off 交互关闭
get name
put name
mget *
bye
EOF
windows下脚本
Windows下的ftp脚本与unix下的脚本有些差异,但过程相同:
@echo off
set ftpfilename=autoftp.cfg
echo open 192.168.133.34 >"%ftpfilename%"
echo lgh >>"%ftpfilename%"
echo www.liuguohua.com >>"%ftpfilename%"
echo bin >>"%ftpfilename%"
echo lcd h:\js >>"%ftpfilename%"
echo get sql.rar >>"%ftpfilename%"
echo put flower.zip >>"%ftpfilename%"
echo bye >>"%ftpfilename%"
ftp -s:"%ftpfilename%"
del "%ftpfilename%"
FTP服务
cd /etc/xinetd.d
,编辑ftp服务的配置文件gssftp的设置:开启ftp服务设置. vi gssftp
,将 修改两项内容:
server_args = -l –a
去掉-a 改为server_args = -l
disable=yes
改为disable=no
- 保存退出
Windows下启动周期运行脚本
控制面板 --> 系统和安全管理工具 --> 任务和计划程序
--> 创建任务
--> 触发器
--> 操作
telnet
基础知识
linux提供服务是由运行在后台的守护程序(daemon)来执行的。
守护进程的工作就是打开1个端口(port),等待(listen)进入的连接。在C/S模式中,如果客户提请了1个连接,守护进程就创建(fork)子进程来响应这个连接,而父进程继续监听其他服务的请求。
但是,对于系统所提供的每1个服务,如果都必须运行1个监听某个端口连接发生的守护程序,那么通常意味着系统资源的浪费。为此,引入“扩展的网络守护进程服务程序”xinetd(xinetd internet daemon)。telnet服务也是由xinetd守护的。
检测telnet、telnet-server的rpm包是否安装 OS:RedHat9
[root@localhost root]#rpm -qa telnet telnet-0.17-25
//telnet*.rpm是默认安装的//
[root@localhost root]#rpm -qa telnet-server 空
//telnet*.rpm是默认没有安装的//
开启Linux的telnet服务
一、安装telnet软件包(通常要两个)
1、 telnet-client (或 telnet),这个软件包提供的是 telnet 客户端程序; 2、 telnet-server ,这个软件包提供的是 telnet 服务器端程序; 安装之前先检测是否这些软件包已安装,方法如下:
[root@wljs root]#rpm –q telnet或[root@wljs root]#rpm –q telnet-client [root@wljs root]#rpm –q telnet-server
如果没有检测到软件包,需要进行安装,red hat linux 9默认已安装了telnet软件包,一般只要安装telnet-server软件包。
1、在red hat linux 9的安装盘中获取telnet-server-0.17-25.i386.rpm软件包。
2、安装软件包
[root@wljs root]#rpm –i telnet-server-0.17-25.i386.rpm
注意 LINUX AS4 默认是没有安装telnet包的 ,安装包在第4张盘上 linux9是 默认安装的.
二、启动telnet服务
1、开启服务
方法一:使用ntsysv,在出现的窗口之中,将 telnet前面*加上,然后按下 OK 。
方法二:编辑 /etc/xinetd.d/telnet
[root@wljs root]# vi /etc/xinetd.d/telnet 找到 disable = yes 将 yes 改成 no 。
2、激活服务
[root@wljs root]# service xinetd restart
三、测试服务
[root@wljs root]#telnet ip(或者hostname)
如果配置正确,系统提示输入远程机器的用户名和密码 Login: Password:
注:默认只允许普通用户
四、设置telnet端口
`vi /etc/services `
进入编辑模式后查找telnet(vi编辑方式下输入/telnet) 会找到如下内容: telnet 23/tcp telnet 23/udp
将23修改成未使用的端口号(如:2000),退出vi,重启telnet服务,telnet默认端口号就被修改了。
五、Telnet服务限制
telnet是明文传送口令和数据的,如果你对其默认的设置不满意,有必要对其服务范围进行限制。假设你的主机的ip是210.45.160.17,就可以按如下方式设置了,_! vi /etc/xinetd.d/telnet service telnet
{
disable = no #激活 telnet 服务,no bind = 210.45.160.17 #your ip
only_from = 210.45.0.0/16 #只允许 210.45.0.0 ~ 210.45.255.255 这个网段进入
only_from = .edu.cn #只有教育网才能进入!
no_access = 210.45.160.{115,116} #这两个ip不可登陆
access_times = 8:00-12:00 20:00-23:59 # 每天只有这两个时间段开放服务
...... }
六、Telnet root用户的登入
telnet 不是很安全,默认的情况之下不允许 root 以 telnet 进入 Linux 主机 。若要允许root用户登入,可用下列方法:
[root @wljs /root]# vi /etc/pam.d/login
#auth required pam_securetty.so #将这一行加上注释! 或
[root@wljs root]# mv /etc/securetty /etc/securetty.bak
这样, root 就可以直接进入 Linux 主机了。不过,建议不要这样做。也可以在普通用户进入后,切换到root用户,拥有root的权限。
-----------------------------------------
外一篇:
1。如果安装了telnet、telnet-server的rpm包,就跳到2。,否则安装这个包。
2。修改telnet服务配置文件 vi /etc/xinetd.d/telnet service telnet {
disable = yes flags = REUSE
socket_type = stream
wait = no user = root
server = /usr/sbin/in.telnetd log_on_failure += USERID }
将disable=yes行前加#,或者改为disable=no
3。重新启动xinetd守护进程
由于telnet服务也是由xinetd守护的,所以安装完telnet-server,要启动telnet服务就必须重新启动xinetd
[root@localhost root]#service xinetd restart 4。关闭系统的防火墙
linux系统默认的防火墙是“high”。 (方法:[root@localhost root]# setup 选择:“firewall configuration”
选择:security level——“no firewall”)
5。如果想允许root以telnet登入linux主机?因为 telnet 不是很安全,自然预设的情況之下就是无法允许 root 以 telnet 登入 Linux 主机!想要开放 root 以 telnet 登入 Linux 主机的话,可以这样做: vi /etc/pam.d/login
在 auth required /lib/security/pam_securetty.so 这行前加 # ,即把这行注释掉就行啦!
安装telnet-server
[root@localhost root]#rpm -ivh telnet-server*.i386.rpm
4。修改telnet服务配置文件
vi /etc/xinetd.d/telnet
service telnet {
disable = yes
flags = REUSE
socket_type = stream
wait = no
user = root
server = /usr/sbin/in.telnetd log_on_failure += USERID }
将disable=yes行前加#,或者改为disable=no PS:
安装telnet-server后,系统才有文件/usr/sbin/in.telnetd
5。重新启动xinetd守护进程
由于telnet服务也是由xinetd守护的,所以安装完telnet-server,要启动
telnet服务就必须重新启动xinetd
[root@localhost root]#service xinetd restart 或
[root@localhost root]#/etc/init.d/xinetd restart 6。关闭系统的防火墙
linux系统默认的防火墙是“high” 命令行界面CLI:
[root@localhost root]# setup
选择:“firewall configuration”
选择:security level——“no firewall” 7。测试 telnet IP
QUOTE:
Red Hat Linux release 9 (Shrike) Kernel 2.4.20-8 on an i686 login:
出现,就OK了!
telnet默认开机启动
2)。命令chkconfig chkconfig --add telnet chkconfig telnet on 3)。图形用户界面GUI
redhat-conhat-config-services 或
“主菜单”——“系统设置”——“服务器设置”——“服务”
cron
Crontab 介绍
crontab命令的功能是在一定的时间间隔调度一些命令的执行。
/etc/crontab 文件
在/etc目录下有一个crontab文件,这里存放有系统运行的一些调度程序。每个用户可以建立自己的调度crontab。
如:
[root@dave ~]# cat /etc/crontab
SHELL=/bin/bash
PATH=/sbin:/bin:/usr/sbin:/usr/bin
MAILTO=root
HOME=/
# run-parts
01 * * * * root run-parts /etc/cron.hourly
02 4 * * * root run-parts /etc/cron.daily
22 4 * * 0 root run-parts /etc/cron.weekly
42 4 1 * * root run-parts /etc/cron.monthly
/etc/cron.deny 和 /etc/cron.allow 文件
/etc/cron.deny 表示不能使用crontab 命令的用户
/etc/cron.allow 表示能使用crontab的用户。
如果两个文件同时存在,那么/etc/cron.allow 优先。
如果两个文件都不存在,那么只有超级用户可以安排作业。
每个用户都会生成一个自己的crontab 文件。这些文件在/var/spool/cron目录下:
如:
[root@dave ~]# cd /var/spool/cron
[root@dave cron]# ls
oracle root
我们直接查看这个文件,里面的内容和对应用户显示的crontab -l 一致。
[root@dave cron]# cat oracle
00 6 * * * /u02/scripts/del_st_archive.sh >/u02/scripts/del_st_arch.log 2>&1
[root@dave cron]# cat root
0 12 * * * /root/bin/sync-clock.sh
[root@dave cron]#
Crontab 使用说明
Crontab 格式说明
我们可以用crontab -e 添加要执行的命令。 命令执行的结果,无论是标准输出还是错误输出,都将以邮件形式发给用户。
添加的命令必须以如下格式:
* * * * * /command_path
前五个字段可以取整数值,指定何时开始工作,第六个域是字符串,即命令字段,其中包括了crontab调度执行的命令。 各个字段之间用spaces和tabs分割。
前5个字段分别表示:
分钟:0-59
小时:1-23
日期:1-31
月份:1-12
星期:0-6(0表示周日)
还可以用一些特殊符号:
"":表示任何时刻
",":表示分割
"-":表示一个段,如第二端里: 1-5,就表示1到5点
"/n":表示每个n的单位执行一次,如第二段里,/1, 就表示每隔1个小时执行一次命令。也可以写成1-23/1.
一些示例:
00 8,12,16 * * * /data/app/scripts/monitor/df.sh
30 2 * * * /data/app/scripts/hotbackup/hot_database_backup.sh
10 8,12,16 * * * /data/app/scripts/monitor/check_ind_unusable.sh
10 8,12,16 * * * /data/app/scripts/monitor/check_maxfilesize.sh
10 8,12,16 * * * /data/app/scripts/monitor/check_objectsize.sh
43 21 * * * 21:43 执行
15 05 * * * 05:15 执行
0 17 * * * 17:00 执行
0 17 * * 1 每周一的 17:00 执行
0,10 17 * * 0,2,3 每周日,周二,周三的 17:00和 17:10 执行
0-10 17 1 * * 毎月1日从 17:00到7:10 毎隔1分钟 执行
0 0 1,15 * 1 毎月1日和 15日和 星期一的 0:00 执行
42 4 1 * * 毎月1日的 4:42分 执行
0 21 * * 1-6 周一到周六 21:00 执行
0,10,20,30,40,50 * * * * 每隔10分 执行
* 1 * * * 从1:0到1:59 每隔1分钟 执行
0 1 * * * 1:00 执行
0 */1 * * * 毎时0分 每隔1小时 执行
0 * * * * 毎时0分 每隔1小时 执行
2 8-20/3 * * * 8:02,11:02,14:02,17:02,20:02 执行
30 5 1,15 * * 1日 和 15日的 5:30 执行
& 后台执行命令
当在前台运行某个作业时,终端被该作业占据;而在后台运行作业时,它不会占据终端。可以使用&命令把作业放到后台执行。
如:
30 2 * * * /data/app/scripts/hotbackup/hot_database_backup.sh &
在后台运行作业时要当心:需要用户交互的命令不要放在后台执行,因为这样你的机器就会在那里傻等。
不过,作业在后台运行一样会将结果输出到屏幕上,干扰你的工作。如果放在后台运行的作业会产生大量的输出,最好使用下面的方法把它的输出重定向到某个文件中:
如:
command >out.file 2>&1 &
在这个例子中,2>&1表示所有的标准输出和错误输出都将被重定向到一个叫做out.file 的文件中。
2>&1 含义
先看一个例子:
0 2 * * * /u01/test.sh >/dev/null 2>&1 &
这句话的意思就是在后台执行这条命令,并将错误输出2重定向到标准输出1,然后将标准输出1全部放到/dev/null 文件,也就是清空。
在这里有有几个数字的意思:
0表示键盘输入
1表示标准输出
2表示错误输出.
我们也可以这样写:
0 2 * * * /u01/test.sh >/u01/out.file & --这里没写,默认是1
0 2 * * * /u01/test.sh 1>/u01/out.file &
0 2 * * * /u01/test.sh 2>/u01/out.file &
0 2 * * * /u01/test.sh 2>/u01/out.file 2>&1 &
将tesh.sh 命令输出重定向到out.file, 即输出内容不打印到屏幕上,而是输出到out.file文件中。
2>&1 是将错误输出重定向到标准输出。 然后将标准输入重定向到文件out.file。
&1 表示的是文件描述1,表示标准输出,如果这里少了&就成了数字1,就表示重定向到文件1。
& :后台执行
测试:
ls 2>1 : 不会报没有2文件的错误,但会输出一个空的文件1;
ls xxx 2>1: 没有xxx这个文件的错误输出到了1中;
ls xxx 2>&1: 不会生成1这个文件了,不过错误跑到标准输出了;
ls xxx >out.txt 2>&1 == ls xxx 1>out.txt 2>&1; 因为重定向符号>默认是1,这句就把错误输出和标准输出都传到out.txt 文件中。
2>&1写在后面的原因
格式:command > file 2>&1 == command 1> file 2>&1
首先是command > file将标准输出重定向到file中, 2>&1 是标准错误拷贝了标准输出,也就是同样被重定向到file中,最终结果就是标准输出和错误都被重定向到file中。
如果改成: command 2>&1 >file
2>&1 标准错误拷贝了标准输出的行为,但此时标准输出还是在终端。>file 后输出才被重定向到file,但标准错误仍然保持在终端。
cron 后台进程
service crond status
其他
- 与AIX 区别:
crontab 文件会补放到/var/spool/cron/crontabs 里
AXI 里没有*/3 这种形式,只能用1,3,5,7,9 这样来代替
shell脚本编程
说明性语句
#!bin/sh
功能性语句
- read
-- read 变量名
-- echo
-- expr 12 + 5 * 3
27
- expr
-- 用于简单的整数运算
-- 例:
expr 12 + 5 * 3
27
结构性语句
if [-d $1]
then
echo "$1"
case 字符串变量 in
模式1)
命令表
::
模式1)
命令表
::
模式1)
命令表
::
*)
::
esac
for file in $FileName
do
命令式
done
while 命令或表达式
do
命令式
done
shell函数
cd train/shell/
function_name()
{
command1
****
commandn
}
value_name = `function_name[arg1 arg2 arg……]