linux-基本命令1
来源:互联网 发布:网络语言橘子什么意思 编辑:程序博客网 时间:2024/05/18 00:01
1 Linux命令简介
1.1 命令格式
[root@test root]# command [-options] parameter1 parameter2 ... 指令 选项 参数(1) 参数(2)
说明:
1. 提示符:root账户提示符为#,一般身份用户提示符为$
2. 指令:区分大小写
3. 选项:可以使用-h或者--help
4. 指令太长:可使用\符号使指令连续到下一行
5. 使用分号表示连续执行:ll bashrc ; ll --time=atime bashrc ; ll --time=ctime bashrc
命令转义:
[root@test root]# \command这样就使用原来的命令而不是alias
1.2 参数含义
一般来说,linux的命令参数有其一般含义:
-f --force 略过不存在的文件,不显示任何信息-i --interactive 进行任何删除操作前必须先确认-r/R --recursive 同时删除该目录下的所有目录层-h --h是可以以k M G 等等为单位,不是只显示一个数字-h --help 显示此帮助信息并离开-v --verbose 详细显示进行的步骤-v --version 显示版本信息并离开
1.3 切换终端
切换文字终端和图形界面:
[Ctrl] + [Alt] + [F1] ~ [F6] :文字界面登陆 tty1 ~ tty6 终端机; [Ctrl] + [Alt] + [F7] :图形桌面。
1.4 基础命令练习
1.5 linux快捷键
ctrl-c 发送 SIGINT 信号给前台进程组中的所有进程。常用于终止正在运行的程序。
ctrl-z 发送 SIGTSTP 信号给前台进程组中的所有进程,常用于挂起一个进程。
ctrl-d 不是发送信号,而是表示一个特殊的二进制值,表示 EOF。
ctrl-l 清屏
ctrl-r 逆向搜索包含输入字符串的命令,继续按 Ctrl+r,再向上搜索,可使用 Ctrl+c 中断命令
在终端直接上翻,下翻【比如ls输出太多,看不到上面显示的】
SHIFT+ PAGEUP
SHIFT + PAGEDOWN
1.6 linux查询命令man_info
/usr/man/man2 系统调用─关于核心函数的文档
/usr/man/man3 C库调用─libc函数的使用手册页
/usr/man/man4 特殊文件─关于/dev目录中的文件的信息
/usr/man/man5 文件格式─/etc/passwd和其他文件的详细格式
/usr/man/man6 游戏
/usr/man/man7 宏命令包─对Linux文件系统、使用手册页等的说明
/usr/man/man8 系统管理─根操作员操作的使用手册页
/usr/man/man9 核心例程─关于Linux操作系统内核源例程或者内核模块技术指标的文档
查询linux c函数open#man 2 open
1.7 linux查看文件命令
1.7.1 直接查看cat_tac_nl
cat: 由第一行开始显示文件内容
cat -n 显示行号 cat -A 显示特殊字符
tac: 从最后一行开始显示文件内容,可以看出 tac 是 cat 倒写形式
nl : 显示的时候,顺便输出行号!
1.7.2 可翻页查看more_less
more: 一页一页的显示文件内容less:与more 类似,但是比 more 更好的是,他可以往前翻页!
空格下翻一页[Page Up]上翻一页[Page Down]下翻一页[Home]第一页[End]末页/String向下查询String?String向上查询Stringn,Nn表示下一个匹配,N表示上一个匹配q退出
1.7.3 数据选取head_tail
head: 只看头几行#假设a.txt有100行head a.txt #默认显示前10行(L1~L10)head -n 20 a.txt #显示前20行(L1~L20)head -n -10 a.txt#打印末尾10行之前(L1~L90)tail: 只看结尾几行
#假设a.txt有100行tail a.txt #默认显示最后10行(L91~L100)tail -n 20 a.txt #显示最后20行(L81~L100)tail -n +50 a.txt #显示50行以后内容(L51~L100)tail -f tester.log #动态追踪tester.log的最后10行,直到用户输入Ctrl+c综合示例:
查看a.txt的L11~L20head -n 20 a.txt | tail -n 10
1.8 命令file:查看文件类型
file 文件名
which cd #查找的是命令,参数-a将所有可以找到的指令均列出,而非第一个。whereis passwd #查找的是档案名(命令) 从数据库中找,快,非最新,系统的一般有,临时新建的不一定。不能通配符locate passwd #查找的是档案名(命令) 从数据库中找,快,非最新,系统的一般有,临时新建的不一定。不能通配符find /etc -name '*passwd*' #查找的是档案名(命令) 遍历硬盘,慢,最新,能通配符。
1.9 命令history:搜索历史命令
bash将使用过的旧命令记录在家目录下的~/.bash_history 文件下(默认1000条)。特别的,~/.bash_history 记录的是前一次登入以前所执行过的指令, 而至于这一次登入所执行的指令都被暂存在暂内存中,当您成功的注销系统后,该指令记忆才会记录到 .bash_history 当中!
[root@linux ~]#history 3
利用history执行命令
[root@linux ~]#!number[root@linux ~]#!command[root@linux ~]#!!参数:
number:执行第几笔指令的意思;
command :由最近的指令向前搜寻"指令串开头为 command"的那个指令,并执行;
!!:就是执行上一个指令(相当于按↑按键后,按 Enter)
统计命令使用频率
cat history.bak | awk '{for(i=1;i<=5;i++) $i=""; print}' | sort | uniq -c | sort -r -n > history.sort.bak
1.10 命令time:测量程序运行时间
#time find . -name "mysql.sh" real 0m5.064s <== 实际使用时间(real time) user 0m0.020s <== 用户态使用时间(the process spent in user mode) sys 0m0.040s <== 内核态使用时间(the process spent in kernel mode)
1.11 命令alias:加入命令别名
系统设置永久,给全系统使用/etc/bashrcsource /etc/bashrc用户设置永久,给个人用户使用~/.bashrc
source /home/xxx/.bashrc 命令行设置临时,当次有效#alias cl='clear'
BASH Shell的配置文件:
1,系统设定值
所谓的系统设定值,也就是每个用户进入到bash shell之后先读取的配置文件.默认有以下几个:
(1),/etc/profile: 此文件为系统的每个用户设置环境信息,当用户第一次登录时,该文件被执行.并从/etc/profile.d目录的配置文件中搜集shell的设置.
(2),/etc/bashrc: 为每一个运行bash shell的用户执行此文件.当bash shell被打开时,该文件被读取.
(3),/etc/man.config: 此文件的内容规范了使用man时man page的路径在哪里.
2,个人设定值
个人设定值就是存在个人根目录的那几个隐藏文件.
(1),~/.bash_profile: 每个用户都可使用该文件输入专用于自己使用的shell信息,当用户登录时,该文件仅仅执行一次!默认情况下,他设置一些环境变量,执行用户的.bashrc文件.
(2),~/.bashrc: 该文件包含专用于你的bash shell的bash信息,当登录时以及每次打开新的shell时,该文件被读取.(每个用户都有一个.bashrc文件,在用户目录下)
(3),~/.bash_history: 此文件用于记录曾经用过的命令.
(4),~/.bash_logout: 当每次退出系统(退出bash shell)时,执行该文件.
3,加载过程
在登录Linux时要执行文件的过程如下:
在刚登录Linux时,首先启动 /etc/profile 文件,然后再启动用户目录下的 ~/.bash_profile、 ~/.bash_login或 ~/.profile文件中的其中一个,执行的顺序为:~/.bash_profile、 ~/.bash_login、 ~/.profile。如果 ~/.bash_profile文件存在的话,一般还会执行 ~/.bashrc文件。因为在 ~/.bash_profile文件中一般会有下面的代码:
if [ -f ~/.bashrc ] ; then
. ./bashrc
fi
~/.bashrc中,一般还会有以下代码:
if [ -f /etc/bashrc ] ; then
. /bashrc
fi
所以,~/.bashrc会调用 /etc/bashrc文件。最后,在退出shell时,还会执行 ~/.bash_logout文件。
执行顺序为:/etc/profile -> (~/.bash_profile | ~/.bash_login | ~/.profile) -> ~/.bashrc -> /etc/bashrc -> ~/.bash_logout
常用的alias(可以作为临时alias,命令行输入)
alias ..='cd ..'alias ...='cd ../..'alias cd..='cd ..'alias l='ls -lthr'alias la='ls -la'alias ll='ls -l'alias ls='ls --color'alias ls-l='ls -l'alias md='mkdir -p'alias rd='rmdir'alias mv='mv -i'alias cp='cp -i'alias rm='rm -i'alias mydf='df -h && df -ih'alias o='less'alias p='ps ux'alias cl='clear'alias vi='vim'alias mks='make 2>&1 | grep -v "#warn" | grep '\''warning\|error\|undefined'\'''#命令拓展alias datee='date +'\''%Y-%m-%d %H:%M:%S , tp=%s'\'''alias ip='/sbin/ifconfig | grep -a '\''inet addr'\'' | sed -e '\''/127\.0\.0\.1/d;s/.*inet addr:\([0-9\.]\+\).*/\1/'\'''#用户设置alias cci='cd /data/home/xxx/; ./cci.sh'
1.12 命令useradd
新加一个用户:
useradd book -d /data/home/book -m其中-d表示指定主目录,-m表示如果主目录不存在则新建主目录。
passwd book
设置密码
1.13 命令id
显示用户的ID,以及所属群组的ID。
#id rootuid=0(root) gid=0(root) groups=0(root)
1.14 命令who:查看谁在线
请使用who这个命令来查看当前正在登录的用户
[root@localhost http]# whoroot tty1 Apr 9 13:17http pts/0 Apr 16 15:13 (192.168.8.235)http pts/1 Apr 16 15:13 (192.168.8.235)
1.16 命令screen:多窗口
功能说明:
使用telnet或SSH远程登录linux时,如果连接非正常中断(远程机器关闭),重新连接时,系统将开一个新的session,无法恢复原来的session.screen命令可以解决这个问题。Screen工具是一个终端多路转接器,在本质上,这意味着你能够使用一个单一的终端窗口运行多终端的应用。我的用法:
1,开启一个screen并进入:
screen -S test1 #这里用-S表示给screen起名字,以后切换的时候比较方便。这时就进去了screen test1了。里面可以跑一些程序。
2,退出该screen:
Ctrl-a d #这里的ctrl-a表示同时按ctrl键和a键,然后再单独按d键。这时退到跟终端。
3,在根下查看开启的所有screen:
screen -ls # 比如会有25764.test1 (Detached)等。
4,在根下进入某个screen:
screen -r test1 #这时又进入到指定的screen session中,或者screen -r 25764。
5,关闭该session:
exit #在该screen中退出,退到根下。
6,强制连接,踢掉原来的
screen -D -r 20791
screen -x -r 20791(共享原来的)
7,当前窗口假死,强制关闭当前窗口,跳到下一个
Ctrl-a K
8,上翻
Ctrl-a Ctrl-[
语 法:
screen [-AmRvx -ls -wipe][-d <作业名称>][-h <行数>][-r <作业名称>][-s ][-S <作业名称>]补充说明:
screen为多重视窗管理程序。此处所谓的视窗,是指一个全屏幕的文字模式画面。通常只有在使用telnet登入主机或是使用老式的终端机时,才有可能用到screen程序。参 数:
-A 将所有的视窗都调整为目前终端机的大小。-d <作业名称> 将指定的screen作业离线。
-h <行数> 指定视窗的缓冲区行数。
-m 即使目前已在作业中的screen作业,仍强制建立新的screen作业。
-r <作业名称> 恢复离线的screen作业。
-R 先试图恢复离线的作业。若找不到离线的作业,即建立新的screen作业。
-s 指定建立新视窗时,所要执行的shell。
-S <作业名称> 指定screen作业的名称。
-v 显示版本信息。
-x 恢复之前离线的screen作业。
-ls或--list 显示目前所有的screen作业。
-wipe 检查目前所有的screen作业,并删除已经无法使用的screen作业。
常用screen参数:
C-a c -> Create,开启新的 window
C-a n -> Next,切换到下个 window
C-a p -> Previous,前一个 window
C-a 0..9 -> 切换到第 0..9 个window
Ctrl+a [Space] -> 由視窗0循序換到視窗9
C-a C-a -> 在两个最近使用的 window 间切换
C-a x -> 锁住当前的 window,需用用户密码解锁
C-a d -> detach,暂时离开当前session,将目前的 screen session (可能含有多个 windows) 丢到后台执行,并会回到还没进 screen 时的状态,此时在 screen session 里 每个 window 内运行的 process (无论是前台/后台)都在继续执行,即使 logout 也不影响。
C-a z -> 把当前session放到后台执行,用 shell 的 fg 命令則可回去。
C-a w -> Windows,列出已开启的 windows 有那些
C-a t -> Time,显示当前时间,和系统的 load
C-a K -> kill window,强行关闭当前的 window
C-a [ -> 进入 copy mode,在 copy mode 下可以回滚、搜索、复制就像用使用 vi 一样
C-b Backward,PageUp
C-f Forward,PageDown
H(大写) High,将光标移至左上角
L Low,将光标移至左下角
0 移到行首
$ 行末
w forward one word,以字为单位往前移
b backward one word,以字为单位往后移
Space 第一次按为标记区起点,第二次按为终点
Esc 结束 copy mode
C-a ] -> Paste,把刚刚在 copy mode 选定的内容贴上
C-a : ->输入命令(quit/split等):
除了依次退出/杀死当前Screen会话中所有窗口这种方法之外,还可以使用快捷键C-a :,然后输入quit命令退出Screen会话。需要注意的是,这样退出会杀死所有窗口并退出其中运行的所有程序。其实C-a :这个快捷键允许用户直接输入的命令有很多,包括分屏可以输入split等,这也是实现Screen功能的一个途径,不过个人认为还是快捷键比较方便些。
--End--
~/.screenrc的配置
# ~/.screenrc## 用系统的一些设置shell -$SHELL# 避免类似进入vi退出后屏幕刷新不完altscreen on## 启动时不显示欢迎屏幕startup_message off## hangup时自动detachautodetach on## 一个screen die,不冻结整个screennonblock on## UTF-8 is necessary.defutf8 on## Change default scrollback value for new windows: scrollback 10000defscrollback 10000## start with visual bell as defaultvbell offvbell_msg "Bell on %t (%n)"## 在最下一行显示窗口列表和时钟hardstatus onhardstatus alwayslastlinehardstatus string "%{.bW}%-w%{.rY}%n %t%{-}%+w %=%{..G} %H(%l) %{..Y} %Y/%m/%d %c:%s "## default windowsscreen -t shell 0screen -t vim 1## 按 Ctrl-Z w 或 Ctrl-Z Ctrl-W 显示窗口列表bind w windowlist -bbind ^w windowlist -b## 定义screen的功能键为Ctrl-Z。向终端输入Ctrl-Z时应按 Ctrl-Z z。默认是Ctrl-a#escape ^Zz
【注】:
问题:
在使用screen的时候,相信不少同学碰到过这样的问题:使用screen启动一个新窗口之后,之前shell配置文件(比如:~/.bashrc)里定义的变量和alias全部失效。自己不得不使用“. ~/bashrc”又重新加载一遍配置,就这样,启动一个窗口,手动加载一次,非常繁琐麻烦。
解决方案:
在screen的配置文件.screenrc里增加配置项
shell -$SHELL
这句话的意思是:screen启动窗口后,自动加载当前shell的配置文件(比如:~/.bashrc),当然SHELL变量已经是定义好的
问题:
linux中显示中文OK:
echo $LANG
en_US.UTF-8
但是screen中不能正确显示中文,
解决方法:
设置~/.screenrc
defencoding GBK
encoding UTF-8 GBK
遇到一个问题,每次一关闭SecureCRT screen中的字体设置就有问题,需要重新关闭screen,再开启。【未解决】
5 系统服务
5.1 命令ps:进程管理
5.1.1 三种常用范式
#ps ux查阅所有运行进程命令:
#ps aux #ps -ef //多了一项ppid#ps -axj //包括 PPID PID PGID SID#ps -o pid,ppid,pgid,tpgid,sid,comm //指定选项
5.1.2 “ps aux” 说明
“ps -ef”比“ps aux”多一项PPID$ps aux |moreUSER PID %CPU %MEM VSZ RSS TTY STAT START TIME COMMANDroot 1 0.0 0.0 10348 624 ? Ss Apr29 0:22 init [3]root 2 0.0 0.0 0 0 ? S< Apr29 0:40 [migration/0]root 3 0.0 0.0 0 0 ? SN Apr29 0:25 [ksoftirqd/0]root 4 0.0 0.0 0 0 ? S< Apr29 0:00 [watchdog/0]root 5 0.0 0.0 0 0 ? S< Apr29 0:12 [migration/1]root 6 0.0 0.0 0 0 ? SN Apr29 0:18 [ksoftirqd/1]root 7 0.0 0.0 0 0 ? S< Apr29 0:00 [watchdog/1]root 8 0.0 0.0 0 0 ? S< Apr29 0:10 [migration/2]root 9 0.0 0.0 0 0 ? SN Apr29 0:16 [ksoftirqd/2]root 10 0.0 0.0 0 0 ? S< Apr29 0:00 [watchdog/2]上述解释如下:
USER 用户名PID 进程ID(Process ID)PPID 父进程的进程ID(Parent Process id)%CPU 进程的cpu占用率%MEM 进程的内存占用率VSZ 进程所使用的虚存的大小(Virtual Size)RSS 进程使用的驻留集大小或者是实际内存的大小,Kbytes字节TTY 与进程关联的终端(tty),若与终端无关,则显示(?),否则显示类似(pts/0)等STAT 进程的状态:进程状态使用字符表示的(STAT的状态码)START 进程启动时间和日期TIME 进程使用的总cpu时间COMMAND 正在执行的命令行命令STAT狀態位常見的狀態字符
D (Uninterruptible sleep)无法中断的休眠状态(通常 IO 的进程)【比如写core的时候】;R (Runnable)正在运行或在运行队列中等待S (Sleeping)休眠中, 受阻, 在等待某个条件的形成或接受到信号T (Terminate)停止或被追踪;W 进入内存交换 (从内核2.6开始无效);X 死掉的进程 (基本很少見);Z (Zombie)僵尸进程;< 优先级高的进程N 优先级较低的进程L 有些页被锁进内存;s 进程的领导者(在它之下有子进程);l 多进程的(使用 CLONE_THREAD, 类似 NPTL pthreads);+ 位于后台的进程组;
5.1.3 未知执行命令时:pgrep
$ pgrep chrome3257532580...
或使用pstree查看
$ pstree -p | grep chrome |-chrome-sandbox(32582)---chrome(32583)-+-chrome(32622)-+-{chrome}(32625) | | |-{chrome}(32627)...
5.1.4 已知执行命令时:ps
2.1 直接查找命令:
【已知:跑了以python2.7开头的很多命令】
ps -ef | grep python2.7
$ps -ef | grep python2.7admin 18535 18484 0 14:22 pts/9 00:00:00 python2.7 tester.py sql_case/ plan runadmin 18536 18484 0 14:22 pts/9 00:00:00 python2.7 tester.py sql_case/ plan runadmin 18537 18484 0 14:22 pts/9 00:00:00 python2.7 tester.py sql_case/ plan runadmin 18538 18484 0 14:22 pts/9 00:00:00 python2.7 tester.py sql_case/ plan runadmin 18539 18484 0 14:22 pts/9 00:00:00 python2.7 tester.py sql_case/ plan runadmin 19218 8361 0 14:24 pts/0 00:00:00 grep python2.72.2 过滤命令:
ps -ef | grep python2.7 | grep -v grep | grep tester.py
$ps -ef | grep python2.7|grep tester.pyadmin 18535 18484 0 14:22 pts/9 00:00:00 python2.7 tester.py sql_case/ plan runadmin 18536 18484 0 14:22 pts/9 00:00:00 python2.7 tester.py sql_case/ plan runadmin 18537 18484 0 14:22 pts/9 00:00:00 python2.7 tester.py sql_case/ plan runadmin 18538 18484 0 14:22 pts/9 00:00:00 python2.7 tester.py sql_case/ plan runadmin 18539 18484 0 14:22 pts/9 00:00:00 python2.7 tester.py sql_case/ plan run
2.3 打印进程号:
ps -ef | grep python2.7| grep -v grep | grep tester.py | awk'{print $2}'
$ps -ef | grep python2.7|grep tester.py | awk '{print $2}'1853518536185371853818539ps -ef | grep python2.7| grep -v grep | grep tester.py | awk'{print $2}' | wc -l
$ps -ef | grep python2.7|grep tester.py | awk '{print $2}'| wc -l5
2.4 杀死进程
ps -ef | grep python2.7| grep -v grep | grep tester.py | awk'{print $2}' | xargs kill -9
$ps -ef | grep python2.7|grep tester.py | awk '{print $2}'| xargs kill -9
【另,如果确认之生成了进程python2.7 balabala】
亦可以killall python2.7
5.1.5 杀死进程:kill_killall
强制杀掉父进程
$ kill -9 32582
$ kill -HUP 32582$ kill -1 32582
$ killall chrome
5.2 命令crontab:定时作业
1,命令at:脱机+仅执行一次的job调度
例1:5分钟后,将 /root/.bashrc 寄给 root 自己[root@www ~]# at now + 5 minutes at> /bin/mail root -s "testing at job" < /root/.bashrcat> <EOT> <==这里输入 [ctrl] + d 就会出现 <EOF> ,代表结束!job 4 at 2009-03-14 15:38# 说明第 4 个 at 工作将在 2009/03/14 的 15:38 进行!例2:设置 2009/03/17 23:00 关机?[root@www ~]# at 23:00 2009-03-17at> /bin/syncat> /bin/syncat> /sbin/shutdown -h nowat> <EOT>job 5 at 2009-03-17 23:00
2,命令crontab:循环执行例行性job
crontab [-u username] [-l|-e|-r] -u :root帮其他使用者建立/移除 crontab 工作排程; -e :编辑 crontab的内容 -l :查阅 crontab 的内容 -r :移除所有的 crontab 的内容。(若仅要移除一项,请用 -e 去编辑)
针对用户的例行性job:
#crontab -e* * * * * /usr/local/src/analog-5.32-lh/analog分 时 日 月 周 |<=============指令串=============>|第1列表示分钟1~59 每分钟用*或者 */1表示第2列表示小时1~23(0表示0点)第3列表示日期1~31第4列表示月份1~12第5列标识号星期0~6(0表示星期天)第6列要运行的命令或脚本文件
一些例子:
30 21 * * * /usr/local/etc/rc.d/lighttpd restart上面的例子表示每晚的21:30重启apache。45 4 1,10,22 * * /usr/local/etc/rc.d/lighttpd restart上面的例子表示每月1、10、22日的4 : 45重启apache。10 1 * * 6,0 /usr/local/etc/rc.d/lighttpd restart上面的例子表示每周六、周日的1 : 10重启apache。0,30 18-23 * * * /usr/local/etc/rc.d/lighttpd restart上面的例子表示在每天18 : 00至23 : 00之间每隔30分钟重启apache。0 23 * * 6 /usr/local/etc/rc.d/lighttpd restart上面的例子表示每星期六的11 : 00 pm重启apache。* */1 * * * /usr/local/etc/rc.d/lighttpd restart每一小时重启apache* 23-7/1 * * * /usr/local/etc/rc.d/lighttpd restart晚上11点到早上7点之间,每隔一小时重启apache0 11 4 * mon-wed /usr/local/etc/rc.d/lighttpd restart每月的4号与每周一到周三的11点重启apache0 4 1 jan * /usr/local/etc/rc.d/lighttpd restart一月一号的4点重启apache
针对系统的例行性job:
#cat /etc/crontabSHELL=/bin/bashPATH=/sbin:/bin:/usr/sbin:/usr/binMAILTO=root #如果出现错误,或者有数据输出,数据作为邮件发给这个帐号HOME=/ #使用者运行的路径,这里是根目录# run-parts01 * * * * root run-parts /etc/cron.hourly02 4 * * * root run-parts /etc/cron.daily22 4 * * 0 root run-parts /etc/cron.weekly42 4 1 * * root run-parts /etc/cron.monthly/etc/crontab 文件使用 run-parts 脚本来执行 /etc/cron.hourly、/etc/cron.daily、/etc/cron.weekly 和 /etc/cron.monthly 目录中的脚本,这些脚本被相应地每小时、每日、每周、或每月执行。这些目录中的文件应该是 shell 脚本。如果你想要增加一个任务到cron里,把运行任务的脚本(或者脚本的连接)放在对应的目录里;如果去掉run-parts这个参数的话,后面就可以写要运行的某个脚本的完整路径名,而不是文件夹名了。
3,命令\&:后台提交作业
command &
4,命令nohup:脱机+后台提交作业
nohup command &
5.3 命令jobs:作业管理
1,作业放在后台运行:&
#command &[1] 234 # [job number] PID
2,作业放到后台并暂停:Ctrl+z
#command[Ctrl+z][1]+ Stopped ...
3,观察当前后台作业状况:jobs
#jobs -l[1]+ Stopped /usr/bin/vim /etc/profile[2]- Stopped /usr/bin/vim /etc/profile.conf说明:上面的 -l 表示让列表现示作业号的PID,另外(+-)号,(+)号表示默认的作业,如我在bash中输入fg,则[1] 会被自动执行。
4,后台作业拿到前台处理:fg
#fg %jobnumber
5,让作业在后台运行:bg
#bg %jobnumber
6,杀死后台作业:kill
#kill -9 %jobnumber #-9:立刻强制删除一个作业#kill -15 %jobnumber #-15:以正常的程序方式终止一项作业.
5.4 命令chkconfig:将服务加入开机自启动
用法:
# chkconfig --list #查看系统中所有的服务在各个运行等级的情况。NetworkManager 0:off 1:off 2:on 3:on 4:on 5:on 6:offabrtd 0:off 1:off 2:off 3:on 4:off 5:on 6:offacpid 0:off 1:off 2:on 3:on 4:on 5:on 6:offatd 0:off 1:off 2:off 3:on 4:on 5:on 6:offauditd 0:off 1:off 2:on 3:on 4:on 5:on 6:off
#chkconfig --list mysqld #查看系统中特定的服务在各个运行等级的情况。mysqld 0:off 1:off 2:off 3:off 4:off 5:off 6:off
一般情况下在linux 系统中有7 个run levels。run level 的意思就是定义什么服务或者进程运行在系统中。每个运行等级在系统启动的时候启动的进程数量或者服务是不同的,所以这个运行等级是和服务进程密切相关的。init 进程一次只能运行在一个run level。
--level<等级代号> 指定读系统服务要在哪一个执行等级中开启或关毕。 等级0表示:表示关机 等级1表示:单用户模式 等级2表示:无网络连接的多用户命令行模式 等级3表示:有网络连接的多用户命令行模式(文本模式) 等级4表示:不可用 等级5表示:带图形界面的多用户模式(图形模式) 等级6表示:重新启动
大部分的桌面系统都启动到运行等级5。大部分的服务器系统都启动到运行等级3。/etc/inittab 配置文件用户设置系统默认启动到的运行等级。
#chkconfig mysqld on #启动mysqld服务。也可以后加--level 3
5.5 命令service:管理linux服务(其实是去/etc/init.d下读脚本)
service 使用这个命令来启动关闭服务只在本次系统运行期间有效,系统关闭重启以后上次所做的设置就无效了。
用file命令查看此命令会发现它是一个脚本命令(命令位于/sbin/service)。分析脚本可知此命令的作用是去/etc/init.d目录下寻找相应的服务,然后调用该服务脚本来进行开启和关闭等操作。强烈建议大家将service命令替换为/etc/init.d/mysqld stop (因为有一些linux的版本不支持service),即:service mysqld start == /etc/init.d/mysqld start。
/etc/init.d目录在Linux系统中可是大名鼎鼎。它只负责一件事情,但却涉及到全系统。它包含系统中各种服务的start/stop脚本。init.d初始化脚本称之为System V风格初始化,是System V系统传统之一,后来成为一些Unix系统的共同特性的源头。
/etc/init.d这个目录下的脚本就类似于windows中的注册表,在系统启动的时候执行。程序运行到这里(init进程读取了运行级别),有选择的(根据运行级别)执行其中的服务脚本,因为系统并不需要启动所有的服务。
例如:开启httpd服务器
#service httpd {start|stop|status|restart|reload|force-reload}
主要选项包括:start表示启动,restart表示重新启动,stop表示关闭,reload表示重新载入配置,status表示给出状态。
如何知道现在系统中在跑的服务有那些?
#service --status-all| grep running
如何知道服务的名字?
你当然可以ll /etc/init.d
如果没有在/etc/init.d下找到服务脚本?
cp /usr/local/mysql/share/mysql/mysql.server /etc/init.d/mysql #把msql的脚本文件拷到系统的启动目录下chkconfig --add mysql #将mysql加到启动服务列表里chkconfig mysql on #让系统启动时自动打开mysql服务概括为一般的步骤就是:写或找到该服务的启动脚本(不是简单的启动命令,而是有特定格式的),然后拷贝该文件到/etc/init.d/目录下,这个时候就可以用service name start来启动它了,因为service命令就是去查找该目录下的文件的。
service命令和chkconfig命令重启的区别?
service xxx start/stop 即刻生效,重启后失效
chkconfig xxx on/off 重启后永久生效
完整的服务测试流程
例1:【stand alone 的启动方式】观察 httpd ,再观察默认有无启动,之后以 chkconfig 配置为默认启动,并立即启动
#/etc/init.d/httpd status #查看发现该服务已停止httpd 已停止 #chkconfig --list httpd #查看发现不是默认开机自启动的httpd 0:off 1:off 2:off 3:off 4:off 5:off 6:off#chkconfig httpd on; chkconfig --list httpd #配置为默认开机自启httpd 0:off 1:off 2:on 3:on 4:on 5:on 6:off#/etc/init.d/httpd start #配置为立刻启动# /etc/init.d/httpd status #查看状态发现的确开启了httpd 已启动例2:【super deamon启动方式】查看 rsync 是否启动(rsync 是 super daemon 管理的),并将其设置为默认不启动,并关闭
#netstat -tlup | grep rsync #查看发现的确是由xinetd管理的,并且开启着tcp 0 0 192.168.201.110:rsync *:* LISTEN 4618/xinetdtcp 0 0 www.vbird.tsai:rsync *:* LISTEN 4618/xinetd#chkconfig --list rsync #查看发现时默认自启动的rsync on #chkconfig rsync off; chkconfig --list rsync #配置为默认开机不启动rsync off #/etc/init.d/xinetd restart #配置立刻重启(注意是xinetd)#netstat -tlup | grep rsync #查看发现的确关闭了注:在linux 中/etc/services 配置文件中记录了各个服务的端口号
1,stand alone (服务可单独启动)
各服务脚本位置:/etc/init.d/*
各服务初始化配置文件:/etc/sysconfig/*
各服务各自的配置文件:/etc/*.conf
各服务启动方式:/etc/init.d/mysqld start 或用 service mysqld start
xinet(超级守护进程)本身是一个stand alone的服务:
xinetd脚本位置:/etc/init.d/xinet
xinetd配置文件:/etc/xinet.conf
xinetd启动方式:/etc/init.d/xinet start 或用 service xinetd restart
2,super daemon (透过 xinetd 统一管理的服务) ,它是经过一个统一的 xinetd 来管理,因此可以具有类似防火墙管理功能。此外,管理的联机机制又可以分为 multi-threaded 及 single-threaded。
各服务初始化配置文件:xinetd管理的其他子服务的配置文件/etc/xinetd.d/*
启动方式:/etc/init.d/xinetd restart
5.6 命令strace:查看系统调用
strace常用来跟踪进程执行时的系统调用和所接收的信号。 在Linux世界,进程不能直接访问硬件设备,当进程需要访问硬件设备(比如读取磁盘文件,接收网络数据等等)时,必须由用户态模式切换至内核态模式,通 过系统调用访问硬件设备。strace可以跟踪到一个进程产生的系统调用,包括参数,返回值,执行消耗的时间。
>>strace touch 3.txtexecve("/usr/bin/touch", ["touch", "3.txt"], [/* 63 vars */]) = 0brk(0) = 0x50a000mmap(NULL, 4096, PROT_READ|PROT_WRITE, MAP_PRIVATE|MAP_ANONYMOUS, -1, 0) = 0x2b9f5745a000uname({sys="Linux", node="Tencent64", ...}) = 0access("/etc/ld.so.preload", R_OK) = -1 ENOENT (No such file or directory)open("tls/x86_64/librt.so.1", O_RDONLY) = -1 ENOENT (No such file or directory)open("tls/librt.so.1", O_RDONLY) = -1 ENOENT (No such file or directory)每一行都是一条系统调用,等号左边是系统调用的函数名及其参数,右边是该调用的返回值。
常用参数:
-c 统计每一系统调用的所执行的时间,次数和出错的次数等. -t 在输出中的每一行前加上时间信息. -tt 在输出中的每一行前加上时间信息,微秒级. -ttt 微秒级输出,以秒了表示时间. -T 显示每一调用所耗的时间. -e trace=set 只跟踪指定的系统 调用.例如:-e trace=open,close,rean,write表示只跟踪这四个系统调用.默认的为set=all. -e trace=file 只跟踪有关文件操作的系统调用. -e trace=process 只跟踪有关进程控制的系统调用. -e trace=network 跟踪与网络有关的所有系统调用. -e strace=signal 跟踪所有与系统信号有关的 系统调用 -e trace=ipc 跟踪所有与进程通讯有关的系统调用 -e abbrev=set 设定 strace输出的系统调用的结果集.-v 等与 abbrev=none.默认为abbrev=all. -e raw=set 将指 定的系统调用的参数以十六进制显示. -e signal=set 指定跟踪的系统信号.默认为all.如 signal=!SIGIO(或者signal=!io),表示不跟踪SIGIO信号. -e read=set 输出从指定文件中读出 的数据.例如: -e read=3,5 -e write=set 输出写入到指定文件中的数据. -o filename 将strace的输出写入文件filename -p pid 跟踪指定的进程pid.典型用法:
#strace -o output.txt -T -tt -e trace=all -p 28979跟踪28979进程的所有系统调用(-e trace=all),并统计系统调用的花费时间,以及开始时间(并以可视化的时分秒格式显示),最后将记录结果存在output.txt文件里面。
- linux 基本命令1
- linux-基本命令1
- linux基本命令<1>
- Linux基本命令1
- 1、Linux基本命令
- 1、Linux基本命令
- Linux基本命令---1
- Linux基本命令1
- linux基本命令(1)
- linux基本操作命令 1
- linux 基本操作命令1
- Linux基本命令(1)
- (1)linux基本命令
- Linux常用基本命令(1)
- linux基本命令1---ls
- Linux-1最基本命令
- Linux学习 [1] linux基本命令
- 【Linux】Linux基本命令
- Win2003分区魔术师:Diskpart
- android中的指针简述
- 对策字符串的最大长度
- cocos2d学习记录(一)-初步理解
- Tarjan应用:求割点/桥/缩点/强连通分量/双连通分量/LCA(最近公共祖先)
- linux-基本命令1
- 并查集专题学习
- 菜鸟学 oracle中的触发器
- VC6.0 将鼠标限定在客户区域内
- 应当怎样合理选择CRM软件
- 大数乘法(加法)运算
- 组合模式使用因素
- How to use C++
- ASP.NET DATAGRIDVIWE控件导出Execle