目录
基础
文件目录
- $ 普通用户(多个)
- # 超级用户(一个)
- 家目录 : 超级用户的家目录: /root . 普通用户的家目录: /home /用户名 (除非切换用户,家目录才会变换。同用户的家目录不会变换)
- / 根目录 { root 家 home }
- 当前目录
echo $HOME //查看家目录
echo $PWD //查看当前目录
pwd //查看当前目录
目录 | 应放置档案内容 |
/bin |
系统有很多放置执行档的目录,但/bin比较特殊。因为/bin放置的是在单人维护模式下还能够被操作的指令。在/bin底下的指令可以被root与一般帐号所使用,主要有:cat,chmod(修改权限), chown, date, mv, mkdir, cp, bash等等常用的指令。
|
/boot | 主要放置开机会使用到的档案,包括Linux核心档案以及开机选单与开机所需设定档等等。Linux kernel常用的档名为:vmlinuz ,如果使用的是grub这个开机管理程式,则还会存在/boot/grub/这个目录。
|
/dev | 在Linux系统上,任何装置与周边设备都是以档案的型态存在于这个目录当中。 只要通过存取这个目录下的某个档案,就等于存取某个装置。比要重要的档案有/dev/null, /dev/zero, /dev/tty , /dev/lp*, / dev/hd*, /dev/sd*等等
|
/etc | 系统主要的设定档几乎都放置在这个目录内,例如人员的帐号密码档、各种服务的启始档等等。 一般来说,这个目录下的各档案属性是可以让一般使用者查阅的,但是只有root有权力修改。 FHS建议不要放置可执行档(binary)在这个目录中。 比较重要的档案有:/etc/inittab, /etc/init.d/, /etc/modprobe.conf, /etc/X11/, /etc/fstab, /etc/sysconfig/等等。 另外,其下重要的目录有:/etc/init.d/ :所有服务的预设启动script都是放在这里的,例如要启动或者关闭iptables的话: /etc/init.d/iptables start、/etc/init.d/ iptables stop /etc/xinetd.d/ :这就是所谓的super daemon管理的各项服务的设定档目录。
/etc/X11/ :与X Window有关的各种设定档都在这里,尤其是xorg.conf或XF86Config这两个X Server的设定档。
|
/home | 这是系统预设的使用者家目录(home directory)。 在你新增一个一般使用者帐号时,预设的使用者家目录都会规范到这里来。比较重要的是,家目录有两种代号:
|
/lib | 系统的函式库非常的多,而/lib放置的则是在开机时会用到的函式库,以及在/bin或/sbin底下的指令会呼叫的函式库而已 。 什么是函式库呢?妳可以将他想成是外挂,某些指令必须要有这些外挂才能够顺利完成程式的执行之意。 尤其重要的是/lib/modules/这个目录,因为该目录会放置核心相关的模组(驱动程式)。
|
/media | media是媒体的英文,顾名思义,这个/media底下放置的就是可移除的装置。 包括软碟、光碟、DVD等等装置都暂时挂载于此。 常见的档名有:/media/floppy, /media/cdrom等等。
|
/mnt | 如果你想要暂时挂载某些额外的装置,一般建议你可以放置到这个目录中。在古早时候,这个目录的用途与/media相同啦。 只是有了/media之后,这个目录就用来暂时挂载用了。
|
/opt | 这个是给第三方协力软体放置的目录 。 什么是第三方协力软体啊?举例来说,KDE这个桌面管理系统是一个独立的计画,不过他可以安装到Linux系统中,因此KDE的软体就建议放置到此目录下了。 另外,如果妳想要自行安装额外的软体(非原本的distribution提供的),那么也能够将你的软体安装到这里来。 不过,以前的Linux系统中,我们还是习惯放置在/usr/local目录下。
|
/root | 系统管理员(root)的家目录。 之所以放在这里,是因为如果进入单人维护模式而仅挂载根目录时,该目录就能够拥有root的家目录,所以我们会希望root的家目录与根目录放置在同一个分区中。
|
/sbin | Linux有非常多指令是用来设定系统环境的,这些指令只有root才能够利用来设定系统,其他使用者最多只能用来查询而已。放在/sbin底下的为开机过程中所需要的,里面包括了开机、修复、还原系统所需要的指令。至于某些伺服器软体程式,一般则放置到/usr/sbin/当中。至于本机自行安装的软体所产生的系统执行档(system binary),则放置到/usr/local/sbin/当中了。常见的指令包括:fdisk, fsck, ifconfig, init, mkfs等等。
|
/srv | srv可以视为service的缩写,是一些网路服务启动之后,这些服务所需要取用的资料目录。 常见的服务例如WWW, FTP等等。 举例来说,WWW伺服器需要的网页资料就可以放置在/srv/www/里面。呵呵,看来平时我们编写的代码应该放到这里了。
|
/tmp | 这是让一般使用者或者是正在执行的程序暂时放置档案的地方。这个目录是任何人都能够存取的,所以你需要定期的清理一下。当然,重要资料不可放置在此目录啊。 因为FHS甚至建议在开机时,应该要将/tmp下的资料都删除。 重启后数据会删除。 |
- Linux 里文件分类: 普通文件、目录文件、设备文件、链接文件(软连接【快捷方式】,硬链接)、管道、套接字
- 绝对路径:从根目录开始。相对路径:以当前目录开始。
cd /home/shangqian
cd ../
Linux 命令
- su 用户名 与 su - 用户名的区别:后者切换环境变量,而前者不切换环境变量
- sudo 可以是普通用户暂时的使用超级管理员权限
- ps -aux 显示系统进程
- kill -9 pid 结束某个进程
- ps -eLf | grep 'solitary' 只查看solitary 用户的进程
- shutdwn -r now 重启
- shutdown -h now 关机
命令 | 功能 |
cp | 复制文件或目录 |
rm | 删除文件或目录 |
mv | 移动文件或目录,文件或目录重命名 |
file | 显示指定文件的类型 |
find | 在指定目录查找符合条件的文件 |
touch | 建立指定名称的文件或更新文件时间 |
- touch:创建file1—file10共10个文件
touch file{1..10}
- 1.创建名称为A到Z的文件
touch {A..Z}
- 2.创建从1到100的文件
touch {1..100}
- 3.创建带有扩展名的批量文件
touch {2..200}.txt
- 4.创建具有扩展名的10000个文件
touch {1..10}{1..1000}.txt
- cat 查看文件 cat > file.c 可编辑文件 (从头写,>> 追加) "ctral + c"结束
- head -2 文件名 从头查看指定文件的2行
- tail -3 文件名 从文件尾部产看3行 (行号符也算一行)
- 只打印第三行
1 |
|
- 只查看文件的第3行到第9行
1
sed
-n
'3,9p'
/var/log/yum
.log
- 过滤特定字符串,显示正行内容
1 |
|
- 显示包含"hhh"的行到包含"omc"的行之间的行
1 |
|
- cp -r 目录文件 新文件(若存在(复制移动),若不存在(复制重命名))
- mv 目录文件 新文件(不存在(重命名),存在(移动))
匹配符
- * 匹配0或多个字符 ls file*
- ? 匹配1个字符
- [a~c] 匹配1个'a'~'c'的字符
- [!d] 匹配1个非'd'的字符 ls file[!d]
- find -name file\[!d] (find需要加' / ')
- find /home/shangqian -name file/*
命令 | 功能 |
ifconfig | 网络信息查看 |
ping | 测试和远程计算机的联网状态 |
telnet/ssh | 远程登录主机 |
ftp | 创建指定名称的目录 |
- ifconfig 查看ip 地址
- ifconfig ens33 192.168.14.114 修改ip 地址
归档 (打包)
- 多个文件合并为一个文件
- tar -c (归档) -x (解档) -z(调用gzip 压缩/解压缩 xxxx.gz) -j(调用bzip2压缩/解压缩 xxx.bz2) -v (显示操作的文件) -f(普通文件) -C(解压到指定目录)
tar -czvf dir * file* xxx.gz //归档 dir* 和 file* 到xxx.gz中
tar -xzvf xxx.gz -C /home //解压 xxx.gz到 /home中
文件权限
权限项 | 读 | 写 | 执行 | 读 | 写 | 执行 | 读 | 写 | 执行 |
字符表示 | (r) | (w) | (x) | (r) | (w) | (x) | (r) | (w) | (x) |
数字表示 | 4 | 2 | 1 | 4 | 2 | 1 | 4 | 2 | 1 |
权限分配 | 文件所有者 | 文件所属组用户 | 其他用户 |
ls -l
- - 普通文件
- d 目录文件
- c / b 设备文件
- l 链接文件
- p 管道文件
- s 套接字
chmod命令用于更改文件对于某类用户的操作权
- u 文件拥有者
- g 文件拥有者所在组
- o 其他用户
- a 所有用户
- + 添加权限
- - 减少权限
- = 设置权限
chmod g+wx file3* //为file3*的所有文件所在组成员添加写和执行权限
chmod a=rw file3* //为file3*的所有文件 的所有用户设置权限为写和读
chmod 666 file3* //为file3*的所有文件 的所有用户设置权限为写和读
chmod 777 file3* //为file3*的所有文件 的所有用户设置权限为写和读以及执行权限(全权限开放)
chown :root file3.c //更改file3.c所在组为root
chown root:root file3.c //更改file3.c的属主用户和所在组为root
硬链接软链接
ln file.3 lnfile //建立file.3 的一个硬链接 lnfile
ln -s lnfile file3 //建立lnfile的软连接file3
PATH:外置命令的工具箱集合
Linux的所有内置命令都相同,外置命令可能不同。
export PATH=xxxx:$PATH 本进程及其子进程PATH重新赋值
Linux集成开发环境
- 编辑器 gedit
- 编译器 gcc
- 调试器 gdb
- 管理器 make
vim常用命令
命令模式:
- dd: 删除光标所在的一整行
- 5dd: 删除光标所在行开始的5行,其他数字亦同
- yy: 复制光标所在行
- 5yy: 复制5行
- p: 在光标的下一行粘贴已复制内容
- u: 撤销前一次的操作
- Ctrl r: 重复上一操作
- w: 移动到下一单词第一字符
- e: 移动到下一单词最后字符
- b: 移动到前一单词第一字符
- gg: 到第一行
- G: 最后一行
- XG: 到第X行
- $: 移动到当前行行尾
- ^:移动到当前行的第一个非空字符上
末行模式主要用于保存或退出文档:
- 常用命令:
- 保存 :
:w
- 退出:
- 强制退出(不保存):
:q!
- 强制保存退出:
:wq!
- 显示行号:
:set nu
- 不显示行号:
:set nonu
- 跳转某行:
:数字
- 从下往上搜索字符串:
:?字符串
- 从上往下搜索字符串:
:/字符串
- 将光标所在行的第一个字符串替换:
:s/old/new
- 将光标所在行的所有字符串替换:
:s/old/new/g
- 全文替换:
:%s/old/new/g
- 替换3~5行的'this'为'the'
:3,5s/this/the/g
编辑模式:
- i:光标在原位置
- I:光标在行首位置
- a:当前字符后开始编辑
- A:从光标所在行的行尾开始编辑
- o:从光标所在行的下一行开始编辑
- O:从光标所在行的上一行开始编辑
块操作:
8,12co20 //把第8行和第12行复制到20行下面
8,12mo20 //把第8行和第12行移动到20行下面
分屏:
vsp main.c //在打开一个文件后输入 水平分屏mian.c文件
sp hello.c //垂直分屏
vim -O2 main.c hello.c //水平打开main.c和hello.c这2个文件
vim -o2 main.c hello.c //垂直打开main.c和hello.c这2个文件
GCC
- -O (0,1,2,3) 优化代码等级
- -I 添加标准的头文件目录
- -L 添加标准的库文件目录
gcc -Wall warning.c –o warning
例如有程序: hello.c
- (1)预处理
gcc -E hello.c -o hello.i
使用命令查看ls -l 得到:hello.i (查看hello.i)
- (2)编译
gcc -S hello.i -o hello.s
- (3)汇编
gcc -c hello.s -o hello.o
- (4)连接
gcc hello.o -o xxxx
- (5)执行
./xxxx
GDB调试
在gcc编译选项中一定要加入选项“ -g ”
- gdb helloworld //调试可执行程序
- l //查看10行源代码
- b 6 //第6行设置断点
- info b //查看已经设置的断点
- d 2 //删除第二个断点
- d //删除所有断点
- s //进入断点进入函数单步运行
- n //不进入函数单步运行
- c //程序运行完停止
- p 变量名 //打印变量的 值
- r //运行程序
- set var 变量 = 设定值
Make管理器
make 是一个命令工具,它解释 Makefile 中的指令(应该说是规则)。在 Makefile文件中描述了整个工程所有文件的编译顺序、编译规则。当在shell 提示符下输入“make”命令以后。make 读取当前目录下的 Makefile 文件,并将 Makefile 文件中的第一个目标作为其执行的“终极目标”,开始处理第一个规则(终极目标所在的规则)。
- 输入
vim Makefile
main:main.o fun1.o fun2.o
Tab gcc main.o fun1.o fun2.o -o main
main.o:main.c
Tab gcc -o main.o -c main.c
fun1.o:fun1.c
Tab gcc -o fun1.o -c fun1.c
fun2.o:fun2.c
Tab gcc -o fun2.o -c fun2.cclean:
Tab rm *.o main
- 开头不能使用空格!!!
make main // 执行main规则
make clean //执行clean 规则
变量 :
- 自定义变量
OBJ = main.o fun1.o fun2.o
cc = gcc
main:$(OBJ)
$(CC) main.o fun1.o fun2.o -o main
main.o:main.c
$(CC) -o main.o -c main.c
fun1.o:fun1.c
$(CC) -o fun1.o -c fun1.c
fun2.o:fun2.c
$(CC) -o fun2.o -c fun2.c
- 预定义变量
- 自动变量:
- $@ 目标文件
- $< 第一个依赖文件
- $^ 所有的依赖文件
OBJ = main.o fun1.o fun2.o
CC = gcc
main:$(OBJ)
$(CC) $^ -o $@
main.o:main.c
$(CC) -o $@ -c $<
fun1.o:fun1.c
$(CC) -o $@ -c $<
fun2.o:fun2.c
$(CC) -o $@ -c $<
clean:
rm *.o main
规则:
- 显示规则:
- 模式规则 :
OBJ = main.o fun1.o fun2.o
CC = gcc
main:$(OBJ)
$(CC) $^ -o $@
%.o:%.c
$(CC) -o $@ -c $<
clean:
rm *.o main
- 隐式规则
OBJ = main.o fun1.o fun2.o
CC = gcc
main:$(OBJ)
$(CC) $^ -o $@
clean:
rm *.o main
.bashrc
Linux 系统中很多 shell,包括bash,sh,zsh,dash 和 korn 等,不管哪种 shell 都会有一个 .bashrc
的隐藏文件,它就相当于 shell 的配置文件。
默认的.bashrc 在 /ect/skel/.bahsrc 目录下
gedit /etc/skel/.bashrc
不同目录下的 .bashrc
文件其作用不尽相同,比如:
/etc/skel/.bashrc
:文件将复制到系统上创建的任何新用户的主文件夹中 (也就是初始的.bashrc文件)/home/hj/.bashrc
:是bash
的配置文件,保存个人的一些个性化设置,如命令别名、路径等
个性化.bahsrc引用娜姐的.bashrc配置:
# ~/.bashrc: executed by bash(1) for non-login shells.
# see /usr/share/doc/bash/examples/startup-files (in the package bash-doc)
# for examples# If not running interactively, don't do anything
case $- in
*i*) ;;
*) return;;
esac# don't put duplicate lines or lines starting with space in the history.
# See bash(1) for more options
HISTCONTROL=ignoreboth# append to the history file, don't overwrite it
shopt -s histappend# for setting history length see HISTSIZE and HISTFILESIZE in bash(1)
HISTSIZE=1000
HISTFILESIZE=2000# check the window size after each command and, if necessary,
# update the values of LINES and COLUMNS.
shopt -s checkwinsize# If set, the pattern "**" used in a pathname expansion context will
# match all files and zero or more directories and subdirectories.
#shopt -s globstar# make less more friendly for non-text input files, see lesspipe(1)
[ -x /usr/bin/lesspipe ] && eval "$(SHELL=/bin/sh lesspipe)"# set variable identifying the chroot you work in (used in the prompt below)
if [ -z "${debian_chroot:-}" ] && [ -r /etc/debian_chroot ]; then
debian_chroot=$(cat /etc/debian_chroot)
fi# set a fancy prompt (non-color, unless we know we "want" color)
case "$TERM" in
xterm-color|*-256color) color_prompt=yes;;
esac# uncomment for a colored prompt, if the terminal has the capability; turned
# off by default to not distract the user: the focus in a terminal window
# should be on the output of commands, not on the prompt
#force_color_prompt=yesif [ -n "$force_color_prompt" ]; then
if [ -x /usr/bin/tput ] && tput setaf 1 >&/dev/null; then
# We have color support; assume it's compliant with Ecma-48
# (ISO/IEC-6429). (Lack of such support is extremely rare, and such
# a case would tend to support setf rather than setaf.)
color_prompt=yes
else
color_prompt=
fi
fiif [ "$color_prompt" = yes ]; then
PS1='${debian_chroot:+($debian_chroot)}\[\033[01;32m\]\u@\h\[\033[00m\]:\[\033[01;34m\]\W\[\033[00m\]\$ '
else
PS1='${debian_chroot:+($debian_chroot)}\u@\h:\W\$ '
fi
unset color_prompt force_color_prompt# If this is an xterm set the title to user@host:dir
case "$TERM" in
xterm*|rxvt*)
PS1="\[\e]0;${debian_chroot:+($debian_chroot)}\u@\h: \w\a\]$PS1"
;;
*)
;;
esac# enable color support of ls and also add handy aliases
if [ -x /usr/bin/dircolors ]; then
test -r ~/.dircolors && eval "$(dircolors -b ~/.dircolors)" || eval "$(dircolors -b)"
alias ls='ls --color=auto'
#alias dir='dir --color=auto'
#alias vdir='vdir --color=auto'alias grep='grep --color=auto'
alias fgrep='fgrep --color=auto'
alias egrep='egrep --color=auto'
fi# colored GCC warnings and errors
#export GCC_COLORS='error=01;31:warning=01;35:note=01;36:caret=01;32:locus=01:quote=01'# some more ls aliases
alias ll='ls -alF'
alias la='ls -A'
alias l='ls -CF'# my aliases
alias Makefile="cp ~/Templates/Makefile ./"
#alias Makefile="cp ~/Templates/opencv ./Makefile"
cdAndList() {
cd "${1}";
ls;
echo -e "\e[1;34m`pwd`\e[0m";
}
alias cd=cdAndList
# Add an "alert" alias for long running commands. Use like so:
# sleep 10; alert
alias alert='notify-send --urgency=low -i "$([ $? = 0 ] && echo terminal || echo error)" "$(history|tail -n1|sed -e '\''s/^\s*[0-9]\+\s*//;s/[;&|]\s*alert$//'\'')"'# Alias definitions.
# You may want to put all your additions into a separate file like
# ~/.bash_aliases, instead of adding them here directly.
# See /usr/share/doc/bash-doc/examples in the bash-doc package.if [ -f ~/.bash_aliases ]; then
. ~/.bash_aliases
fi# enable programmable completion features (you don't need to enable
# this, if it's already enabled in /etc/bash.bashrc and /etc/profile
# sources /etc/bash.bashrc).
if ! shopt -oq posix; then
if [ -f /usr/share/bash-completion/bash_completion ]; then
. /usr/share/bash-completion/bash_completion
elif [ -f /etc/bash_completion ]; then
. /etc/bash_completion
fi
fi