linux笔记4(压缩、bash、系统监视、进程、用户管理)

压缩

gzip

[root@redhat root]# gzip test1.txt    //压缩

 

gunzip

[root@redhat root]# gunzip test1.txt.gz    //解压

[root@redhat root]# gzip -d test1.txt.gz    //解压

 

[root@redhat root]# zcat test1.txt.gz        //直接查看gz文件

十月 2011

1

1

02 3 4 5 6 7 8

09 10 11 12 13 14 15

09 10 11 12 13 14 15

16 17 18 19 20 21 22

compress, uncompress

unix上一种较老的压缩工具。

 

bzip2

[root@redhat root]# bzip2 test1.txt    //压缩

 

bunzip2

[root@redhat root]# bunzip2 test1.txt.bz2        //解压

[root@redhat root]# bzip2 -d test1.txt.bz2    //解压

 

tar

[luowei@redhat luowei]$ tar -cvf test.tar test    //test目录打包成test.tar

[luowei@redhat luowei]$ tar cvf aaa.tar allout test.tar        //allouttest.tar文件打包到aaa.tar文件中

[luowei@redhat luowei]$ tar xvf test.tar        //解包

[luowei@redhat luowei]$ tar tf test.tar        //查看test.tar包文件中的内容

[luowei@redhat luowei]$ tar cvf bbb.tar stdout -C /home/luowei/test    stdout打包成bbb.tar并存放到 /home/luowei/test目录下

 

[root@redhat root]# tar zcvf test.tar.gz test    //test目录打包,并添加到压缩文件

[root@redhat root]# tar zxvf test.tar.gz        //对压缩文件解压并解包

 

[root@redhat root]# tar jcvf test.tar.bz2 test    //test目录打包并压缩成bz2文件

[root@redhat root]# tar jxvf test.tar.bz2        //对打包压缩后的bz2解压并解包

 

dump

[root@redhat root]# dump -0 -f /tmp/dump1 /root/test    //test目录备份到dump1文件

[root@redhat /]# dump -0u -f /tmp/bootdump /boot        //将顶层分区boot备份到bootdump文件

 

[root@redhat /]# cat /etc/dumpdates        //查看到分区的备份记录

[root@redhat root]# dump -0 -f /tmp/test2dump test2.txt        //备份文件test2.txt

 

[root@redhat root]# restore -tf /tmp/test2dump    //查看备份文件的内容

[root@redhat root]# restore -rf /tmp/dump1    //dump1还原到当前文件夹下

 

bash

shell

shell:命令行解释器,是用户与系统沟通时的媒介。在unix系统中有各种shell,linuxbash为默认shell。系统可以使用的shell记录在 /etc/shells中。

如:

[root@redhat root]# cat /etc/shells

/bin/sh

/bin/bash

/sbin/nologin

/bin/bash2

/bin/ash

/bin/bsh

/bin/tcsh

/bin/csh

[root@redhat root]# a=luowei    //设置变量a的值为luowei

[root@redhat root]# echo $a    //显示a变量的值

luowei

[root@redhat root]# echo ${a}    //显示a变量的值

luowei

[root@redhat root]# a=$a123    //这样不能把a赋成luowei123

[root@redhat root]# echo $a

 

[root@redhat root]# a=luowei

[root@redhat root]# a=${a}123    //这样可以把a赋成luowei123

[root@redhat root]# echo $a

luowei123

[root@redhat root]# unset a    //删除a变量

 

环境变量

使用set可以查看本地变量和环境变量,如:

[root@redhat root]# set    //查看本地变量与环境变量

[root@redhat root]# env    //查看环境变量

预定义环境变量

系统通过预定义的环境变量来定义shell环境,用户可以用setenv查询当前的环境变量。

常用的预定义环境变量:

HOME:当前用户的主目录

PATH:当前用户的可执行文件搜索路径

LANG:程序应该使用的默认语言

PS1:行提示符

如:

[root@redhat /]# cd $home        //进入到家目录

[root@redhat root]# LANG=en    //更改在英文语系

[root@redhat root]# echo $PS1    //显示PS1中的值

[\u@\h \W]\$

\u:显示当前用户的名称

\h:仅列出主机名的第一个名字

\W:显示当前工作目录的最后个目录名称

[root@redhat root]# basename /etc/X11        //截取目录的最后一个目录名

[root@redhat root]# PS1='[\u@\H \w \A \#]\$'        //设置PS1

[root@redhat ~ 16:44 32]#

\H:显示完整的主机名

\w:显示当前完整工作路径,家目录用~表示

\A:显示当前时间

\#:显示当前是第几条命令

\$:显示提示符

[root@redhat root]# export a        //a变量转换成环境变量

 

History

History:可以查询用户以前的过往操作

如:

[root@redhat root]# history    //列出用过的命令

[root@redhat root]# history 10        //列出最后使用过的10条指令

内存中记录的过往指令数由环境变量HISTSIZE而定。History表存储在内存中,在用户logout时会记录用户主目录下的.bash_history文件中。在下次login时载入。 .bash_history中的指令由环境变量中的HISTFILESIZE而定。

如:

[root@redhat root]# echo $HISTSIZE

1000

[root@redhat root]# echo $HISTFILESIZE

1000

[root@redhat root]# history –w        //将历史指令强制写入.bash_history文件中

 

调用过往指令

使用 来调用过往指令:如

!!:重复执行上一条指令

!a:重复执行上一条以a为首的的指令

!number:重复执行上一条在history表中记录号码为number的指令

!-number:重复执行前第number条指令

可以用<ctrl+r>来在history表中查询过往指令

例:

[root@redhat root]# !e        //执行最近的以 e 开头的指令

[root@redhat root]# !$        //截取上一条指令的最后一个参数

127.0.0.1

-bash: 127.0.0.1: command not found

[root@redhat root]# ping !$    //直接ping 127.0.0.1,因为 !$ 截取到的是127.0.0.1

ping 127.0.0.1

PING 127.0.0.1 (127.0.0.1) 56(84) bytes of data.

 

Alias(别名)

例:

[root@redhat root]# alias        //列出系统中目前存在的别名

alias cp='cp -i'

alias l.='ls -d .* --color=tty'

alias ll='ls -l --color=tty'

alias ls='ls --color=tty'

alias mc='. /usr/share/mc/bin/mc-wrapper.sh'

alias mv='mv -i'

alias rm='rm -i'

alias vi='vim'

alias which='alias | /usr/bin/which --tty-only --read-alias --show-dot --show-tilde'

[root@redhat root]# alias a='ls -al'        //设置 a ls –al 的别名

[root@redhat root]# unalias a        //删除a 这条别名

 

命令行表达式

命令行输出——" "

将一串字符当成一个字符串对待,如果字符串中包含特殊含义的字符(/,`,$,!),则转义。

命令行输出——' '

将一串字符当成一个字符串来对待,如果字符串中包含特殊含义的字符,不转义。

执行引用符——` `

引用命令的执行结果

例:

[root@redhat root]# echo "$PWD"

/root

[root@redhat root]# echo '$PWD'

$PWD

[root@redhat root]# ls -l `PWD`    //列出当前目录下的详细信息

数学运算——$[]

在中括号内的表达式会被数学计算

逸脱符——\

用于取消命令行中字符的特殊含义

用于表示一行未结束

例:

[root@redhat root]# echo $[1+4]

5

[root@redhat root]# echo \$[1+4]

$[1+4]

[root@redhat root]# mkdir a\ b        //建立一个名为"a b"的目录,\取消了空格的间隔作用

[root@redhat root]# ls \        // \表示一行未结束

> /home

luowei test1

[root@redhat root]#

 

命令行结束符——;

用于在一行内分隔几个独立命令,表示一行已结束,作用相当于回车键。

shell激活——()

在小括号内的命令行表示激活一个子shell后在子shell中运行。

[root@redhat root]# ls;pwd;ls –a        //依次分别执行这三条指令

[root@redhat root]# echo $HOME

/root

[root@redhat root]# HOME=/usr

[root@redhat root]# echo $HOME

/usr

[root@redhat root]# HOME=/root

[root@redhat root]# (HOME=/usr)        //表示这个HOME=/usr 在子shell中运行

[root@redhat root]# echo $HOME

/root

[root@redhat root]#

 

逻辑运算符

&&:当前一条指令执行成功时再执行后一条指令

||:当前一条指令执行失败时再执行后一条指令

例:

[root@redhat root]# ls /home && touch /home/test1    //如果存在/home则建立/home/test1

[root@redhat root]# ls /root/test1 || mkdir /root/test1        //如果不存在/root/test1,则建立 /root/test1目录

[root@redhat root]# ls /root/test && echo "exist" || echo "no exist"

ls: /root/test: 没有那个文件或目录

no exist

[root@redhat root]#

 

定制登录shell

Bash在用户登录时从四个文件中读取环境,设定:

全局设置文件:/etc/profile ,    /etc/bashrc

用户设置文件:~/.bashrc    ,    ~/.bash_profile

其他shell设定文件

~/.bash_logout:在用户logout的时候自动执行。

~/.bash_history:用户login时自动读取其内容并加载到内存history记录中,logout时将内存history记录写入。

/etc/profile.d/*.sh:/etc/profile中被执行,其中的环境设定,也会被全局引用。

 

常用快捷键

Ctrl+d:输入已结束。在shell下相当于一个exit

Ctrl+c:键盘中断请求。

Ctrl+s & ctrl+q:暂停/恢复屏幕输出。

Ctrl+l:清屏,相当于clear

Tab:自动补完命令行与文件名。

Tab键双击可以列出所有可能匹配的选择。

例:

[root@redhat ~ 20:22 35]#cat > test2.txt

cat > test2.txt

hello ,i'm luowei.

welcome to linux's world!        //ctrl+d结束输入

[root@redhat ~ 20:23 36]#cat test2.txt

cat > test2.txt

hello ,i'm luowei.

welcome to linux's world!

[root@redhat ~ 20:24 37]#

 

系统监视

了解系统状况

uname:显示系统信息

hostname:显示主机名

last:列出最近的用户登录

lastlog:列出每一个用户的最近登录情况

free:显示内存使用状况

vmstat:详细列出内存使用状况

top:系统监视器

例:

[root@redhat root]# top -d 3    //top默认是5秒刷新一次,这设置成3秒刷新一次

[root@redhat root]# top -b -n 2 > top.txt        //top刷新两次的结果存到top.txt

[root@redhat root]# cat top.txt

 

进程

系统通过进程来完成工作,每个进程都有一个独立的进程号,系统通过调用进程号来调度操控进程。系统的原始的原始进程是initinitPID总是1。一个进程可以产生另一个进程,除了init以外,所有的进程都有父进程。

例:

[root@redhat root]# ps –l        //列出与ps进程相关相关的进程

F S UID PID PPID C PRI NI ADDR SZ WCHAN TTY TIME CMD

4 S 0 2311 2309 0 75 0 - 1384 wait4 pts/0 00:00:00 bash

0 R 0 2408 2311 0 80 0 - 781 - pts/0 00:00:00 ps

[root@redhat root]# ps aux        //查看所有有效进程

[root@redhat root]# pstree –a        //以树状结构显示所有进程

[root@redhat root]# pstree –aup    //以树状结构显示所有进程,并显示所属用户和PID

控制进程

Kill,语法:kill [-signal] PID ,向进程传送一个特定的讯号,默认为15,列出所有可以由kill传递的讯号。

[root@redhat root]# kill –l        //列出所有可以由kill –l 传递的讯号

[root@redhat root]# ps -ef|grep "top"        //筛选出所有含有top的指令

[root@redhat root]# kill -9 4634        //删除一个进程号为4634的进程

使用nicerenice改变进程的优先级。

[root@redhat root]# renice 10 4709        //4709号进程的优先级改为4709

[root@redhat root]# ps -l | grep top        //显示top进程的详细信息

第二种修改进程优先级的方法,直接打开top命令,在top界面内直接敲入 R ,然后直接输入进程号,再输入优先级的值。

将进程丢入后台运行

Command & :将一个进程直接丢入后台运行。

nohup command &:将一个进程直接丢入后台运行,而且在该控制台退出后,进程仍不挂断。

Ctrl + z :将一个正在运行的前台进程暂停,并丢入后台。

例:

[root@redhat root]# top &        //top进程放到后台执行

[1] 2405

[root@redhat root]# vi top.txt

CPU0 states: 0.0% user 0.1% system 0.0% nice 0.0% iowait 99.0% idle

CPU1 states: 0.0% user 0.0% system 0.0% nice 0.0% iowait 100.0% idle

Mem: 254664k av, 59076k used, 195588k free, 0k shrd, 22052k buff

48112k actv, 172k in_d, 224k in_c

Swap: 522104k av, 0k used, 522104k free 20612k cached

 

PID USER PRI NI SIZE RSS SHARE STAT %CPU %MEM TIME CPU COMMAND

1 root 15 0 472 472 420 S 0.0 0.1 0:04 0 init

2 root RT 0 0 0 0 SW 0.0 0.0 0:00 0 migration/0

………………                    //按下ctrl+z

[2]+ Stopped vim top.txt

[root@redhat root]#

 

工作

jobs:列出系统当前的后台进程

fg:将后台进程拉回前台

bg:激活后台暂停的进程

例:

[root@redhat root]# jobs –l    //查看后台作业

[1]- 2405 Stopped (tty output) top        //作业的状态为Stopped

[2]+ 2411 Stopped vim top.txt

[root@redhat root]# fg %1        //将后台的1号作业,放到前台来执行

[root@redhat root]# bg %1        //1号作业,放到后台执行

[1]+ top &

[root@redhat root]# bg %1 ;jobs

[1]+ top &

[2]+ Stopped vim top.txt

[1]- Running top &

/proc目录

/proc目录是一个虚拟的文件系统,包含了来自正在运行着的核心的信息。

用户可以通过cat /proc/下的文件来获得系统的信息。

这些信息包括系统硬件、网络设置、内存使用,及其他一引些东西。

/proc/sys目录下的文件,允许系统管理员更动,这些变动会直接影响当前核心。

例:

[root@redhat root]# ls -l /proc/        //查看/proc/目录下的文件

[root@redhat root]# cat /proc/cpuinfo        //查看cpu的信息

[root@redhat root]# echo "" > /proc/sys/net/ipv4/icmp_echo_ignore_all        //忽略所有ping消息

系统日志存放在 /var/log 目录下

常用的系统日志:

/var/log/dmesg 核心启动日志

/var/log/messages 系统报错日志

/var/log/maillog 邮件系统日志

例:

[root@redhat root]# tail -f /var/log/messages    //查看最近的系统日志

[root@redhat root]# cat /var/log/maillog        //查看邮件服务信息

/var/log/xferlog    //FTP服务用日志

/var/log/secure        //安全信息,系统登录与网络连接的信息

/var/log/wtmp        //登录记录

例:

[root@redhat root]# last        //显示最近登录的用户

 

检查用户身份

who:查询当前登录的用户

groups:查询用户所属的组

id:显示当前用户信息

finger:查询用户信息

例:

[root@redhat root]# groups        //显示当前系统存在的用户组

[root@redhat root]# id root    //显示root用户的详细信息

[root@redhat root]# finger luowei        //显示luowei这个用户的详细信息

[root@redhat root]# whoami        //显示当前的用户

[root@redhat root]# w            //显示当前用户的详细信息

 

添加用户

用指令添加命令:

useradd <username>

passwd <password>

系统添加用户的标准步骤:

  1. 编辑 /etc/password /etc/group
  2. 创建用户主目录
  3. /etc/skel拷贝文件与目录
  4. 让新用户获得其主目录与文件的拥有权限
  5. 给新用户一个密码

 

更改/删除用户

1.更改用户的资料可以通过:

redhat-config-userskusers之类的图形界面工具来完成,在字符界面下可以使用usermod指令来更改。

2.系统管理者可以用userdel指令来删除已存在的用户

参数-r可以帮助系统将一个用户的目录等一并删除。

例:

[root@redhat root]# usermod -c "this is luowei's username" luowei    //修改luowei的全名

[root@redhat root]# finger luowei

Login: luowei Name: this is luowei's username

Directory: /home/luowei Shell: /bin/bash

Last login Mon Oct 24 17:32 (CST) on :0

No mail.

No Plan.

[root@redhat home]# mkdir tst1

[root@redhat home]# usermod -d /home/tst1 test1        //test1的家目录改到tst1

[root@redhat home]# cd ~test1        //切换到test1的家目录

[root@redhat tst1]# cd ..        //切换上层目录

[root@redhat home]# chown test1.test tst1        //修改tst1目录的属主

[root@redhat home]# chmod 700 tst1        //修改tst1的权限

[root@redhat tst1]# usermod -e "2012-01-01" test1    //设置test1用户的过期时间为2012-01-01

[root@redhat tst1]# id test1

uid=501(test1) gid=501(test) groups=501(test)

[root@redhat tst1]# usermod -G root test1        //test1加入到root用户组

[root@redhat tst1]# id test1

uid=501(test1) gid=501(test) groups=501(test),0(root)

[root@redhat tst1]# usermod -g root test1        //修改test1gid改成root组的

[root@redhat tst1]# id test1

uid=501(test1) gid=0(root) groups=0(root)

[root@redhat tst1]# usermod -g 501 test1        //test1gid改成501

[root@redhat tst1]# id test1

uid=501(test1) gid=501(test) groups=501(test),0(root)

[root@redhat tst1]# usermod -s /bin/csh test1    //test1的默认shell改为csh

[root@redhat tst1]# usermod -u 504 test1        //修改test1uid

[root@redhat tst1]# usermod -p 1234 test1        //test1的密码设置为1234

[root@redhat tst1]# usermod -L test1        //锁定test1用户

[root@redhat tst1]# passwd -S test1        //查看test1用户的状态

Password locked.

[root@redhat tst1]# useradd jack            //添加jack用户

[root@redhat tst1]# ls /home

jack luowei test1 tst1

[root@redhat tst1]# userdel jack            //删除jack用户

[root@redhat tst1]# id jack

id: jack: No such user

[root@redhat tst1]# ls /home

jack luowei test1 tst1

[root@redhat tst1]# useradd tom

[root@redhat tst1]# ls /home

jack luowei test1 tom tst1

[root@redhat tst1]# userdel -r tom        //删除tom用户及以tom相关的其它信息

[root@redhat tst1]# ls /home

jack luowei test1 tst1

[root@redhat tst1]#

/etc/password文件

password文件中记录的是用户的登录信息,每一行代表一个用户。

例:

[root@redhat root]# vi /etc/passwd

root:x:0:0:root:/root:/bin/bash

bin:x:1:1:bin:/bin:/sbin/nologin

…………

luowei:x:500:500:this is luowei's username:/home/luowei:/bin/bash

test1:x:504:501::/home/tst1:/bin/csh

tom:x:505:505::/home/tom:/bin/bash

[root@redhat root]# cat /etc/passwd|wc –l        //显示passwd文件中共有多少行

39

[root@redhat root]#

----------------------------------------

password文件详细信息(分别表示)

login name:登录用户名

passwd:密码

uid:用户身份编号

gid:登录默认所在组编号

full name:用户全名或注释

home directory:用户主目录

shell:用户默认使用shell

----------------------------------------

login.defs中的create home选项决定系统在建立用户的时候是否同时创建其主目录,系统在建立用户主目录时,会将/etc/skel下的内容复制到新目录下,最后系统会使该目录与其下的文件归属于新用户。

----------------------------------------

Red Hat Linux默认将用户密码存储在/etc/shadow文件中,passwd文件默认权限为644shadow文件默认权限为400shadow文件支持密码过期设定等功能,shadow文件中每一行表示一个系统用户的密码记录,用 :号分隔。用户可以通过authconfig来设定是否使用shadow文件及md5加密。

shadow文件的每一行中的每一项具体来说:

登录用户名

用户密码(一般经md5加密)

197011日起到密码上一次被更改的时间

密码再过几天可以被变更(0表示随时可被变更)

密码再过几天必须被变更(999999表示永不过期)

密码过期前几天系统提醒用户(默认为一周)

密码过期几天后账号会被取消

197011日算起,多少天后帐号失效

---------------------------------

[root@redhat root]# groupadd gp1         //添加群组

[root@redhat root]# groupdel gp1        //删除群组

[root@redhat root]# groupmod -n jack tom        //将名称为tomr的群组重命名为jack

[root@redhat root]# cat /etc/group    //查看所有的群组

[root@redhat root]# groupmod -n tom jack         //将名称改回来

[root@redhat root]# gpasswd tom        //tom群组设置密码

Changing the password for group tom

New Password:

Re-enter new password:

[root@redhat root]# useradd jack        //添加一个jack用户

[root@redhat root]# passwd jack

Changing password for user jack.

New password:

BAD PASSWORD: it is too short

Retype new password:

passwd: all authentication tokens updated successfully.

[root@redhat root]# groups jack        //添加jack群组

jack : jack

[root@redhat root]# gpasswd -a jack tom        //jack添加到tom群组中

Adding user jack to group tom

[root@redhat root]# vi /etc/group

…………

luowei:x:500:

test:x:501:jack        //手动添加jacktest群组

tom:x:505:jack

jack:x:506:jack

"/etc/group" 48L, 659C written

[root@redhat root]# cat /etc/passwd

…………

luowei:x:500:500:this is luowei's username:/home/luowei:/bin/bash

test1:x:504:501::/home/tst1:/bin/csh

tom:x:505:505::/home/tom:/bin/bash

jack:x:506:501::/home/jack:/bin/bash    后边一个501表示初始群组gid

[root@redhat root]# su - jack

[jack@redhat home]$ groups        //列出当前用户的群组

test tom jack

[jack@redhat home]$ cd

[jack@redhat jack]$ touch test

[jack@redhat jack]$ ls -l

total 0

-rw-r--r-- 1 jack test 0 Nov 5 17:20 test

[jack@redhat jack]$ newgrp jack        //修改当前用户的有效群组

[jack@redhat jack]$ groups

jack test tom

[jack@redhat jack]$ touch test1

[jack@redhat jack]$ ls -l

total 0

-rw-r--r-- 1 jack test 0 Nov 5 17:20 test

-rw-rw-r-- 1 jack jack 0 Nov 5 17:23 test1

[jack@redhat jack]$ su -

Password:

[root@redhat root]# useradd -u 600 -g test -G jack jim    //建立jim用户,并设置其uid600,初始群组为test,并且还将其加入jack群组中。

[root@redhat root]# useradd lucy -s /bin/csh        //创建lucy并将它的默认shell改为csh

[root@redhat root]# useradd -M test2        //创建test2目录但不创建它的家目录

[root@redhat root]# ls /home

jack jim lucy luowei test1 tom tst1

[root@redhat /]# useradd test3 -d /test3        //创建test3并设置它的家目录为 /test3

[root@redhat /]# finger test3

Login: test3 Name: (null)

Directory: /test3 Shell: /bin/bash

Never logged in.

[root@redhat root]# useradd -r lucy_sys        //创建一个名为lucy_sys的系统用户

[root@redhat root]# cat /etc/passwd

…………

luowei:x:500:500:this is luowei's username:/home/luowei:/bin/bash

test1:x:504:501::/home/tst1:/bin/csh

tom:x:505:505::/home/tom:/bin/bash

jack:x:506:501::/home/jack:/bin/bash

jim:x:600:501::/home/jim:/bin/bash

test2:x:602:602::/home/test2:/bin/bash

test3:x:603:603::/test3:/bin/bash

lucy_sys:x:100:101::/home/lucy_sys:/bin/bash

[root@redhat root]# groupadd -r lucygp_sys        //创建系统群组

原文地址:https://www.cnblogs.com/luowei010101/p/2245132.html