linux命令

这篇是迁移过程中,从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

  • 形式1

    if 表达式
    then 命令表
    else 命令表
    fi
    
  • 形式2

if [-d $1]
then
     echo "$1"
  • test
    test语句可测试的三种对象:字符串、整数、文件属性

    test "$answer" = "yes"
    test $num -eq  19
    test -d tmp    #是否为目录
    
    if test -f $filename
    
  • case

case 字符串变量 in
模式1)
        命令表
        ::
模式1)
        命令表
        ::
模式1)
        命令表
        ::
*)
        ::
esac
  • for
for file in $FileName
do 
    命令式
done
  • while
while 命令或表达式
do
    命令式
done
  • continue
  • break

shell函数

cd train/shell/

function_name()
{
command1
****
commandn
}

value_name = `function_name[arg1 arg2 arg……]
# Linux 

评论

Your browser is out-of-date!

Update your browser to view this website correctly. Update my browser now

×