Lenh source trong linux

Di chuyển file và thư mục trong Linux là một trong những tác vụ cơ bản nhất mà bạn thường xuyên phải thực hiện. Bài viết hôm nay sẽ hướng dẫn bạn cách sử dụng lệnh mv trong Linux để di chuyển file & folder.

Lưu ý: Bạn cũng có thể áp dụng cách này để đổi tên file bằng cách di chuyển và đặt cho nó một cái tên mới.

Sau đây chúng ta cùng tìm hiểu cú pháp và làm một vài ví dụ về mv command nhé.

Lenh source trong linux

1. Cú pháp lệnh mv trong Linux

Lệnh mv (viết tắt của move) được sử dụng để đổi tên và di chuyển các file và thư mục từ vị trí này sang vị trí khác. Cú pháp của lệnh di chuyển file trong Linux bằng mv như sau:

mv [OPTIONS] SOURCE DESTINATION

Trong đó:

  • SOURCE có thể là file hoặc thư mục cần di chuyển
  • DESTINATION chính là nơi đến và số lượng thì tùy thuộc vào SOURCE:
    • Khi SOURCE là nhiều file hoặc thư mục thì DESTINATION phải là một thư mục. Trường hợp này thì các file hoặc folder sẽ di chuyển tới folder đích.
    • Nếu SOURCE là một file và DESTINATION là thư mục thì file đó se được chuyển đến thư mục.
    • Néu SOURCE là một file và DESTINATION cũng là một file thì bạn đang di chuyển và đổi tên file.
    • Khi SOURCE là một file và DESTINATION không tồn tại thì tức là bạn đang đổi tên của file tại ngay thư mục đang đứng. Ngược lại, nếu DESTINATION tồn tại thì là một hành động di chuyển file.

Để di chuyển một file hoặc thư mục thì bạn cần có quyền write trên cả SOURCE và DESTINATION.

Ví dụ: Để di chuyển file1 từ thư mục làm việc hiện tại hiện tại sang thư mục /tmp thì bạn sẽ chạy lệnh sau:

mv file1 /tmp

Để đổi tên file thì bạn chỉ cần nhập vào file gốc và nhập tên file mới.

mv file1 file2

Cú pháp để di chuyển thư mục cũng giống như khi di chuyển file. Trong ví dụ sau, nếu thư mục dir2 tồn tại thì lệnh sẽ chuyển dir1 vào bên trong dir2. Nếu dir2 không tồn tại, dir1 sẽ được đổi tên thành dir2:

mv dir1 dir2

2. Di chuyển nhiều file và nhiều thư mục bằng lệnh mv

Để di chuyển nhiều file và thư mục thì hãy chỉ định các file mà bạn muốn di chuyển làm nguồn.

Ví dụ, để di chuyển các file file1 và file2 vào thư mục dir1 thì bạn sẽ nhập lệnh sau:

mv file1 file2 dir1

Lệnh mv cũng cho phép bạn sử dụng pattern. Ví dụ: để di chuyển tất cả các file pdf từ thư mục hiện tại sang thư mục ~/Documents thì bạn sẽ chạy lệnh sau:

mv *.pdf ~/Documents

3. Tùy chọn option trong lệnh mv Linux

Lệnh mv cho phép bạn nhập một số tùy chọn cấu hình để thực hiện di chuyển dữ liệu theo mong muốn.

Trong một số bản phân phối Linux, lệnh mv có thể là bí danh alias của lệnh mv với một option khác. Ví dụ, trong CentOS thì lệnh mv là bí danh của mv -i. Bạn có thể kiểm tra xem mv có phải là bí danh hay không bằng cách sử dụng lệnh type:

type mv

Kết quả sẽ có dạng như sau:

mv is aliased to `mv -i'

Nếu các tùy chọn xung đột thì tùy chọn cuối cùng sẽ được lấy.

3.1 Hỏi xác nhận trước khi overwrite

Theo mặc định, nếu file đích tồn tại thì nó sẽ bị ghi đè và không có một thông báo gì cho bạn biết cả. Nếu bạn muốn nhận thông báo trước khi ghi đè thì hãy thêm tùy chọn -i nhé.

mv -i file1 /tmp

Nội dung hỏi sẽ có dạng như sau:

mv: overwrite '/tmp/file1'?

Nếu bạn nhập Y và nhấn enter thì đồng ý ghi đè, nhập N và enter thì không ghi đè.

3.2 Ép buộc ghi đè

Nếu bạn cố gắng ghi đè lên file chỉ đọc thì lệnh mv sẽ nhắc bạn có muốn ghi đè lên file đó không?

mv file1 /tmp
0

Để tránh bị nhắc thông báo thì bạn hãy thêm tùy chọn -f (–force):

mv file1 /tmp
1

3.3 Không ghi đè vào file đã tồn tại

Tùy chọn -n sẽ cho lệnh mv biết là không được ghi đè nếu file đã tồn tại.

mv file1 /tmp
1

Nếu file 1 đã tồn tại trong thư mục /tmp thì lệnh sẽ không làm gì, ngược lại nó sẽ được di chuyển vào thư mục /tmp.

3.4 Backup file

Nếu file đích đã tồn tại thì bạn có thể tạo ra một bản backup của file đó trước khi ghi đè. Để làm điều này thì sử dụng tùy chọn -b.

trần trân

19-02-2011, 10:59 AM

vì các câu lệnh trong file source của mình rất dài và có cả các hàm nữa, VD như thế này



################################################## ################################################## #
#
# Development (host) environment set-up script
#
# Assumes that the necessary SDKs (MRUA, Curacao, drms, Java, etc) have been already installed
#


# external dependencies

if [ -z $RUA_DIR ]; then
pushd ../mrua

if [ -f build.env ]; then
source build.env
else
source MRUA.env
fi

popd
else
if [ -f $RUA_DIR/MRUA.env ]; then
source $RUA_DIR/MRUA.env
elif [ -f $RUA_DIR/build.env ]; then
source $RUA_DIR/build.env
else
echo ""
echo "Warning: Neither 'MRUA.env' nor 'build.env' was found!"
echo " Assuming that the RUA environment is correctly set up ..."
echo ""
fi
fi

################################################## ################################################## #
# definitions shared between the host and target

source shared.env


################################################## ################################################## #
# host-only definitions

#
# OS/toolchain
#

if echo "$RMCFLAGS" | grep "EM86XX_MODEID_WITHHOST" >/dev/null; then
echo "******** WITHHOST mode ********"

# This assumes the system runs a Linux kernel compatible with withhost development
if [ -z $LINUX_KERNEL ]; then
K_VERSION=`uname -r`
export LINUX_KERNEL=/usr/src/linux-$K_VERSION
fi
else
echo "******** STANDALONE mode ********"

if [ -z $SMP86XX_TOOLCHAIN_PATH ]; then
if [ -f `pwd`/../toolchain/toolchain-path.env ]; then
source `pwd`/../toolchain/toolchain-path.env
else
echo ""
echo "Warning: SMP86XX_TOOLCHAIN_PATH is not set and toolchain-path.env could not be found."
echo ""
fi
fi

# check for CodeSourcery G++
CS_GCC=`mipsel-linux-gcc --version | grep Sourcery || true`

# check SMP86XX_ROOTFS_PATH if CS G++ is used
if [ -n "$CS_GCC" -a -z "$SMP86XX_ROOTFS_PATH" ]; then
echo "SMP86XX_ROOTFS_PATH is not set!"
echo "Go to the cs_rootfs directory and source rootfs-path.env."
fi

if [ -z $UCLINUX_KERNEL ]; then
export UCLINUX_KERNEL=`pwd`/../kernel_source
fi
fi

if [ ! -z $DCCHD_BUILD_TYPE ]; then
# remove 'release' and/or 'debug'
COMPILKIND=`echo $COMPILKIND | sed -e 's/debug//g'`
COMPILKIND=`echo $COMPILKIND | sed -e 's/release//g'`

# then append the build type
COMPILKIND=$COMPILKIND" $DCCHD_BUILD_TYPE"
fi

# Paranoia
if [ -n "$CS_GCC" ]; then
if [ "`echo $COMPILKIND | grep hardfloat`" = "" -o "`echo $COMPILKIND | grep codesourcery`" = "" ]; then
echo "Detected CodeSourcery compiler but hardfloat and(or) codesourcery are(is) missing from COMPILKIND!"
echo "Check your environment settings."
fi
fi

export COMPILKIND=$COMPILKIND' withthreads'


################################################## ################################################## #
# Complete the development environment with DCCHD-SDK specific settings.

export DCCHD_DIR=`pwd`/dcchd
export DIRECTFB_DIR=`pwd`/directfb
if [ -z $QT_DIR ]; then
# look for the standard location
_qt_dir=`pwd`/clients/qt
[ -f $_qt_dir/Makefile ] && export QT_DIR=$_qt_dir || true
fi

# StageCraft
if [ -z $SC_INSTALL_DIR ]; then
# look for the standard location
_sc_dir=`pwd`/clients/flashlite
[ -d $_sc_dir ] && export SC_INSTALL_DIR=$_sc_dir || true
fi

# It the netflix directory is present, check that the either Qt or FlashLite are present
if [ -d `pwd`/clients/netflix ]; then
# NRD >= 2.0.0
if [ -d `pwd`/clients/netflix/nrdlib -a -z $SC_INSTALL_DIR ]; then
echo "Warning: Netflix 2.x sources are present but SC_INSTALL_DIR is not set. Netflix will NOT compile!"
# NRD 1.5.x, 1.6.x
elif [ -d `pwd`/clients/netflix/Netflix -a -z QT_INSTALL_DIR ]; then
echo "Warning: Netflix 1.x sources are present but QT_INSTALL_DIR is not set. Netflix will NOT compile!"
else
echo ""
echo "Warning: "
echo "The Netflix SDK will be compiled with Janus and NCCP xtask support."
echo "Please make sure to have the corresponding DRM libraries installed on your system and target."
echo ""
# append Janus and enable the NCCP xtask
COMPILKIND=$COMPILKIND" janus nccpxtask"
fi
fi

source `pwd`/DCCHD.flags.env

################################################## ################################################## #
# Update the RMCFLAGS based on the existence of some directories and the corresponding RMCFLAGS

if [ ! -d `pwd`/dcchd/brd ] && ! echo $RMCFLAGS | grep -q -- "-DNO_BLUE_SUPPORT"; then
RMCFLAGS=$RMCFLAGS" -DNO_BLUE_SUPPORT"
fi

if [ ! -d `pwd`/dcchd/curacao ] && ! echo $RMCFLAGS | grep -q -- "-DNO_RED_SUPPORT"; then
RMCFLAGS=$RMCFLAGS" -DNO_RED_SUPPORT"
fi

if [ ! -d `pwd`/dcchd/dtv ] && ! echo $RMCFLAGS | grep -q -- "-DNO_DTV_SUPPORT"; then
RMCFLAGS=$RMCFLAGS" -DNO_DTV_SUPPORT"
fi

if [ ! -d `pwd`/dcchd/dtv/acap ] && ! echo $RMCFLAGS | grep -q -- "-DNO_ACAP_SUPPORT"; then
RMCFLAGS=$RMCFLAGS" -DNO_ACAP_SUPPORT"
fi

export RMCFLAGS

################################################## ################################################## #
# Output configuration settings.

echo "Your host environment is now configured with:"
echo "================================================== =="
echo ""
echo "SDK folders:"
echo " RUA_DIR = $RUA_DIR"
echo " DCCHD_DIR = $DCCHD_DIR"
echo " DIRECTFB_DIR = $DIRECTFB_DIR"
echo " DIRECTFB_INSTALL_DIR = $DIRECTFB_INSTALL_DIR"
echo " QT_DIR = $QT_DIR"
echo " QT_INSTALL_DIR = $QT_INSTALL_DIR"
echo " SC_INSTALL_DIR = $SC_INSTALL_DIR"
echo " SMP86XX toolchain = $SMP86XX_TOOLCHAIN_PATH"
echo ""
echo "Compilation flags:"
echo " COMPILKIND = $COMPILKIND"
echo " RMCFLAGS = $RMCFLAGS"



vậy làm sao mà dán vào được thằng /etc/profile