一、基本 bash shell命令
创建文件 : touch
链接文件:符号链接:是一个实实在在的文件,两个通过符号链接在一起的文件,彼此的内容并不相同。使用ln -s命令。
硬链接:会创建独立的虚拟文件,其中包含了原始文件的信息及位置。但他们从根本上而言是同一个文件。原始文件必须事先存在,使用ln命令。
查看文件类型 : file
查看整个文件 : cat , more , less
查看部分文件 : tail , head
二、更多shell命令
探查进程 : ps , 常用 ps -ef , ps -l
实时监测进程 : top。第一部分显示系统的概况:第一行显示当前时间、系统运行时间、登录的用户数以及系统的平均负载(三个值代表最近1min、5min、15min)如果近15min内的平均负载都很高,说明系统可能有问题。
第二行显示了进程概要信息:有多少进程处在运行、休眠、停止或是僵化状态
下一行显示了CPU的概要信息。
紧跟其后的两行说明了系统内存的状态。第一行是系统的物理内存:总共多少内存,当前用了多少,还有多少。后一行表示同样的信息,不过针对系统交换空间。
最后一行显示当前运行中的进程纤细列表。
PID:进程ID; USER:进程属主名字; PR:进程优先级; NI:进程的谦让值; VIRT:进程占用的虚拟内存总量; RES:进程占用物理内存总量; SHR:进程和其他进程共享的内存总量; S:进程的状态(D可中断休眠,R运行,S休眠,T跟踪或停止,Z僵化); %CPU:进程使用CPU时间比例; %MEM:进程使用的内存占用内存的比例; TIME+:自进程启动到目前位置的CPU时间总量; COMMAND:进程对应的命令行名称。
结束进程 : kill , killall
挂载存储媒体: mount
移除存储媒体: umount
查看所有已挂载的磁盘 : df
显示特定目录的磁盘使用情况 : du
排序数据 : sort
搜索数据 : grep
压缩数据 : bzip2(.bz2) , compress(.Z) , gzip(.gz) , zip(.zip) 。只能压缩单个文件或者某个目录中的文件,或者是能有通用符表示的多个文件。
归档数据 : tar (将多个文件归档进单个文件)
三、理解Shell
进程列表 : 将命令列表包含在括号中 , 如 :( pwd ; ls ; cd /etc; pwd; cd ; pwd; ls)会创建一个子shell来执行命令。
后台模式 : 在命令结尾加上字符 & ,如 sleep 3000 &
协程 : 在后台生成一个子shell,并在这个shell中执行命令 ,如 : coproc my_job { slee 10; }。
外部命令 : 也称为文件命令,存在于bash shell 之外的程序,当外部命令执行时,会创建一个子进程。
内建命令 : 不需要使用子进程来执行,执行速度更快
命名别名 : alias li='ls -li',仅在它所被定义的shell进程中才有效。可以将alias设置放在$HOME/.bashrc文件中,使其效果永久化。
四、Linux环境变量
全局变量
查看全局变量: printenv 或者 env,查看某一个环境变量printenv ,如: printenv PATH,或者echo,如: echo $PATH. 设置全局变量时,可以先创建一个局部变量,然后再使用export将其导出为全局变量。如 : export my_variable. 子shell不能改变父shell中的全局变量,即使使用export命令。
局部变量
查看局部变量: set命令会显示为某个特定进程设置的所有环境变量,包括局部、全局和用户定义变量。
设置用户变量: my_variable="Hello world",该变量在子shell中无效。数组变量mytest=(one two three four five),输出所有的值echo ${mytest[*]},输出单个值 echo ${mytest[2]},可以使用unset删除数组中的某个值,但是只会使该索引上的值为空。素组变量在shell脚本编程时并不常用,它的可移植性不好。
删除环境变量 : unset my_variable。如果该变量是全局变量,且在子shell中删除了该变量,在父shell中该变量依然可用。
设置PATH变量 : PATH=$PATH:/home/christine/Scripts 。 只能持续到退出或者重启系统。
环境变量的定位 : 登录时作为默认登录shell的启动文件为/etc/profile, 作为非登录shell的交互式shell(如在命令行敲入bash时启动),它不会访问/etc/profile文件,只会检查用户HOME目录中的.bashrc文件。 非交互式shell使用的BASH_ENV环境变量,它可以继承父shell导出过的变量,使用当前shell的局部变量和全局变量。
环境变量持久化 : 在/etc/profile.d 目录中创建一个以.sh结尾的文件。把所有新的或者修改过的全局变量设置放在这个文件夹中。
五、Linux文件权限
/etc/passwd文件 :
登录用户名: 用户密码: 用户账户UID(数字形式):用户帐号组ID(GID数字形式): 用户账户的文本描述(备注字段): 用户HOME目录的位置: 用户默认shell
/etc/shadow文件 : 只有root用户可以访问。
登录名: 加密后的密码: 自上次修改密码后过去的天数(自1970年1月1日开始): 多少天后才能修改密码: 多少天后必须更改密码: 密码过期前多少天提醒用户更改密码: 密码过期后多少天禁用用户账户: 用户账户被禁用的日期(自1970年1月1日到当天的天数): 预留字段
添加新用户: useradd
删除用户 : userdel
修改用户 : usermod(修改用户账户字段,可以制定主要组以及附加组的所属关系), passwd(修改已有用户的密码), chpasswd(从文件中读取登录名密码对,并更新密码), chage(修改密码的过期日期), chfn(修改用户账户的备注信息), chsh(修改用户的默认登录shell)
/etc/group文件 : 文件格式 : 组名: 组密码: GID: 属于改组的用户列表
创建组 : groupadd
修改组 : groupmod
文件权限 : 例 lrwxrwxrwx 1 root root 6 Oct 3 03:54 link_nusers -> nusers
第一个字符代表了对象类型 : -代表文件, d代表目录, l代表链接, c代表字符型设备, b代表块设备, n代表网络设备。3组3字符编码分别代表了对象的属主、对象的属组、系统其他用户的权限,r可读,w可写,x可执行,其中-是0,x是1,w是2,r是4。文件的全权限值是666,目录是777.umask值是掩码值,需要从对象的全权限值中减去,即666-022=644。
改变文件权限:
chmod 760 myfiles或者 chmod [ugoa…] [+-=] [rwxXstugo…]
u代表用户,g代表组,o代表其他,a代表上述所有。
+表示在现有权限基础上增加权限,-表示在现有权限上移除权限,=表示将权限设置成后面的值
X如果对象是目录或者它已有执行权限,赋予执行权限; s运行时重新设置UID或GID; t保留文件或目录; u将权限设置为属主一样; g将权限设置为跟属组一样; o将权限设置为跟其他用户一样。
改变所属关系 : chown 改变文件的属主。 chgrp改变文件的默认属组。
共享文件(某一个组内的所有用户):
mkdir testdir ##创建共享目录
chgrp shared testdir #改变目录所在组
chmod g+s testdir #在属组的权限上增加运行时重新设置UID或者GID
umask 002 #设置文件对属组可写
cd testdir ; touch testfile #进入目录创建文件
六、管理文件系统
创建分区 : fdisk
创建文件系统(格式化) : mkfs.vfat(格式化u盘,文件系统fat), mkfs.ext3(文件系统ext3)
七、安装软件程序
使用aptitude 管理软件包
在命令行输入aptitude
快速显示某个特定包的详细信息 aptitude show package_name
得到特定软件包相关的所有文件的列表 dpkg -L pageage_name
找到特定的软件包 aptitude search package_name
安装软件包 aptitude install package_name
更新软件 aptitude safe-upgrade
卸载软件 aptitude purge package_name 或 aptitude remove package_name
区别remove选项不删除数据和配置文件,purge会删除全部。