一、基础命令:
1.用户管理类命令
(1)useradd libang 添加用户 —— 在home目录下生成同级的目录
(2)userdel -r libang 删除用户
(3)passwd libang 修改密码
(4)su -root 切换到root用户,并将root用户的环境变量同时带入
(5)groupadd group 添加名为group的用户组
(6)groupdel group 删除名为group的用户组
注意:
dduser创建帐号的同时,要求用户输入密码
useradd需要在创建帐号后,自行创建密码passwd
2.文件与目录类命令
(1)ls 查看目录 (ls [选项] 目录或文件)
ls /home 显示/home目录下的文件与目录(不包含隐藏的)
ls -a /home 显示/home目录下的文件与目录(包含隐藏的)
ls -l /home 显示/home目录下的文件与目录的详细信息
(2)cd 改变工作目录(cd 目录名)
cd /home/ 进入/home目录
cd ..退回到上一级目录
cd ~ 进入用户主目录
cd - 代表前一个工作目录
ctrl+h 显示当前目录下的隐藏文件
(3)cp 复制文件/目录 (cp [选项] 源文件或目录目标文件和目录)
cp /home/test /tmp 将/home目录下的test文件拷贝到/tmp目录下
cp -r /home/dir1 /tmp 将/home目录下的dir1目录拷贝到/tmp目录下
(4)mv 移动或改名(mv [选项] 源文件或目录 目标文件或目录)
mv /home/test /home/test1 将/home目录下的test文件更名为test1
mv /home/dir1 /tmp 将/home目录下的dir1目录移动到/tmp目录下
(5)rm 删除文件/目录 (rm [选项] 文件或目录)
rm /home/test 删除/home目录下的test文件
rm -r /home/dir 删除目录下的dir目录
(6)chmod 改变文件权限(chmod +x test.txt)
chmod 777 test.txt 可读可写可执行
(7)mkdir 创建目录(mkdir [选项] 目录名)
mkdir /home/workdir 在/home目录下创建workdir目录
mkdir -p /home/dir1/dir2/dir3 依次创建
(8)du 查看目录 (du 目录名)
du /tmp
(9)pwd 查看当前路径
(10)echo 显示字符串变量等
3.压缩打包类命令
*.gz——gzip命令压缩的文件
*.bz2——bzip2命令压缩的文件
*.tar——tar命令打包的文件
*.tar.gz——tar打包后,再经过gzip压缩的文件
*.tar.bz2——tar命令打包后,再经过bzip2压缩的文件 (tar xjvf *.tar.bz2)
(1)gzip 压缩解压(gzip [选项] 文件名)
gzip /root/anaconda-ks.cfg 压缩文件
gzip -d /root/anaconda-ks.cfg.gz 解压文件
(2)bzip2 压缩解压(bzip2 [选项] 文件名)
bzip2 /root/anaconda-ks.cfg 压缩文件
bzip2 -d /root/anaconda-ks.cfg.bz2 解压文件
tar xjvf name.bz2
(3)tar 打包压缩(tar [选项] 目录或者文件)
tar cvf tmp.tar /tmp 将/tmp目录打包为一个文件
tar xvf tmp.tar 将打包文件解开
tar cvzf tmp.tar.gz /tmp 将tmp目录打包为一个文件
(4)tar xzvf tmp.tar.gz 将打包文件解开
注意:1 gzip不能压缩目录,只能压缩文件
2 压缩和打包,解压缩和解包是不同的过程
3 gzip压缩或者解压后,原文件不再存在;bzip2提供了-k参数,可以保留原文件
4 windows对文件压缩,其实是先打包在压缩的过程
4.磁盘管理类命令
(1)mount 加载光盘(mount [选项] 类型 设备名 挂载目录)
mount /dev/csrom /mnt
mount -t iso9660 /dev/cdrom /mnt/cdrom
类型:
windows95/98的FAT32系统 vfat
winNT/2000 ntfs
CD-ROM iso9660
(2)umount 卸载光盘(umount 挂在目录)
umount /mnt (请在执行umount前,保证用户已经推出了mnt目录)
(3)df 查看磁盘总容量,已用容量(df [选项])
df -hl
du 查看文件已用容量
du -h ————针对目录
(4)touch 创建新文件
touch newfile 创建一个名为newfile的空白文件
(5)ln 文件链接(ln [选项] 文件名 链接名)
ln oldfile hlink 为oldfile文件创建一个应链接hlink
ln -s oldfile slink 为oldfile文件创建一个软链接slink
硬链接和软链接的区别:
(6)fdisk 查看硬盘分区情况
fdisk -l ————拥有root权限
5.查找类命令
(1)find 查找文件/目录 (find 查找路径 -name文件名)
find /root -name install.log 在root目录下寻找名为install.log文件
(2)grep 查找字符(grep "字符串" 路径 [选项])
grep "hello" ./ -rn 在当前路径下寻找包含字符串"hello"的文件
6.进程管理类命令
(1)ps 查看进程(ps [选项])
ps aux
(2)kill 杀死进程(kill [选项] pid)
vim hello.c
ps aux
kill pid (hello.c的进程号)
(3)free 查看内存
free
(4)top CPU占有率(top [选项])
top 动态显示进程
(5)pstree 以树形式打印进程
(6)tree 以树形式打印当前目录
(7)jobs 查看后台进程和它的作业号
fg %1 1为作业号,调到 前台运行
ctrl+z 正在执行的进程放在后台,并停止
bg %1 1为作业号,把后台停止的作业改成 后台运行
多个命令的同时执行时,只要将它们用分号隔开即可。
7.杂项命令大聚合
(1)代码风格
indent [options] [input-files]
indent [options] [single-input-file] [-ooutput-file]
indent -kr -bl -bli0 test.c
-kr表示K&R风格
-i8表示缩进8个空格的长度
-l80表示一行最多80个字符
没有指定-nut选项,则每8个缩进空格会自动用一个Tab代替
(2)| 管道操作 (命令1 | 命令2)
rpm -qa|grep tar 查询系统中安装的所有软件包,并从中找出带有字符串"tar"的
(3)man info --help查看帮助 (man 命令名)
man find 查看find命令的用法
(4)shutdown关闭linux系统 (shutdown [选项] 时间)
shutdown -h 18:00
立即关机:shutdown now init 0 halt
重启:init6 reboot shutdown -r
(5)date+%Y/%m/%d 显示年月日
date +%H:%M 显示小时和分钟 (/和:可以用其他符号代替)
cal [[month] year]
(6)将一般用户改为sudo用户
sudo vim /etc/group
找到类似这样的一行: sudo:x:27:icawu,sir
在第4列后面加入一般账户的名字即可,“,”后不要空格
或者是/etc/sudoers root ALL=(ALL) ALL 在起下面添加xxxALL=(ALL) ALL(这里的xxx是你的用户名)
(7)od[-t TYPE] 档案
-t :后面可以接各种类型 (TYPE)癿输出,例如:
a :利用默认的字符输出;
c :使用ASCII 字符输出
d[size] :利用十进制(decimal)输出数据,每个整数占用size bytes ;
f[size] :利用浮点数(floating)输出数据,每个数占用size bytes ;
o[size] :利用八进制(octal)输出数据,每个整数占用size bytes ;
[size] :利用十六进制(hexadecimal)输出数据,每个整数占用 size
例如: hello文件的内容 3210o
od -tx1 -tc hello //可以有多个选项,注意1的效果(每1个字节隔开)
0000000 33 32 31 30 6f 0a
3 2 1 0 o \n
(8)内核相关
uname -arsmpi
-a :所有系统相关癿信息,包括底下的数据都会被列出来;
-s :系统核心名称
-r :核心的版本
-m :本系统癿硬件名称,例如 i686 戒 x86_64 等;
-p :CPU的类型,与-m 类似,只是显示的是 CPU的类型!
-i :硬件的平台 (ix86)
应用:cd /usr/src/'uanme -r'/include/linux/fs.h
此句在里ubuntu13.04中不可,linux-headers-3.8.0-19
lsmod 查看已加载内容
lshw 当前硬件信息
xrandr 查看当前分辨率 (xrandr -s 7(第几行)
(9)cat显示文本文件内容 (cat /etc/issue)
more 分页显示文本文件内容 ——只能向下翻页
less 分页显示文本文件内容 ——可以上下翻页
head 显示文件首部内容 (head -5 /etc/passwd)
tail 显示文件尾部内容
cat /etc/passwd | more/less/head -5/tail -5
(10)which 查看可执行文件的位置
which which
whereis 查看文件位置(全匹配查找)
whereis which
locate 配合数据库查看文件位置 (局部匹配查找)
locate ls
(11)信息查看
dmesg 显示系统的启动信息 (保存在/etc/sysconfig)
uptime 关于系统相关的时间信息
who 查看当前系统用户 (whoami 只查看当前用户)
last 系统用户登录信息 (/var/log名为wtmp文件里)
hostname 域名
bc 计算器
(12)ubuntu专题:
<1> apt命令用法: (在ubuntu下可用,redhat不可用)
apt-get update 升级源
apt-get install 安装新软件包
apt-get remove 卸载已安装的软件包
apt-get clean 清理系统,不影响安装的软件的使用
apt-get upgrade 更新任何已安装的软件包
apt-get dist-upgrade 系统升级到新版本
apt-get search 查找软件包
dpkg-config-list-all (dpkg -l)列出所有软件包
sudo apt-get install nautinuls-open-terminal(当前位置代开终端) ---重启生效
sudo apt-get autoremove indicator-appmenu (关闭全局应用菜单)
<2> ubuntu下的几个重要文件:
(1) 软件源:/etc/apt/sources.list
(2) $PATH:/etc/environment
(3) 环境变量:/etc/profile
(4) grub:/boot/grub/grub.cfg
(5) 用户bash:/home/.bashrc(注意以.开头的文件属于隐藏文件,用ctrl+h可以显示)
<3> system setting没有语言支持: sudo apt-get install language-selector-gnome
<4> 虚拟机中VMwareTools的安装
(1)、下载vmwaretools工具包:http://download.csdn.net/download/jiaoxiaogu/6287937
(2)、解压并安装:
- $ tar xzf VMwareTools-9.6.0-1294478.tar.gz
- $ cd vmware-tools-distrib
- $ sudo ./vmware-install.pl
一直按回车键
(3)、重启虚拟机
<5> GNU二进程工具 (对ARM很重要,务必要了解)---redhat/ubuntu
addr2line:把程序地址转换为文件名和行号ar:建立、修改、提取归档文件
as:主要用来编译GNU C编译器gcc输出的汇编文件,产生的目标文件由链接器ld连接
c++filt:连接器使用它来过滤C++ 和Java 符号,防止重载函数冲突
ld:GNU链接器
nm:列出目标文件中的符号
R--只读符号 N--调试符号 D--已经初始化的变量 T--text段的符号
U--未定义的符号 S--未初始化的符号
objcopy:文件格式转换
objdump:显示一个或者更多目标文件的信息,主要用来反编译
ranlib:产生归档文件索引,并将其保存到这个归档文件中。在索引中列出了归档文件各成员所定义的可重分配目标文件
readelf:显示elf格式可执行文件的信息 readelf -a a.out
size:列出目标文件每一段的大小以及总体的大小。默认情况下,对于每个目标文件或者一个归档文件中的每个模块只产生一行输出 size a.out
strings:打印某个文件的可打印字符串。默认情况下,只打印目标文件初始化和可加载段中的可打印字符;对于其它类型的文件它打印整个文件的可打印字符,这个程序对于了解非文本文件的内容很有帮助 strings -f/a hello.o
strip:丢弃目标文件中的全部或者特定符号,减小文件体积 strip -s a.out
<6>windows和ubuntu文件共享之samba服务器配置
关闭LINUX防火墙命令: #ufw disable 然后就在windows下ping一下linux的IP,如果能ping通,就可以继续下面的内容,如果ping不通就再找找原因
注:ubuntu12.04已经安装了最新版本的samba服务器,无需安装。如果使用12.04以前的版本,最好是按下边的方法升级一下samba,12.04版本无需下列操作
卸载samba,smbclient,samba-common
$sudo apt-get remove samba-common
$sudo apt-get remove smbclient
$sudo apt-get remove samba
安装Ubuntusamba服务器:
sudo apt-get install samba
sudo apt-get install smbfs
安装Ubuntusamba图形管理界面
#sudo apt-get install system-config-samba
启动samba图形管理界面
#sudo system-config-samba
选择要共享的目录 设置读写权限 设置访问权限添加samba用户
配置完成后要重启samba
#sudo /etc/init.d/smbd restart
(13)Elf格式文件
GNU编译器生成的目标文件缺省为elf格式
elf文件由若干段(section)组成;目标代码中包含如下段:
.text: 包含程序的指令代码、固定的数据,如常量、字符串;
.data: 包含有初始化值的变量、数组等;
.bss: 包含未初始化的变量、数组等;
连接器的任务就是将多个目标文件的.text、.data和.bss等段连接在一起
二、vim编辑器的使用与配置 参考:http://blog.csdn.net/wqx521/article/details/37913877
1.常用编辑器:
(1) vi/vim 最常用的字符界面文本编辑器
(2) emacs 专为编辑程序源码文件而编写的文本编辑器
(3) nano 字符界面底端
(4) gedit 运行在Linux图形界面中
gedit之乱码问题
<1> 运行dconf-editor
<2> 展开/org/gnome/gedit/preferences/encodings
<3> auto-detected的Value中加入'GB2312' ,加在UTF-8前面;
(5) MC
2.开发环境构成:
(1) 编辑器:vi/vim
(2) 编译器:gcc
(3) 调试器:gdb
(4) 函数库:glibc /usr/lib
(5) 系统头文件:glibc_header /usr/include
三、Linux网络配置 (vmware workstation虚拟机)
1.VMware提供了三种网络工作模式:
(1).bridged(桥接模式)—— 提供做个IP地址
(2).NAT(网络地址转换模式)——只能提供一个IP地址
(3).host-only(主机模式)——主机没有连接任何外部网络
2.注意事项:
(1).选择网络模式前,停止虚拟机中系统的运行
(2).配置完网络后,重新启动虚拟机中的系统
3.相关命令
(1) ifconfig:查看各网卡详细信息(如IP),以太网卡名一般为"eth0"
(2) /etc/init.d/networking restart 重启各网卡
4.Linux常见网络接口
-eth0:系统中的第一块物理网卡
-lo:虚拟的回环网卡
-virbr0:网络网桥
四、远程登录
1.登录前提
(1) 从windows能够ping通linux(在ctrl+R--cmd--pingIP地址(在linux里面用ifconfig看IP地址))
(2) 关闭Linux防火墙——ufw disable (ubuntu)
2.putty-SSH软件,设置相关信息.软件下载地址:http://download.csdn.net/detail/a1314521531/7877905
3.VNC
(1) 安装vnc服务器
(2) 启动vnc服务:vncserver &
<或者3.在windows端运行vnc.exe>
VNC常见问题:windows不能ping通linux 未关闭防火墙
五、Windows与Linux文件共享(redhat)
1.前提条件
(1) 从windows能够ping通linux(在ctrl+R--cmd--pingIP地址(在linux里面用ifconfig看IP地址))
(2) 关闭Linux防火墙——/etc/init.d/iptables stop (redhat) ufw disable (ubuntu)
2.WinSCP软件(windows中)
自己摸索一下这个软件的使用吧,就是把文件拖进拖出
Vmware Tools不推荐使用
Windows与Linux文件共享(ubuntu)
1.前提条件
(1) 从windows能够ping通linux(在windows+R--cmd--pingIP地址(在linux里面用ifconfig看IP地址))
(2) 物理机和虚拟机建立通信——sudo apt-get install ssh ps-e |grep ssh /etc/init.d/ssh start--启动ssh服务器
2.WinSCP软件(windows中)
自己摸索一下这个软件的使用吧,就是把文件拖进拖出
六、Linux密码故障解决
破解root密码步骤:
(1) 在系统启动时进入grub选项菜单
(2) 在grub选项菜单按e进入编辑模式
(3) 编辑kernel那行,添加/init 1
(4) 按b重启
(5) 进入系统后,将root密码设置为空
vim /etc/passwd
root:x:0...中的x删除
root::0...然后保存退出
(6) 重启,登录linux后修改root密码
passwd root
七、宿主机上安装TFTP服务器 (ubuntu)
配置tftp 服务的步骤:
<1>. 若/etc/xinetd.d/下存在 tftp,执行下列操作
1)关闭 xinetd 服务
$sudo service xinetd stop
2)删除 tftp 文件
$sudo rm /etc/xinetd.d/tftp
3) 启动xinetd 服务
$sudo service xinetd start
<2>. 安装 tftp 客户端和服务器端
$sudo apt-get install tftp-hpa
$sudo apt-get install tftpd-hpa
<3>. 修改 tftpd-hpa 配置文件
$vim /etc/default/tftpd-hpa
修改 “/var/lib/tftpboot ” 为 “/tftpboot”
修改"--secure" 为 "--secure -c" 允许上传新文件
<4>. 若/tftpboot 不存在,创建该目录
$sudo mkdir /tftpboot
$sudo chmod 777 /tftpboot
<5>. 重启 tftpd-hpa 服务
$sudo service tftpd-hpa restart
若服务重启成功,能查看到相应的进程
$ps -ef |grep in.tftpd
至此tftp 服务已经安装完成了,下面可以对其进行一下测试。 (假设在当前目录下有一个测
试文件 test.txt)
$tftp 127.0.0.1
tftp>put test.txt
Sent 1018 bytes in 0.0 seconds
tftp> get test.txt
Received 1018 bytes in 0.1 seconds
tftp> quit
$
通过get 命令,可以把当前目录下的 test.txt 文件,通过tftp 上传到它的服务文件目录。这
时,在/tftpboot 下面会出现 test.txt 文件。通过 put 命令,可以从/tftpboot 下, 下载 test.tx t
文件。这样就验证了 tftp 服务配置的正确性。当文件上传与下载结束后,可以通过 quit 命
令退出。
安装、配置nfs服务:
<1> 安装 nfs
Ubuntu 上默认是没有安装 nfs 服务器的,因此我们首先安装 nfs 服务器端:
$sudo apt-get install nfs-kernel-server
2、配置/etc/exports
nfs 允许挂载的目录及权限在文件/etc/exports 中进行了定义。
例如,我们要将根目录下的 rootfs 目录共享出来,那么我们需要在/etc/exports 文件末尾添
加如下一行:/rootfs *(rw,sync,no_root_squash)
其中:/rootfs 是要共享的目录,*代表允许所有的网络段访问,rw 是可读写权限,sync 是资
料同步写入内存和硬盘,no_root_squash 是 nfs 客户端分享目录使用者的权限,如果客户端
使用的是 root 用户,那么对于该共享目录而言,该客户端就具有 root 权限。
其它nfs 常用的参数有:
ro 只读访问
rw 读写访问 sync 所有数据在请求时写入共享
async nfs 在写入数据前可以响应请求
secure nfs 通过 1024 以下的安全 TCP/IP 端口发送
insecure nfs 通过 1024 以上的端口发送
wdelay 如果多个用户要写入 nfs 目录,则归组写入(默认)
no_wdelay 如果多个用户要写入 nfs 目录,则立即写入,当使用 async 时,无需此设置。
hide 在nfs 共享目录中不共享其子目录
no_hide 共享 nfs 目录的子目录
subtree_check 如果共享/usr/bin 之类的子目录时,强制 nfs 检查父目录的权限(默认)
no_subtree_check 和上面相对,不检查父目录权限
all_squash 共享文件的 UID 和 GID 映射匿名用户anonymous ,适合公用目录。
no_all_squash 保留共享文件的 UID 和GID(默认)
root_squash root 用户的所有请求映射成如 anonymous 用户一样的权限(默认)
no_root_squas root 用户具有根目录的完全管理访问权限
anonuid=xxx 指定 nfs 服务器/etc/passwd文件中匿名用户的 UID
anongid=xxx 指定 nfs 服务器/etc/passwd文件中匿名用户的 GID
3、重启服务
$sudo /etc/init.d/portmap restart
$sudo /etc/init.d/nfs-kernel-serverrestart
4、测试 nfs
此时可以运行以下命令来显示一下共享出来的目录:
$showmount -e
或者可以使用以下命令把它挂载在本地磁盘上,例如将/rootfs 挂载到/mnt 下:
$ sudo mount -t nfs localhost:/rootfs/mnt
可以运行 df 命令查看是否挂载成功。查看后可以使用以下命令卸载:
$ sudo umount /mnt
八、Linux编译器GCC (gcc -v 查看gcc版本)
——其执行效率与一般编译器相比平均效率要高20%~30%
1.基本用法 (gcc [options] filenames)
gcc *.c ./a.out
2.GCC编译流程
gcc通过后缀来区别输入文件,常见类型:
.c为后缀的文件:c语言源代码文件
.a为后缀的文件:是由目标文件构成的库文件
.C,.cc为后缀的文件:是c++源代码文件
.h为后缀的文件:头文件
.o为后缀的文件:是编译后的目标文件
.s为后缀的文件:是汇编语言源代码文件
.m为后缀的文件:Objective-C原始程序
.so为后缀的文件:编译后的动态库文件
源程序, 预处理,编译,汇编,连接,可执行
预处理阶段: 条件编译,头文件包含,宏替换的处理
预处理 gcc -E test.i test.c // gcc-E test.c -o test.i 输入为源代码输出为源代码(文本文件)(不作语法检查)
编译gcc -S test.c -o test.s //输入为预处理源代码,输出为汇编源代码(intel的汇编指令)(文本文件)(做语法检查,需函数的原型声明)
汇编gcc -c test.c -o test.o #输入为汇编源码,输出的二进制代码不能被执行(不含库函数的二进制文件)
.so 的库文件
连接gcc test.o -o test (和库文件进行连接)
3.gcc编译选项
-o output_option:确定可执行文件的名称
-O 对程序进行优化
gcc optimize.c -o optimize ./optimize
gcc -O optimize.c -o optimize ./optimize
-c 不链接,生成.o为后缀的中间文件
-g 长生调试工具所需要的符号信息
-Wall 生成所有警告
-w 不生成任何警告
-DMACRO 定义MACRO宏,等效于在程序中使用#define MACRO
九、Linux调试器GDB
GUN的调试程序gdb,用来调试c和 c++ 程序的调试器
设置所有能影响程序运行的参数
指定条件下停止运行
gdb调试的对象是可执行文件而不是程序的源代码文件
需在执行gcc指令编译程序时,加上-g,才能调试
gdb使得机器码和源代码相关联
gcc -g -o debugme debugme.c
gdb debugme
断点break 行号/函数/文件名:行号(函数名)
break(b) 25
break main
info break:查看断点y表示生效n表示失效
disable+断点号 断点失效
enable + 断点号
run(r) 启动程序
print i 查看变量的值
step(s) 执行一行停到下一行 ;会进入子程序内部;跳到子程序中
next 执行一行停到下一行 ;把子函数当成单步执行
quit 退出调试
continue 跳到下一个断点处
finish 结束子程序的运行
Enter: 进行上一步的操作
gdb -d 目录名 指出源码所在位置
print arry[0]@5 查看连续的存储单元的值
p/x arry[0]@5 以十六进制显示
print &i
print *arry
break 37 if i==15 :条件断点, 当i==15时才停下来
watch 设置监视点(监视表达式的变换)(变量)
break 制定了特定的位置(监视某位置)
watch j :j的变量变换就会停下来
continue
rwatch 设置读监视点
set variable i=100 运行时人工改变变量的值
return 返回值
where 和backtrace 显示程序运行位置和函数调运栈
up , down :遍历函数调运栈
up 上升一个函数调运栈
down
print main::i
list 列出当前运行行附近的行
whatis i :i是什么类型
whatis main
ptype :明细显示变量和函数的数据类型
search 搜索字符串
revarse search
shell pwd 执行shell命令
info file 显示调试文件的信息
info func 显示函数名
info local 局部变量的信息
info prog 显示调试程序的执行状态
set args调试加参数:set args 参数1 参数2
十 segement fault
1.段错误产生原因:数组访问越界 访问空指针 栈溢出 修改只读内存
2.通过ulinit命令打开/关闭core dump功能
打开:ulimit-c unlimited
关闭:ulimit-c 0
ulimit -c 1000 ---指定大小
3.core文件分析
gdb 程序名 core文件名
4.什么时候不产生core文件
(a)进程是设置-用户-ID,而且当前用户并非程序文件的所有者;
(b)进程是设置-组-ID,而且当前用户并非该程序文件的组所有者;
(c)用户没有写当前工作目录的许可权;
(d)文件太大。core文件的许可权(假定该文件在此之前并不存在)通常是用户读/写,组读和其他读。
5.解决方法
(1) 利用gdb逐步查找段错误
(2) 分析Core文件
(3) 段错误时启动调试
(4) 利用backtrace和objdump进行分析 (objdump -d a.out)